在监视器连接/断开事件上运行脚本

我读了许多关于如何做到这一点的线索,但这对我没有任何作用。

我想要达到的是:

当我的笔记本电脑有两个额外的显示器连接,当我关上它的盖子,我不想让它去睡觉。 但是,如果我断开显示器并closures盖子,我想让笔记本电脑进入睡眠状态(这样不会忘记)。


因此,我创build了一个应该在VGA / HDMI连接事件上执行的BASH脚本。 BASH脚本计算连接的显示器数量,如果只有1个,那么当盖子closures时,它将使笔记本电脑进入睡眠状态。

我有Ubuntu 14.04 LTS。 这是我迄今为止所做的:

  • 创build了2个文件: displays_count_sleep.shon_hdmi_connected.rules
    https://gist.github.com/nbtk123/9ffbf7541e47b9c0015f5c3e9f44b7c9

  • 把这个on_hdmi_connected.rules放到/etc/udev/rules.d来捕捉事件:

 SUBSYSTEM=="drm", RUN+="/bin/bash /home/nir/dev/scripts/displays_count_sleep.sh" 
  • 把我想要运行的bash脚本, displays_count_sleep.sh ,放到/home/nir/dev/scripts
 #!/bin/bash DISPLAYS_NUM=2 `touch test` display_count=`xrandr -d :0 -q | grep ' connected' | wc -l` echo "display count="$display_count echo "display_num="$DISPLAYS_NUM if [ "$display_count" -ge "$DISPLAYS_NUM" ]; then echo "nothing" `gsettings set org.gnome.settings-daemon.plugins.power lid-close-ac-action nothing` `gsettings set org.gnome.settings-daemon.plugins.power lid-close-battery-action nothing` else echo "sleep" `gsettings set org.gnome.settings-daemon.plugins.power lid-close-ac-action suspend` `gsettings set org.gnome.settings-daemon.plugins.power lid-close-battery-action suspend` fi 

这两个文件都是以root身份创build的。 运行“ udevadm test ”时,输出如链接上的文件“ udevadm_test_output ”中所示。

我不知道事件是否被捕获,但在真正的监视器(dis)连接上,脚本不运行。 它工作正常,如果我手动运行。