Arch Linux下的外接显示器

之前的外接显示器配置一直用的static状态,写了一个conf文件,里面简单设置一下基本信息。每次开机前插上显示器,进入系统后,就能自动配置了。但是之前总是觉得显示器上的字很模糊,还以为是因为Linux下的字体没有高分辨率的。直到昨天才发现,原来是因为显示器分辨率不是文件中配好的1920x1080_60.00。然后用xrandr调了一下,
$ xrandr --output DP1 --right-of eDP1 --preferred,显示器分辨率到了1080了,显示的字也很清楚。
但是现在还有个问题是,显示器插拔时,i3开启的workspace不会进行相应的变化。比如插着显示器开机,开机后拔掉显示器,但是显示器上的workspace不会调到笔记本显示器上;而若是先开机,进入系统后再插上显示器,i3也不会自动为显示器分配workspace,显示器就像压根儿接收不到信号,但是此时执行xrandr,可以看到说DP1,也就是外接显示器是connected的。想要解决以上问题,当时只能重启系统。
昨晚查Arch Wiki,暂时找到了还能用的解决方法。
在Wiki中搜索“udev”,进入相关页后,看Execute_on_VGA_cable_plug_in这节,根据叙述,写一个rules文件,可以用来检测外接显示器的插拔事件,然后做出相应动作。
我的/etc/udev/rules.d/95-monitor-hotplug.rules文件内容如下:

KERNEL=="card0", ACTION=="change", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/vanellope/.Xauthority", RUN+="/usr/bin/monitor.sh"

我的/usr/bin/monitor.sh文件内容如下:

#!/bin/bash
intern=eDP1
extern=DP1

if xrandr | grep "$extern disconnected"; then
    xrandr --output "$extern" --off --output "$intern" --auto
else
	xrandr --output "$intern" --primary --auto --output "$extern" --right-of "$intern" --auto
fi

我的/etc/X11/xorg.conf.d/10-monitor.conf文件内容如下:

Section "Monitor"
	Identifier "eDP1"
	Option "Primary" "true"
	Option "DPMS" "true"
	Option "PreferredMode" "1366x768_60.06"
EndSection

Section "Monitor"
	Identifier "DP1"
	Option "DPMS" "true"
	Option "PreferredMode" "1920x1080_60.00"
	Option "RightOf" "eDP1"
EndSection

Section "ServerLayout"
    Identifier "ServerLayout0"
    Option "StandbyTime" "10"
    Option "SuspendTime" "20"
    Option "BlankTime"   "30"
    Option "OffTime"     "30"
EndSection

有了以上文件,外接显示器就可以随时插拔,workspace也能自动收回和分配了。现在还有个问题是:假如先接上显示器,然后再开机,进入系统后要等两三分钟后,/usr/bin/monitor.sh才能被执行,之后如果再进行外显的热插拔就没有这么长时间的延迟了;假如是进入系统后才插外显的话,是基本没有延迟的。(Wiki中对于rules的应用,好像是因为有外部设备变化的,如果是从开机就插上显示器,可能就比较慢?这个问题暂时先放着。)


MarkDown怎么缩进呀!看着好难受。


©Vanellope

你可能感兴趣的:(分享·备忘,Arch,外接显示器,udev,rules)