Shell-Script
Udev:執行一個訪問 X 顯示器的 shellscript
在讓我的 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。我已經測試了腳本本身並且它可以工作。創建測試目錄的第二個**RUN+也可以工作。**因此,我不知道我做錯了什麼。
@EightBitTony 可能是對的。udev 規則以 root 使用者身份執行。因此,除了指定 之外
DISPLAY
,您還需要授予該 root 使用者訪問您的 X 會話的權限。這可以通過找到相應的授權文件並將其導出為
XAUTHORITY
.echo $XAUTHORITY
從終端仿真器可以告訴你,它在哪裡。使用顯示管理器,位置可能會在每次登錄時發生變化。或者,您可以從您的 x 會話中呼叫
xhost +
,授予所有其他使用者訪問此會話的權限。xhost -
會再次關閉它。請注意,這也使遠端使用者能夠使用 TCP 埠訪問會話。