我在yoga13中使用archlinux系统。yoga13 是一款屏幕可以旋转的触控本,但是archlinux没有对旋转屏幕的原生驱动支持。直接使用系统的旋转屏幕功能,触摸屏坐标不会跟随屏幕旋转。本文介绍编写一段shell程序实现 同步旋转显示器和触控屏 。
屏幕旋转可以使用xrandr命令实现,例如 xrandr -o 1可以将屏幕向左旋转。使用xrandr的问题是触摸屏触摸时会出错,按下的位置和鼠标位置不符。这时需要更改触摸屏相关设置。
首先使用 xinput –list 命令查看所有的设备号,在其中触摸屏的设备号。
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ ELAN Touchscreen id=10 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=17 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
.........
从表中可以看到触屏设备名称为“ELAN Touchscreen ”,设备号为10。然后使用xinput –list-props 10 查看触摸屏相关属性(其中“10”为设备号)。其中如下一行为触摸屏的坐标转换矩阵。
Coordinate Transformation Matrix (145): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
修改坐标转换矩阵可以旋转触摸屏的方向。
正常 1 0 0 0 1 0 0 0 1
向左 0 -1 1 1 0 0 0 0 1
向右 0 1 0 -1 0 1 0 0 1
翻转 -1 0 1 0 -1 1 0 0 1
使用运行命令 xinput set-prop 10 ‘Coordinate Transformation Matrix’ 0 -1 1 1 0 0 0 0 1 可以实现触摸屏的向左旋转。
将以上命令写入一个.sh文件即可实现同步旋转屏幕显示和触摸屏方向。
shell文件源码:rotation.sh