Re: Running VDR from systemd on Raspberry Pi OS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Tue, Dec 27, 2022 at 12:04:00PM +0200, Marko Mäkelä wrote:
I might configure some more, such as:

* Write some udev rule so that when the USB storage is unplugged and replugged, the file system will be auto-mounted and VDR service will be started. * Restore /etc/systemd/logind.conf to HandlePowerKey=poweroff so that the system can be easily shut down by pressing the Power button again.

I finally figured it out mostly. What is missing is a nice way of overriding the power button. When VDR is running, the button should be handled by VDR; otherwise, pressing the power button should trigger system shutdown, like it does by default.

First, I removed the custom /etc/fstab entry. Everything will be controlled by systemd as follows:

sudo mkdir -m 000 /video
sudo tee /etc/systemd/system/video.mount << "EOF"
[Unit]
BindsTo=dev-disk-by\x2dlabel-VDR.device
After=dev-disk-by\x2dlabel-VDR.device
Requires=systemd-fsck@dev-disk-by\x2dlabel-VDR.service
After=systemd-fsck@dev-disk-by\x2dlabel-VDR.service
[Mount]
Where=/video
What=/dev/disk/by-label/VDR
Type=ext4
Options=defaults,noatime,nofail
[Install]
WantedBy=dev-disk-by\x2dlabel-VDR.device
EOF
sudo tee /etc/systemd/system/vdr.service << "EOF"
[Unit]
Description=Runs VDR when storage is plugged in
After=systemd-user-sessions.service plymouth-quit-wait.service
After=rc-local.service
After=getty@tty1.service
BindsTo=dev-disk-by\x2dlabel-VDR.device
After=dev-disk-by\x2dlabel-VDR.device
After=video.mount
Conflicts=getty@tty1.service
ConditionPathExists=/video/video
[Service]
User=pi
ExecStart=/usr/local/bin/vdr --no-kbd --lirc=/dev/lirc0 -Prpihddevice -v /video/video -s /var/lib/vdr/vdr-shutdown.sh
TimeoutStartSec=infinity
Type=idle
Restart=on-failure
RestartSec=1s
TTYVTDisallocate=yes
[Install]
WantedBy=dev-disk-by\x2dlabel-VDR.device
EOF
sudo systemctl enable video.mount
sudo systemctl enable vdr
sudo udevadm control --reload
cat > /var/lib/vdr/vdr-shutdown.sh << "EOF"
#!/bin/sh
set -eu
if [ "$5" = 1 ]
then
  sudo udisksctl unmount -b /dev/disk/by-label/VDR
  sudo udisksctl power-off -b /dev/disk/by-label/VDR
  PK=/etc/systemd/logind.conf.d/00-powerkey.conf
  sudo mv -f "$PK".disabled "$PK" || :
  sudo systemctl restart systemd-logind
  sudo mv -f "$PK" "$PK".disabled
  sudo systemctl stop vdr
fi
EOF
chmod +x /var/lib/vdr/vdr-shutdown.sh
sudo mkdir /etc/systemd/logind.conf.d
sudo tee /etc/systemd/login.conf.d/00-powerkey.conf.disabled << "EOF"
[Login]
HandlePowerKey=poweroff
EOF
sudo systemctl restart systemd-logind

In addition to these, /etc/systemd/login.conf needs to be edited so that its [Login] section says HandlePowerKey=ignore.

I also had a udev rule that would execute "systemctl restart systemd-logind" when the storage is plugged in. Without that, if I plugged in the storage (and got VDR auto-started), then pressed the power button, and then repeated the same (unplug, replug, press the power button again), the system would shut down abruptly.

If there is a better way to make systemd-logind ignore the power button as long as VDR is running, please let me know. I tried adding Conflicts=exit.target to the vdr.service, but that did not prevent the shutdown. A rule Conflicts=shutdown.target means that the service shall be terminated on shutdown, according to "man 7 systemd.special".

	Marko

_______________________________________________
vdr mailing list
vdr@xxxxxxxxxxx
https://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr




[Index of Archives]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Big List of Linux Books]     [Fedora Users]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux