樹莓派(Linux 系統(tǒng))觸摸屏翻轉(zhuǎn)顯示以及觸摸翻轉(zhuǎn)
創(chuàng)新互聯(lián)公司-云計算及IDC服務(wù)提供商,涵蓋公有云、IDC機(jī)房租用、西信服務(wù)器托管、等保安全、私有云建設(shè)等企業(yè)級互聯(lián)網(wǎng)基礎(chǔ)服務(wù),歡迎聯(lián)系:18980820575
問題:未使用的Pi官方屏幕,所以使用HDMI屏幕顯示的時候,顯示旋轉(zhuǎn)的同時,觸摸沒有旋轉(zhuǎn)
目的:旋轉(zhuǎn)屏幕顯示的同時,使得觸摸也跟隨旋轉(zhuǎn)
操作總流程:
旋轉(zhuǎn)90度操作
翻轉(zhuǎn)顯示:
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,如果本機(jī)操作刪掉即可。
1.安裝xinput
sudo apt-get install xinput
2.列出所有輸入設(shè)備信息 遠(yuǎn)程操作時,使用xinput指令需要加入DISPLAY=:0
DISPLAY=:0 xinput --list
3.列出目標(biāo)設(shè)備屬性
DISPLAY=:0 xinput --list-props 7
4.旋轉(zhuǎn)觸摸的坐標(biāo)軸
1)所以先交換x、y軸
DISPLAY=:0 xinput --set-prop '7' 'Evdev Axes Swap' 1
2)然后反轉(zhuǎn)y軸
DISPLAY=:0 xinput --set-prop '7' 'Evdev Axis Inversion' 0 1
顯示旋轉(zhuǎn)修改之后需要重啟。而觸摸旋轉(zhuǎn)不需要重啟。
詳細(xì)操作方法:?
1.安裝xinput
sudo apt-get install xinput
描述:
xinput - utility to configure and test X input devices ?
xinput-用于配置和測試X輸入設(shè)備的實用程序
xinput is a utility to list available input devices,
xinput是一個實用程序,可以列出可用的輸入設(shè)備、
query information about a device and change input device settings.
關(guān)于設(shè)備的查詢信息和更改輸入設(shè)備設(shè)置
2.列出所有輸入設(shè)備信息
xinput --list
如果遠(yuǎn)程操作記得在命令前加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.列出目標(biāo)設(shè)備屬性
由于所使用的觸摸屏幕是微雪7寸屏幕,由以上信息可以得到微雪的觸摸屏對應(yīng)的ID為7
所以,接下來看這款輸入設(shè)備的屬性,
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
這塊屏幕正常顯示和觸摸的信息如上。
如果執(zhí)行到這一步,發(fā)現(xiàn)并沒有以上的Evdev等屬性項,請?zhí)D(zhuǎn)第2種方法。
現(xiàn)在需要達(dá)到的目的是在屏幕顯示反轉(zhuǎn)的同時,使得觸摸也隨顯示翻轉(zhuǎn)。
屏幕顯示為翻轉(zhuǎn)90度。/boot/config.txt設(shè)置為display_rotate=1
上述信息中Evdev Axis Inversion 項是每條軸的旋轉(zhuǎn)設(shè)置項,后面第一個參數(shù)是x,第二個參數(shù)是y.
Evdev Axes Swap項對應(yīng)的是兩條軸的交換。
0為不翻轉(zhuǎn),1為翻轉(zhuǎn)?
例如。x軸原本是朝向右的,當(dāng)把Evdev Axis Inversion的第一個參數(shù)
設(shè)置為1,即x軸朝向左。
4.旋轉(zhuǎn)觸摸的坐標(biāo)軸
現(xiàn)在目的是要觸摸旋轉(zhuǎn)90度,從坐標(biāo)軸理解:
即目的x軸正向為初始y軸的反向。目的y軸的正方向為初始x軸的正向。
1)所以先交換x、y軸
DISPLAY=:0 xinput --set-prop '7' 'Evdev Axes Swap' 1
2)然后反轉(zhuǎn)y軸
DISPLAY=:0 xinput --set-prop '7' 'Evdev Axis Inversion' 0 1
這樣即可完成觸摸旋轉(zhuǎn)90度。若要旋轉(zhuǎn)其他角度,推理一下即可。
顯示旋轉(zhuǎn)修改之后需要重啟。而觸摸旋轉(zhuǎn)不需要重啟。
第二種方法
如果查詢到的信息如下
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
可以看到該驅(qū)動方式采用的是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/目錄下存在該文件,
下一步復(fù)制該文件到/etc/X11/xorg.conf.d/目錄下。
一開始xorg.conf.d這個目錄在/etc/X11可能沒有,需要自己創(chuàng)建。
sudo mkdir xorg.conf.d
下一步復(fù)制到xorg.conf.d 目錄下即可。
sudo cp /usr/share/X11/xorg.conf.d/40-libinput.conf /etc/X11/xorg.conf.d/
下一步進(jìn)入/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?
結(jié)果為
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
然后重啟生效
這樣的修改也是同樣修改為翻轉(zhuǎn)90度,如果需要修改為其他角度,請參考libinput的算法
第一進(jìn)入LINUX系統(tǒng)時,會出現(xiàn)觸摸屏校驗提示,按提示校準(zhǔn)5個點就可以了.
如果想重新校驗,可以如下操作
#rm /etc/pointercal (刪除校準(zhǔn)文件)
#reboot (重新啟動開發(fā)板)
此時可以重新校驗
很多方法吧。。首先你要明白校準(zhǔn)的原理,你的觸摸屏和你的顯示屏實質(zhì)上是沒有關(guān)系,所謂校準(zhǔn)就是讓屏幕上的某點和觸摸屏的某點形成關(guān)系,這個關(guān)系所需要的就是幾個關(guān)系系數(shù),其實就是一個多元一次方程組,通過采集多點來求解這個方程組就求出了關(guān)系系數(shù)。這樣底層驅(qū)動傳上來觸摸屏坐標(biāo)后,系統(tǒng)就會自動轉(zhuǎn)換成屏幕的坐標(biāo)。