ログイン時にudevを有効にするシステムユーザーサービスを開始するには?

ログイン時にudevを有効にするシステムユーザーサービスを開始するには?

launchpad-daemon.serviceUSBデバイスが接続されているときにシステムユーザーサービス()を起動し、デバイスが切断されたときに停止できるようにする少し複雑な設定があります。これは次の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(つまり、デバイスが接続されている場合)。

ただし、これはワイルドカードサービスには適用されません。

関連情報