Udev:运行访问 X 显示的 shell 脚本

Udev:运行访问 X 显示的 shell 脚本

在我的 3g 调制解调器投入使用后,Arch Linux我想消除该过程中所需的一些体力劳动。因此我需要创建一个 udev 规则。经过一番尝试和错误后,我想出了以下规则,并将11-my-rule.rules其放置在/etc/udev/rules.d/

# start at sdb to ignore the system hard drive
KERNEL!="sd[b-z]*", GOTO="my_media_automount_end"

# run the script and create a testdir to verify the rule works
ACTION=="add", RUN+="/myscript.sh", RUN+="/bin/mkdir -p '/media/pendrive'"

#remove the testfolder on removal of usb
ACTION=="remove", RUN+="/bin/rm -R '/media/pendrive'"

# exit
LABEL="my_media_automount_end"

我要运行的测试脚本如下:

#!/bin/bash

DISPLAY=:0 xterm

其中显示 xterminal。我已经测试了脚本本身并且它有效。还有第二个跑步+创建测试目录也有效。因此,我不知道我做错了什么。

答案1

@EightBitTony 可能是对的。 udev 规则以 root 用户身份执行。因此,除了指定 之外DISPLAY,您还需要授予此 root 用户对 X 会话的访问权限。

这可以通过找到相应的权限文件并将其导出为XAUTHORITY.echo $XAUTHORITY终端模拟器可以告诉您它在哪里。

使用显示管理器,每次登录时位置可能会发生变化。或者,您可以调用xhost +从您的 x 会话中,授予所有其他用户对此会话的访问权限。xhost -会再次关闭它。请注意,这还允许远程用户使用 TCP 端口访问会话。

相关内容