我有一个稍微复杂的设置,允许我launchpad-daemon.service
在插入 USB 设备时启动 systemd 用户服务 ( ),并在拔出设备时停止它。它由以下 udev 规则组成:
SUBSYSTEM=="sound", ENV{ID_MODEL}=="Launchpad_Mini_MK3", ENV{SYSTEMD_USER_WANTS}+="launchpad-daemon.service"
和用户服务配置如下:
[Service]
ExecStart=/.../launchpad-daemon-start
ExecStopPost=/.../launchpad-daemon-stop
Type=simple
WorkingDirectory=/...
[Unit]
Description=Novation Launchpad daemon
StopWhenUnneeded=true
当我在登录时插入/拔出 USB 设备时,此功能非常有用。不幸的是,如果我在设备已插入时登录,则该功能不起作用 -systemctl --user status
报告该服务处于非活动状态,除非我手动启动它或重新插入装置。通常我会在登录时通过设置类似 的内容来启动服务WantedBy=graphical-session.target
,但这可能会启动它,无论 USB 设备是否可用。
如何让服务在登录时自动启动当且仅当USB 设备已插入?
答案1
你可以添加
[Unit]
ConditionPathExists=/dev/path/to/mydevice
# e.g. /dev/disk/by-id/usb-Ut165_USB2FlashStorage_0805090215d3a7-0
除了WantedBy=sometarget.target
仅在指定的设备文件存在(即设备已插入)时启动服务。
但这不适用于通配符服务。