Monitoring
udev 監控熱插拔規則未執行
我已經設置了一個基本的 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
每次重新啟動時,文件名都會更改,因此您應該在腳本中自動確定它。這個答案應該會有所幫助。