udevルールは機能しますが、スクリプトは失敗します。

udevルールは機能しますが、スクリプトは失敗します。

私は新しいHDMIと新しいUSBが接続されたときにそれを検出し、私のRustプログラムに通知しようとします。私のルールは次のとおりです。

$ /etc/udev/rules.d/80-device-detect.rules
KERNEL=="card0-HDMI-A-1", SUBSYSTEM=="drm", ACTION=="change", RUN+="/home/yuutsuna/scripts/hdmi1_changed.sh"
KERNEL=="card0-HDMI-A-2", SUBSYSTEM=="drm", ACTION=="change", RUN+="/home/yuutsuna/scripts/hdmi2_changed.sh"
SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="/home/yuutsuna/scripts/usb_added.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="/home/yuutsuna/scripts/usb_removed.sh"

以下はスクリプトの1つです。

$ ~/script/hdmi1_changed.sh
#!/bin/sh
status=$(cat /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1/status)
busctl --user call com.u2p.DeviceListener /com/u2p/DeviceListener com.u2p.DeviceListener1 NewDevice ssss "HDMI" "$status" "0000:02.0" "test"

USBは同じですが、状態を取得する必要はありません。

これまで私が知る/行動は次のとおりです。

  • 私のRustプログラムが実行されていないと、実行中のスクリプトがクラッシュします(大丈夫です)。

  • プログラムの実行中にスクリプトを手動で実行すると正常に動作し、プログラムはDBusからメッセージを受け取ります。

  • プログラムの実行中にHDMIの1つを取り外し/接続すると、コード1で失敗

  • スクリプトの1つをecho test >> test.log次のように変更してみました。ロギングに最適失敗がないため、ルールが機能します。

  • #!/bin/bashスクリプトのタイトルを次から変更してみました。#!/bin/sh

  • chmod 777私のディレクトリとスクリプトで私がしたこと

  • スクリプトをから何も変更しない/binに移動しました。~/scripts

どうすればいいのかわかりません... udevを自動的に読み込み、rootとして実行するので大丈夫だと思いますが、なぜ失敗するのかわかりません。

ベストアンサー1

おすすめ記事