私はこのユニットファイルを持っていますhdmi_sound_toggle.service
:
[Unit]
Description=Runs /usr/local/bin/hdmi_sound_toggle.py to switch to the correct sound output
[Service]
Type=oneshot
ExecStart=/usr/local/bin/hdmi_sound_toggle.py
次に、次のudevルールがあります。
SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/run_hdmi_sound_toggle"
持っている/usr/local/bin/run_hdmi_sound_toggle
:
#!/bin/bash
systemctl [email protected] --user --now start hdmi_sound_toggle.service
走り終わった後
sudo systemctl daemon-reload
sudo udevadm control --reload-rules
sudo udevadm trigger --verbose --action=change --subsystem-match=drm
ファイルが/usr/local/bin/hdmi_sound_toggle.py
正常に実行されます。スクリプトを呼び出す[email protected] --user
ため、パラメータが必要です。pactl
udevはrootとして実行されるため、ユーザープロセスとして実行されているPipewire / PulseAudio(私が正しく実行した場合)は接続を拒否し、スクリプトは失敗します。
しかし、udevを介して直接systemdユニットを実行したいと思います/usr/local/bin/run_hdmi_sound_toggle
。これを機能させるにはどうすればよいですか[email protected] --user
?文書を見ようとしましたが、わかりません。
答え1
したがって、これはサポートされていないため不可能であることがわかりました。https://lists.freedesktop.org/archives/systemd-devel/2022-January/047336.html