Skip to main content

xrandr调整分辨率、旋转屏幕很好用

freebsd10.0、archlinux 3.17下实验木有问题(系统更新很快,很多老命令在新版本下不一定好用了)
以前只会修改xorg.conf来控制多个显示器的显示,后来发现xrandr可以动态的调整多个显示器,在后来发现xrandr 功能无比强悍。列举些xrandr常用的方法,备忘。
运行xrandr会得到诸如:
Screen 0: XXXX
LVDS1 connected XXX
DP1 XXX
VGA1 XXX
等信息,LVDS1、VGA1等是xrandr识别到的输出设备的名称,这些名称一般跟在--output后面,表示对相应的设备进行设置和操作。
1 xrandr --output VGA1 --auto
打开VGA1输出,并自动设置最佳分辨率
2 xrandr --output VGA1 --off
关闭VGA1输出
3 xrandr --fb 2048x768 --output VGA1 --panning 1024x768+0+0 --output LVDS1 --panning 1024x768+1024+0
fb是framebuffer,指定总的分辨率,这里总分辨率为2048x768,VGA1显示1024x768,LVDS1显示1024x768,LVDS1和VGA1拼接成2048x768。(panning这个单词查了下是平底锅的意思,让我百思不得其解,可能我的stardict字典太差,仔细理解下可能就是调整屏幕框框的意思,和平底锅很类似吧)
4 xrandr --output VGA1 --transform a,b,c,d,e,f,g,h,i
a、b、c、d、e、f、g、h、i是所需的参数,这些参数构成一个变换矩阵,xrandr使用变换矩阵调整屏幕,变换矩阵为adgbehcfi,这个矩阵实质上是一个单应矩阵(Homography),平移、旋转、缩放、仿射等变化都是单应的特例,单应矩阵就不详细介绍了,随便找个计算机视觉的书看了就懂。
例如将屏幕旋转T,则单应矩阵为cosTsinT0−sinTcosT0001,将命令行中的abcdefghi换成对应数值就可以了。
例如旋转T并且水平平移x竖直平移y,则单应矩阵为cosTsinTx−sinTcosTy001,将命令行中的abcdefghi换成对应数值就可以了。
5 xrandr --output VGA1 --mode 1024x768
VGA1设置1024x768分辨率
如果显卡没有对应的mode可以通过
xrandr -newmode "1024x768" 63.5 1024 1072 1176 1328 768 771 775 798 -hsync +vsync
xrandr --addmode VGA1 1024x768
进行添加,mode后面的那一串参数可以通过gtf来获取,如gtf  1024 768 60就是获得1024x768 60Hz刷新率的mode参数