文档章节

Debian8.2 xfce桌面设置双屏

码农小骚年
 码农小骚年
发布于 2016/01/11 18:55
字数 1015
阅读 249
收藏 1

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

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

首先俺在 Terminal 里面运行:

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

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

[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 里有这句话:

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.

诶,那看看总共能用啥吧… 来监视一下所有的事件,如下是运行后插拔显示器 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 的事件了。这也就要求你没事不要老去读那个文件,不然每次你的脚本都得判断一下…

好吧,那就酱紫:

[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
关闭外接显示器,同时打开笔记本液晶屏幕 (只用笔记本液晶屏)
(最后两种情况请小心操作,不要误把两个屏幕都关掉了。。。。)

本文转载自:https://jiehan.org/tech/xfce-dual-monitor-with-hotplugging-capabilities/

码农小骚年
粉丝 1
博文 15
码字总数 4179
作品 0
大庆
私信 提问
Debian8.2安装笔记

既然是Linux,还是Debian,干脆就直接最新版本吧!于是就下载了最新的Debian8.2。网上相关的安装资料不是很多,Linux也总会让人有意外的惊喜,与是,我遇到了几个问题,这里记录一下。 在搜狐...

码农小骚年
2016/01/10
748
0
MakuluLinux 发布新版

MakuluLinux 是一个基于 Debian 的桌面 Linux 发行版,由 Makulu(读作:Ma-Coo-Loo)团队开发。 MakuluLinux 采用衍生自 Xfce 的自有桌面环境,提供了开箱即用的流畅用户体验,预设有窗口透...

linuxCool
03/08
12
0
使用 Xfce Linux 桌面环境的 8 个理由

整体上很优雅的 Xfce 桌面所具备的足够轻巧和快速的特性能够让它很容易都知道如何做好一件事。 由于某些原因(也包括好奇),几周前我开始使用 Xfce 作为我的 Linux 桌面。促使我更换 Linux ...

作者: David Both
01/04
0
0
解决vnc灰屏,黑屏,鼠标大黑叉情况

解决linux上VNC安装好后登录出现黑屏、灰屏、鼠标是大黑叉情况 安装系统支持包组 服务器(Centos,rhel)在安装字符界面操作系统时默认是不会安装相关图形包组的。 # yumgroupinstall "GNOME...

微凉清风
2017/09/30
0
0
Xfce 4.8发布

Xfce 4.8发布 发表于:2011-1-17 22:00 UTC 已经两年时间了。不过,好的东西总要人等待。Xfce组最终发布了他们4.8版本的基于Gtk+的桌面环境。此款发行除了带来一些新的特性之外,还包含着一系...

xyxzfj
2011/01/18
14
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部