linux – 为外部显示添加udev规则

我写了一个小的shell脚本,用xrandr配置连接的外部显示器.

# cat /home/didi/bin/monitor_autoswitcher.sh 
#!/bin/bash

xrandr | grep "HDMI1 connected"
if [[ $? == 0 ]]; then
  # is connected
  xrandr --output HDMI1 --right-of LVDS1 --auto
else
  # not connected
  xrandr --output HDMI1 --auto
fi

xrandr | grep "VGA1 connected"
if [[ $? == 0 ]]; then
  # is connected
  xrandr --output VGA1 --right-of LVDS1 --auto
else
  # not connected
  xrandr --output VGA1 --auto
fi

这样可行.现在我想让它自动触发,并发现这可以用udev完成.
我试过了

udevadm monitor

当插入外部显示输出时

KERNEL[465828.240250] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
UDEV  [465828.243549] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)

插上电源时

KERNEL[465836.844209] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
UDEV  [465836.847445] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)

也不错.

然后我添加了一个udev规则:

# cat 40-external-display.rules 
SUBSYSTEM=="drm",ACTION=="change",RUN+="/home/didi/bin/monitor_autoswitcher.sh"

并重新启动udev

service udev restart

不幸的是,插入/拔出显示器时仍然没有任何反应.脚本monitor_autoswitcher.sh肯定有效,因为在插入后手动调用它会做它应该做的事情.

少了什么东西?

最佳答案
这看起来几乎是一回事.我看到的唯一真正的区别是脚本设置了DISPLAY变量,这可能是关键.

http://ruedigergad.com/2012/01/28/hotplug-an-external-screen-to-your-laptop-on-linux/

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...