udev规则不会触发GUI应用程序

时间:2018-11-22 21:55:20

标签: linux ubuntu linux-device-driver udev hotplugging

我可以在99-monitor-hotplug.rules中获得udev规则来触发:

ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", 
RUN+="/usr/local/bin/monitor-hotplug.sh"

但是我似乎无法在monitor-hotplug.sh脚本中触发OpenCV GUI应用程序。

我从根本上理解udev规则是作为root运行的,但是无论我尝试使用哪种语法,我都无法使其在用户级别正常运行以运行应用程序(运行应用程序的实际脚本可以正常工作)。

我已经尝试以这种格式运行:

su - your_X_user_here -c 'export DISPLAY=:0; bash -c "/path/to/script.sh"'

带脚本:

#!/bin/bash
#sleep 5
date >> /var/log/opencvlog.log
cd ~/Downloads
./displayimage /home/<username>/Pictures/picture.png 
>/var/log/application.log 
2>&1

另一种尝试:

在当前语法中添加99-monitor-hotplug.rules:

ACTION=="change", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", 
ENV{XAUTHORITY}="/home/<username>/.Xauthority" ENV{HOTPLUG}=="1", 
RUN+="/usr/local/bin/monitor-hotplug.sh"

然后在实际脚本中:

export DISPLAY=:0
export XAUTHORITY=/home/<username>/.Xauthority
cd ~/Downloads
date 
./displayimage /home/<username>/Pictures/picture.png

这些都不起作用,对如何使它起作用有任何想法吗?

谢谢

1 个答案:

答案 0 :(得分:0)

使用显示管理器(如gdm)时,当前的X授权文件可能不在用户主目录中,而在运行时目录中,例如/run/var/run

您可以尝试以下方法:

USER=<username>
export XAUTHORITY=$(find /var/run/gdm3/ -type f -path "*${USER}*" 2> /dev/null)

较新的gdm版本似乎将文件放在更通用的位置:

export XAUTHORITY=$(find /run/user/$(id -u "$USER")/ -name Xauthority 2> /dev/null)

我使用此技术调用xrandr来根据udev规则调整屏幕分辨率:
https://git.ao2.it/libam7xxx.git/blob/HEAD:/contrib/am7xxx-autodisplay.sh