如何在登录时启动 udev 激活的 systemd 用户服务?

如何在登录时启动 udev 激活的 systemd 用户服务?

我有一个稍微复杂的设置,允许我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仅在指定的设备文件存在(即设备已插入)时启动服务。

但这不适用于通配符服务。

相关内容