Shell-Script

Udev:執行一個訪問 X 顯示器的 shellscript

  • June 27, 2013

在讓我的 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 埠訪問會話。

引用自:https://unix.stackexchange.com/questions/80882