gpt4 book ai didi

linux - udev 规则不触发 GUI 应用程序

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:17 31 4
gpt4 key购买 nike

我能够在 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

这些都不起作用,关于如何让它起作用有什么想法吗?

谢谢

最佳答案

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

关于linux - udev 规则不触发 GUI 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53438382/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com