나는 새 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를 자동으로 읽어 루트로 실행하므로 괜찮을 것 같은데 왜 실패하는지 모르겠습니다.