Monitoring

udev 監控熱插拔規則未執行

  • June 29, 2019

我已經設置了一個基本的 udev 規則來檢測我何時連接或斷開 mDP 電纜。

該文件是/etc/udev/rules.d/95-monitor-hotplug.rules

KERNEL=="card0", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/var/run/gdm/auth-for-vazquez-OlbTje/database", RUN+="/usr/bin/arandr"

當它們是連接或斷開連接的 mDP 電纜時,它應該只啟動 arandr,但沒有任何反應。我還重新載入了規則:

udevadm control --reload-rules 

++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++ 問題就這樣解決了。使用@Gilles 提供的連結。我將以下程式碼添加到我的.profile然後指向ENV{$XAUTHORITY}="/home/user/.Xauthority"並添加ACTION=="change"到規則文件中。在那之後,一切都按原樣工作。謝謝吉爾斯。

case $DISPLAY:$XAUTHORITY in
 :*:?*)
   # DISPLAY is set and points to a local display, and XAUTHORITY is
   # set, so merge the contents of `$XAUTHORITY` into ~/.Xauthority.
   XAUTHORITY=~/.Xauthority xauth merge "$XAUTHORITY";;
esac

預設情況下,udev 規則適用於add操作。udev 規則是在顯卡上,而不是在顯示器上;因此它在將顯卡添加到系統時執行,這實際上意味著在啟動時。

插入監視器會導致change操作,而不是add操作。udevadm monitor您可以通過執行並插入監視器來觀察這一點。因此 udev 規則應該指定一個change操作。

KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", \
   ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/var/run/gdm/auth-for-vazquez-OlbTje/database", RUN+="/usr/bin/arandr"

在網上找到的例子證實了我的理解,例如你可能感興趣的codetony腳本monitor-hotplug.sh

/var/run每次重新啟動時,文件名都會更改,因此您應該在腳本中自動確定它。這個答案應該會有所幫助。

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