Debian8.2 xfce桌面设置双屏

最近想折腾 Xfce,并且 Fedora 的包都好老啊,因此换了 Arch Linux… 果真装完就有的折腾了:Xfce 4.0 竟然不支持双显示器扩展桌面(extended desktop)!若是经过调用 xrandr 动态增长显示器的方法,在拔出显示器的时候竟然笔记本内置的显示器分辨率设置会乱掉…shell

针对不能自动检测、自动调整的问题,我发现了其实能够用 inotify 检测 /sys/class/drm/card0-VGA-1/status 这个文件的改动(其实作不到,继续读),而后在有改动的时候调用 xrandr 来配置/关闭外接显示器。bash

首先俺在 Terminal 里面运行:学习

[jiehan@tpx300 ~]$ cat /sys/class/drm/card0-VGA-1/status
connected

而后在拔出 VGA1 上的显示器后,再运行能显示:spa

[jiehan@tpx300 ~]$ cat /sys/class/drm/card0-VGA-1/status
disconnected

既然如此,inotifywait -e modify /sys/class/drm/card0-VGA-1/status 就能在/sys/class/drm/card0-VGA-1/status 被改动的时候返回了吧?命令行

—— 但是… 事实不是这样的(废话,要是这样的话还折腾啥呢?为啥呢,由于 inotify FAQ 里有这句话:code

Q: Can I watch sysfs (procfs, nfs…)?
Simply spoken: yes, but with some limitations. These limitations vary between kernel versions and tend to get smaller. Please read information about particular filesystems.orm

诶,那看看总共能用啥吧… 来监视一下全部的事件,以下是运行后插拔显示器 stdout 的输出:事件

[jiehan@tpx300 ~]$ inotifywait -m /sys/class/drm/card0-VGA-1/status 2> /dev/null
/sys/class/drm/card0-VGA-1/status OPEN 
/sys/class/drm/card0-VGA-1/status ACCESS 
/sys/class/drm/card0-VGA-1/status CLOSE_NOWRITE,CLOSE 
/sys/class/drm/card0-VGA-1/status OPEN 
/sys/class/drm/card0-VGA-1/status ACCESS 
/sys/class/drm/card0-VGA-1/status CLOSE_NOWRITE,CLOSE 
^C

啥?OPEN、ACCESS、CLOSE_NOWRITE 和 CLOSE 事件?为啥实际 MODIFY 了可是没事件呢?估计是由于 /sys 是个 sysfs 吧,鬼知道… 因此咱们只能 inotifywait 任何一个关于/sys/class/drm/card0-VGA-1/status 的事件了。这也就要求你没事不要老去读那个文件,否则每次你的脚本都得判断一下…rem

好吧,那就酱紫:get

[jiehan@tpx300 ~]$ cat bin/dual-monitor-watch 
#!/bin/bash 
function connection_check {
    if [ "connected" = $( cat /sys/class/drm/card0-VGA-1/status ) ]; then
        setup_monitorelse
        turn_off_monitorfi
    } 
    
function setup_monitor {
    notify-send 'Secondary monitor detected' 'xrandr --output VGA1 --auto --right-of LVDS1' --icon=dialog-information
    xrandr --output VGA1 --auto --right-of LVDS1
} 

function turn_off_monitor {
    notify-send 'Secondary monitor disconnected' 'xrandr --output VGA1 --off' --icon=dialog-information
    xrandr --output VGA1 --off
} 

notify-send 'Ready to handle secondary monitor' --icon=dialog-information
connection_check

while inotifywait /sys/class/drm/card0-VGA-1/status &> /dev/null; do
    connection_checkdone
done

而后能够把 /home/$USER/bin/dual-monitor-watch 给 chmod +x 了而后给放到 Session and Startup 里面自动启动就好啦~

说明:

  • inotifywait 在 inotify-tools 包中,使用前得先安装。

  • VGA1 这样的标识能够经过 xrandr -q 获得。

限制:

  • 这个脚本没作锁,因此进入桌面那次运行就好了别反复运行…

  • 这个脚本确实有问题,好比若是你先拔了显示器在 xrandr 还没运行完的时候就又给显示器插上了,那 inotifywait 还没来及运行呢… 懒得改了,自重吧… 反正是你本身电脑 :D

参考连接:

https://jiehan.org/tech/xfce-dual-monitor-with-hotplugging-capabilities/

我的阅后感想:

我靠,真的不通常,好吧,我认可我收获了不少东西。

很值得学习的。。。


PS. 一些备注

xrandr 命令行能够很方便地切换双屏,经常使用方式以下,其余的能够本身探索: xrandr --output VGA --same-as LVDS --auto 打开外接显示器(最高分辨率),与笔记本液晶屏幕显示一样内容(克隆) xrandr --output VGA --same-as LVDS --mode 1024x768 打开外接显示器(分辨率为1024x768),与笔记本液晶屏幕显示一样内容(克隆) xrandr --output VGA --right-of LVDS --auto 打开外接显示器(最高分辨率),设置为右侧扩展屏幕 xrandr --output VGA --off 关闭外接显示器 xrandr --output VGA --auto --output LVDS --off 打开外接显示器,同时关闭笔记本液晶屏幕(只用外接显示器工做) xrandr --output VGA --off --output LVDS --auto 关闭外接显示器,同时打开笔记本液晶屏幕 (只用笔记本液晶屏) (最后两种状况请当心操做,不要误把两个屏幕都关掉了。。。。)
相关文章
相关标签/搜索