udev rules.d – 热插拔HDMI监视器 – 脚本未运行
我试图让每次插入HDMI监视器时运行一个脚本,在读完之后我发现了这个并在其中要求我创建99-monitor-hotplug.rules并把它放在/etc/udev/rules.d并指定我想要运行的脚本。 该规则如下所示:
ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/root/hotplug.sh"
嗯,我做到了,但脚本没有运行。 我知道这是因为在脚本中我只有:
#!/bin/bash opera
我故意制作剧本那么简单,所以我可以看到正在发生的事情。 当我从命令行调用脚本时,Opera会运行。
以下是当“ udevadm monitor –property ”运行时插入和拔出HDMI监视器时发生的情况:
monitor will print the received events for: UDEV - the event which udev sends out after rule processing KERNEL - the kernel uevent KERNEL[730.834194] change /devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 (drm) ACTION=change DEVNAME=/dev/dri/card1 DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 DEVTYPE=drm_minor HOTPLUG=1 MAJOR=226 MINOR=1 SEQNUM=3245 SUBSYSTEM=drm UDEV [730.835499] change /devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 (drm) ACTION=change DEVNAME=/dev/dri/card1 DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 DEVTYPE=drm_minor HOTPLUG=1 ID_FOR_SEAT=drm-pci-0000_01_00_0 ID_PATH=pci-0000:01:00.0 ID_PATH_TAG=pci-0000_01_00_0 MAJOR=226 MINOR=1 SEQNUM=3245 SUBSYSTEM=drm TAGS=:seat:uaccess:master-of-seat: USEC_INITIALIZED=3217504 KERNEL[738.204082] change /devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 (drm) ACTION=change DEVNAME=/dev/dri/card1 DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 DEVTYPE=drm_minor HOTPLUG=1 MAJOR=226 MINOR=1 SEQNUM=3246 SUBSYSTEM=drm UDEV [738.206107] change /devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 (drm) ACTION=change DEVNAME=/dev/dri/card1 DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 DEVTYPE=drm_minor HOTPLUG=1 ID_FOR_SEAT=drm-pci-0000_01_00_0 ID_PATH=pci-0000:01:00.0 ID_PATH_TAG=pci-0000_01_00_0 MAJOR=226 MINOR=1 SEQNUM=3246 SUBSYSTEM=drm TAGS=:seat:uaccess:master-of-seat: USEC_INITIALIZED=3217504
添加规则后,我确实运行了: sudo udevadm control –reload-rules
有人可以协助吗? 我觉得规则可能不正确,我不熟悉创建udev规则。 我正在运行Ubuntu 16.04。
歌剧? 不好了! RUN
仅适用于短期运行任务,udev在受限环境中运行命令。
没有GUI支持,守护进程将在完成事件处理后被杀死。
如果您只想测试规则是否被触发,请尝试以下操作:
#!/bin/bash date >> /root/myrule.log
参考: man udev
RUN {}型
这只能用于非常短时间运行的前台任务。 长时间运行事件过程可能会阻止此设备或从属设备的所有其他事件。
启动守护进程或其他长时间运行的进程不适用于udev; 事件处理完成后,将无条件地终止分离或未分离的分叉进程。
user.dz’的回答只适用于我第一次。 这种方法每次都适合我:
KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/marco/.Xauthority", RUN+="/bin/bash /root/hdmi_hotplug.sh"