在我的 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 端口访问会话。