【问题标题】:udev rule doesnt trigger GUI applicationudev 规则不会触发 GUI 应用程序
【发布时间】:2018-11-22 21:55:20
【问题描述】:

我可以在 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 身份运行,但无论我尝试什么语法,我都无法让它在用户级别正常运行以运行应用程序(运行应用程序的实际脚本工作正常)。

我试过在 RUN 这种格式下:

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

这些都不起作用,有什么想法可以让它起作用吗?

谢谢

【问题讨论】:

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


    【解决方案1】:

    当使用像 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

    【讨论】:

    • 感谢您的回复,我认为您说的很有道理。我正在使用 lightdm 窗口管理器,我认为这是 Xauthority 的正确路径: XAUTHORITY=/var/run/lightdm/root/:0 。即使这样,我的 gui 应用程序脚本也不会根据 udev 规则触发。这个 Xauthority 值对您来说是否正确?谢谢
    • 我希望/var/run/lightdm/$USER/xauthority 之类的东西 $USER 登录后是否可用。这可能是默认情况下未启用此功能LightDM,见bugs.launchpad.net/ubuntu/+source/lightdm/+bug/1648107/comments/…askubuntu.com/questions/960793/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多