SYNOPSYS
I use a raspberry 5 has media player.
My music and movies are on a usb drive, synced via unison.
I want mpd service to be started / stopped when this USB drive is plugged / unplugged.
DOCUMENTATION
name
PROCEDURE
query the drive serial
1
|
udevadm info --attribute-walk --path=$(udevadm info --query=path --name=/dev/sda1) | grep serial
|
create a udev rule that starts a systemd service, if you don’t, boot hangs or stalls
1
2
|
/etc/udev/rules.d/90-usb-mpd.rules
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{serial}=="575841314141364A53544858", TAG+="systemd", ENV{SYSTEMD_WANTS}="usb-mpd@%k.service"
|
create the corresponding systemd template service
1
2
3
4
5
6
7
8
9
10
|
/etc/systemd/system/usb-mpd@.service
[Unit]
Description=Mount USB and start MPD for device %I
After=local-fs.target
Requires=dev-%i.device
[Service]
Type=oneshot
ExecStart=/usr/local/bin/usb-mpd.sh /dev/%I
RemainAfterExit=true
|
Create the script to mount + start MPD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/usr/local/bin/usb-mpd.sh
#! /usr/bin/bash
DEVICE="$1"
logger "USB-MPD: Device detected: $DEVICE"
udisksctl mount -b "$DEVICE"
MOUNT_POINT=$(lsblk -no MOUNTPOINT "$DEVICE")
if [[ "$MOUNT_POINT" == *"/media/"* ]]; then
logger "USB-MPD: Mounted at $MOUNT_POINT, starting MPD"
systemctl --user start mpd.service
else
logger "USB-MPD: Mount failed or not detected"
fi
|
1
|
sudo chmod +x /usr/local/bin/usb-mpd.sh
|