触摸屏 linux,linux嵌入式软件开发
树莓派(Linux 系统)触摸屏翻转显示以及触摸翻转
树莓派(Linux系统)触摸屏翻转显示以及触摸翻转
问题:未使用的Pi官方屏幕,所以使用HDMI屏幕显示的时候,显示旋转的同时,触摸没有旋转
目的:旋转屏幕显示的同时,使得触摸也跟随旋转
操作总流程:
旋转90度操作
翻转显示:
1.sudo nano/boot/config.txt
2.在文件末尾加入
display_rotate=0
display_rotate=1 //90°
display_rotate=2 //180°
display_rotate=3 //270°
ctrl+ o保存文档重启即可。
注:以下操作皆为SSH操作,所以每条指令前都加了DISPLAY=:0,如果本机操作删掉即可。
1.安装xinput
sudo apt-get install xinput
2.列出所有输入设备信息远程操作时,使用xinput指令需要加入DISPLAY=:0
DISPLAY=:0 xinput--list
3.列出目标设备属性
DISPLAY=:0 xinput--list-props 7
4.旋转触摸的坐标轴
1)所以先交换x、y轴
DISPLAY=:0 xinput--set-prop'7''Evdev Axes Swap' 1
2)然后反转y轴
DISPLAY=:0 xinput--set-prop'7''Evdev Axis Inversion' 0 1
显示旋转修改之后需要重启。而触摸旋转不需要重启。
详细操作方法:
1.安装xinput
sudo apt-get install xinput
描述:
xinput- utility to configure and test X input devices
xinput-用于配置和测试X输入设备的实用程序
xinput is a utility to list available input devices,
xinput是一个实用程序,可以列出可用的输入设备、
query information about a device and change input device settings.
关于设备的查询信息和更改输入设备设置
2.列出所有输入设备信息
xinput--list
如果远程操作记得在命令前加DISPLAY=:0
得到以下信息:
pi@NTGAGE:~$ DISPLAY=:0 xinput--list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Optical Mouse id=6 [slave pointer (2)]
⎜ ↳ WaveShare WaveShare Touchscreen id=7 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard(2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard(3)]
↳ Logitech USB Keyboard id=8 [slave keyboard(3)]
↳ Logitech USB Keyboard id=9 [slave keyboard(3)]
3.列出目标设备属性
由于所使用的触摸屏幕是微雪7寸屏幕,由以上信息可以得到微雪的触摸屏对应的ID为7
所以,接下来看这款输入设备的属性,
pi@NTGAGE:~$ DISPLAY=:0 xinput--list-props 7
Device'WaveShare WaveShare Touchscreen':
Device Enabled(115): 1
Coordinate Transformation Matrix(116): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile(240): 0
Device Accel Constant Deceleration(241): 1.000000
Device Accel Adaptive Deceleration(242): 1.000000
Device Accel Velocity Scaling(243): 10.000000
Device Product ID(244): 3823, 5
Device Node(245): "/dev/input/event3"
Evdev Axis Inversion(246): 0, 0
Evdev Axis Calibration(247): <no items>
Evdev Axes Swap(248): 0
Axis Labels(249): "Abs MT Position X"(267),"Abs MT Position Y"(268),"Abs MT Pressure"(269),"None"(0),"None"(0),"None"(0)
Button Labels(250): "Button Unknown"(233),"Button Unknown"(233),"Button Unknown"(233),"Button Wheel Up"(121),"Button Wheel Down"(122)
Evdev Scrolling Distance(251): 0, 0, 0
Evdev Middle Button Emulation(252): 0
Evdev Middle Button Timeout(253): 50
Evdev Third Button Emulation(254): 0
Evdev Third Button Emulation Timeout(255): 1000
Evdev Third Button Emulation Button(256): 3
Evdev Third Button Emulation Threshold(257): 20
Evdev Wheel Emulation(258): 0
Evdev Wheel Emulation Axes(259): 0, 0, 4, 5
Evdev Wheel Emulation Inertia(260): 10
Evdev Wheel Emulation Timeout(261): 200
Evdev Wheel Emulation Button(262): 4
Evdev Drag Lock Buttons(263): 0
这块屏幕正常显示和触摸的信息如上。
如果执行到这一步,发现并没有以上的Evdev等属性项,请跳转第2种方法。
现在需要达到的目的是在屏幕显示反转的同时,使得触摸也随显示翻转。
屏幕显示为翻转90度。/boot/config.txt设置为display_rotate=1
上述信息中Evdev Axis Inversion项是每条轴的旋转设置项,后面第一个参数是x,第二个参数是y.
Evdev Axes Swap项对应的是两条轴的交换。
0为不翻转,1为翻转
例如。x轴原本是朝向右的,当把Evdev Axis Inversion的第一个参数
设置为1,即x轴朝向左。
4.旋转触摸的坐标轴
现在目的是要触摸旋转90度,从坐标轴理解:
即目的x轴正向为初始y轴的反向。目的y轴的正方向为初始x轴的正向。
1)所以先交换x、y轴
DISPLAY=:0 xinput--set-prop'7''Evdev Axes Swap' 1
2)然后反转y轴
DISPLAY=:0 xinput--set-prop'7''Evdev Axis Inversion' 0 1
这样即可完成触摸旋转90度。若要旋转其他角度,推理一下即可。
显示旋转修改之后需要重启。而触摸旋转不需要重启。
第二种方法
如果查询到的信息如下
DISPLAY=:0 xinput--list-props 6
Device'WaveShare WaveShare Touchscreen':
Device Enabled(114): 1
Coordinate Transformation Matrix(115): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Calibration Matrix(246): 0.000000, 1.000000, 0.000000,-1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000
libinput Calibration Matrix Default(247): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Send Events Modes Available(248): 1, 0
libinput Send Events Mode Enabled(249): 0, 0
libinput Send Events Mode Enabled Default(250): 0, 0
Device Node(251): "/dev/input/event0"
Device Product ID(252): 3823, 5
可以看到该驱动方式采用的是libinput,
查看/usr/share/X11/xorg.conf.d/目录下是否有40-libinput.conf这个文件。
无则需要安装
sudo apt-get install xserver-xorg-input-libinput
下一步安装完成后ls一下,就可以看到在/usr/share/X11/xorg.conf.d/目录下存在该文件,
下一步复制该文件到/etc/X11/xorg.conf.d/目录下。
一开始xorg.conf.d这个目录在/etc/X11可能没有,需要自己创建。
sudo mkdir xorg.conf.d
下一步复制到xorg.conf.d目录下即可。
sudo cp/usr/share/X11/xorg.conf.d/40-libinput.conf/etc/X11/xorg.conf.d/
下一步进入/etc/X11/xorg.conf.d/目录下修改40-libinput.conf文件
cd/etc/X11/xorg.conf.d/
sudo nano 40-libinput.conf
找到touchscreen section
Section"InputClass"
Identifier"libinput touchscreen catchall"
MatchIsTouchscreen"on"
MatchDevicePath"/dev/input/event*"
Driver"libinput"
EndSection
添加一行 Option"CalibrationMatrix""0 1 0-1 0 1 0 0 1
结果为
Section"InputClass"
Identifier"libinput touchscreen catchall"
Option"CalibrationMatrix""0 1 0-1 0 1 0 0 1
MatchIsTouchscreen"on"
MatchDevicePath"/dev/input/event*"
Driver"libinput"
EndSection
然后重启生效
这样的修改也是同样修改为翻转90度,如果需要修改为其他角度,请参考libinput的算法
触摸屏设备是什么操作系统
所谓触摸屏设备就是计算机输入设备,触摸屏设备的操作系统很多,目前主流的有windows10,windows8,ios,linux,android等等。
所谓触摸屏设备,从市场概念来讲,就是一种人人都会使用的计算机输入设备,或者说是人人都会使用的与计算机沟通的设备。不用学习,人人都会使用,是触摸屏电脑最大的魔力,这一点无论是键盘还是鼠标,都无法与其相比。从技术原理角度讲,触摸屏电脑是一套透明的绝对寻址系统,首先它必须保证是透明的,因此它必须通过材料科技来解决透明问题,像数字化仪、写字板、电梯开关,它们都不是触摸屏;其次它是绝对坐标,手指摸哪就是哪,不需要第二个动作,不像鼠标,是相对定位的一套系统,可以注意到,触摸屏电脑软件都不需要游标,有游标反倒影响使用者的注意力,因为游标是给相对定位的设备用的,相对定位的设备要移动到一个地方首先要知道现在在何处,往哪个方向去,每时每刻还需要不停的给使用者反馈当前的位置才不致于出现偏差。这些对采取绝对坐标定位的触摸屏电脑来说都不需要;再其次就是能检测手指的触摸动作并且判断手指位置,各类触摸屏电脑技术就是围绕“检测手指触摸”而八仙过海各显神通的。
Linux操作系统如何支持触摸屏linux触摸屏
Linux操作系统是一种开源操作系统,拥有丰富的功能。然而,许多用户认为Linux不支持触摸屏,这是一个错误的观点。实际上,Linux操作系统可以支持触摸屏,但是需要用户花费一定的时间和精力来配置。
首先,为了支持Linux系统的触摸屏功能,必须有一个适用于Linux的触摸屏驱动程序。这些驱动程序的安装和设置都是比较复杂的,并且取决于触摸屏的型号和制造商。一般来说,Linux系统中的触摸屏驱动程序可以从触摸屏制造商的官方网站上找到。
其次,Linux操作系统中还需要安装一个相应的触摸屏配置工具。这些工具会根据触摸屏的型号和配置进行自动调整,可以很容易地满足使用者的不同需求。此外,使用这些工具可以调整触摸屏的响应时间和灵敏度,以提高使用体验。
最后,还需要对Linux操作系统的触摸控件进行配置。Linux操作系统有一个叫做Xinput的应用程序,它可以生成一个虚拟触摸屏设备,作为系统中触摸屏的控制接口,可以实现触摸屏的配置。
下面是关于支持Linux操作系统的触摸屏功能的一些代码:
//安装触摸屏驱动程序
sudo apt-get install xserver-xorg-input-evdev
//安装触摸屏配置工具
sudo apt-get install xinput-calibrator
//启动触摸屏
sudo xinput enable
//禁用触摸屏
sudo xinput disable
//重新配置触摸屏的响应时间和灵敏度
sudo xinput set-prop“Device Accel Constant Deceleration”
通过以上几步,可以完成Linux操作系统的触摸屏功能的支持。从而实现对触摸屏的控制,让用户可以以更直观的方式操作Linux操作系统。