我设置了一个基本的 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 电缆时,它应该只启动 aranr,但没有任何反应。我还重新加载了规则:
udevadm control --reload-rules
++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++ 问题就这样解决了。使用@Gilles 提供的链接。我将以下代码添加到我的.profile
then 指向中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
答案1
默认情况下,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"
网上找到的例子证实了我的理解,例如编码托尼谁的monitor-hotplug.sh
脚本您可能感兴趣。
每次重新启动时,下面的文件名/var/run
都会发生变化,因此您应该在脚本中自动确定它。这个答案应该有帮助。
答案2
对于任何处理 nvidia 卡的人,要使 udev 规则起作用,您必须打开内核模式设置
sudo grubby --update-kernel=ALL --args='nvidia-drm.modeset=1'