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