触摸屏 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操作系统。

阅读剩余
THE END