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"

这是其中一个脚本:

$ ~/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

  • 我尝试将其中一个脚本更改echo test >> test.log它写日志很好没有失败,所以规则正在发挥作用

  • 我尝试将脚本标题从更改#!/bin/bash#!/bin/sh

  • chmod 777对我的目录和脚本做了

  • 我将脚本从 移动/bin~/scripts没有改变任何东西

我不知道该怎么办...我自动读取 udev 以 root 身份运行,所以应该没问题,但我不知道为什么会失败。

相关内容