ARM Linux下屏幕的显示旋转及触摸旋转_xrandr 旋转屏幕
ARM Linux下屏幕的显示旋转及触摸旋转
目录
ARM Linux下屏幕的显示旋转及触摸旋转
开发环境
一、显示旋转
二、开机自动旋转功能
三、触摸旋转
开发环境
ubuntu22.04、RK3568开发板、eDP_1920X1080的电容触摸屏
一、显示旋转
ARM Linux下的屏显示旋转一般可以通过命令xrandr实现,具体操作如下:
左转90°
xrandr -o left
右转90°
xrandr -o right
镜像180°
xrandr -o inverted
正常显示
xrandr -o normal
以上是在只有单个屏显示时的情况,当有多个屏同时显示时需要进一步指定需要镜像的屏。具体操作如下:
首先使用xrandr命令查看所有的显示屏信息:
Screen 0:minimum 320 x 200,current 2720 x 1080,maximum 8192 x 8192LVDS-1 connected primary 800x600+0+0 (normal left inverted right x axis y axis) 0mm x 0mm800x60060.32*+eDP-1 connected 1920x1080+800+0 (normal left inverted right x axis y axis) 0mm x 0mm1920x108059.98*+
从上述信息可以看到,目前显示的屏有LVDS屏和eDP屏。假设当需要指定eDP屏进行旋转操作时,命令如下:
左转90°
xrandr --output eDP-1 --rotate left
右转90°
xrandr --output eDP-1 --rotate right
镜像180°
xrandr --output eDP-1 --rotate inverted
正常显示
xrandr --output eDP-1 --rotate normal
其他类型的屏幕显示旋转也是一样,只需要把output后指定的对应屏幕名字修改一下即可。
二、开机自动旋转功能
实现显示屏的开机自动旋转功能一般可以使用以下两种方式:
1、可以在开发板的/etc/profile文件下进行修改,具体操作如下:
sudo vim /etc/profile
在文件最后添加对应的旋转指令即可,例如如果想要屏幕开机自动镜像180度,则在文件最后添加一行:
sudo xrandr -o inverted(多个屏幕就需要使用带屏幕信息的xrandr指令进行指定)
最后wq保存退出,重启开发板即可。
2、可以修改开发板的/etc/X11/Xsession.d/55gnome-session_gnomerc文件。
sudo vim /etc/X11/Xsession.d/55gnome-session_gnomerc
在文件最后添加对应的旋转指令即可,例如如果想要屏幕开机自动镜像180度,则在文件最后添加一行:
sudo xrandr -o inverted(多个屏幕就需要使用带屏幕信息的xrandr指令进行指定)
最后wq保存退出,重启开发板即可。通过以上配置就可以达到开机后屏幕自动旋转的功能。
注意: 我的开发板使用的MPU芯片是RK3568,开发板上烧录的根文件系统是ubuntu22.04。不同的根文件系统可能不太一样,建议直接使用第一种方式进行配置即可。
三、触摸旋转
触摸是通过libinput管理的,配置文件的路径在/usr/share/X11/xorg.conf.d/40-libinput.conf。用libinput做触摸旋转需要将/etc/X11/xorg.conf.d/目录下的40-libinput.conf文件复制过去。
cd /usr/share/X11/xorg.conf.d
sudo cp /etc/X11/xorg.conf.d/40-libinput.conf . //40-libinput.conf拷贝到当前文件夹
sudo vim 40-libinput.conf
打开该文件后,找到“libinput touchscreen catchall”这一个字段,在Identifier字段下面添加如下内容:
(以下四种配置按照实际屏幕需要的触摸旋转方式选择其中一个配置即可)Option \"CalibrationMatrix\" \" 0 -1 1 1 0 0 0 0 1\" //顺时针旋转90度Option \"CalibrationMatrix\" \"-1 0 1 0 -1 1 0 0 1\" //顺时针旋转180度Option \"CalibrationMatrix\" \"0 1 0 -1 0 1 0 0 1\" //顺时针旋转270度Option \"CalibrationMatrix\" \"-1 0 1 1 0 0 0 0 1\" //沿y轴的反射
然后使用sudo evtest命令查看对应触摸的event编号,例如执行sudo evtest后显示信息如下:
No device specified, trying to scan all of /dev/input/event*Available devices:/dev/input/event0: rk805 pwrkey/dev/input/event1: Logitech USB Receiver/dev/input/event2: Logitech USB Receiver Consumer Control/dev/input/event3: rockchip-rk809 Headset/dev/input/event4: adc-keys/dev/input/event5: ILITEK ILITEK-TP/dev/input/event6: ILITEK ILITEK-TP Mouse
我使用的eDP屏幕的对应触摸event编号为event5。最后修改MatchDevicePath一行中后面的event编号为上面对应的event编号即可。修改完毕后wq保存退出,重启开发板即可。正常配置下,触摸就可以得到正确旋转达到校准触摸的功能。