udev 监控热插拔规则未运行

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 电缆时,它应该只启动 aranr,但没有任何反应。我还重新加载了规则:

udevadm control --reload-rules 

++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++ 问题就这样解决了。使用@Gilles 提供的链接。我将以下代码添加到我的.profilethen 指向中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'

相关内容