我试图在插入新的 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 身份运行,所以应该没问题,但我不知道为什么会失败。