扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
树莓派(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的算法
mv命令是move的缩写,可以用来移动文件或者将文件改名,是Linux系统下常用的命令,经常用来备份文件或者目录。
命令格式
mv [选项] 源文件或目录 目标文件或目录
选项:
-f 强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
-i 交互移动,如果目标文件已经存在,则询问用户是否覆盖;
-n 如果目标文件已经存在,则不会覆盖,而且不询问用户;
-v 显示文件或目录的移动过程;
-u 若目标文件已经存在,但两者相比,源文件更新,则会对目标文件进行升级。
ls会列举出当前工作目录的内容(文件或文件夹)。
mkdir 用于新建一个新目录
显示当前工作目录
切换文件路径,cd 将给定的文件夹(或目录)设置成当前工作目录。
删除给定的目录。
rm 会删除给定的文件
cp 命令对文件进行复制
mv 命令对文件或文件夹进行移动,如果文件或文件夹存在于当前工作目录,还可以对文件或文件夹进行重命名。
cat 用于在标准输出(监控器或屏幕)上查看文件内容
ail 默认在标准输出上显示给定文件的最后10行内容,可以使用tail -n N 指定在标准输出上显示文件的最后N行内容。
less 按页或按窗口打印文件内容。在查看包含大量文本数据的大文件时是非常有用和高效的。你可以使用Ctrl+F向前翻页,Ctrl+B向后翻页。
grep 在给定的文件中搜寻指定的字符串。grep -i “” 在搜寻时会忽略字符串的大小写,而grep -r “” 则会在当前工作目录的文件中递归搜寻指定的字符串。
这个命令会在给定位置搜寻与条件匹配的文件。你可以使用find -name 的-name选项来进行区分大小写的搜寻,find -iname 来进行不区分大小写的搜寻。
tar命令能创建、查看和提取tar压缩文件。tar -cvf 是创建对应压缩文件,tar -tvf 来查看对应压缩文件,tar -xvf 来提取对应压缩文件。
gzip 命令创建和提取gzip压缩文件,还可以用gzip -d 来提取压缩文件。
unzip 对gzip文档进行解压。在解压之前,可以使用unzip -l 命令查看文件内容。
help会在终端列出所有可用的命令,可以使用任何命令的-h或-help选项来查看该命令的具体用法。图就省略啦,会有详细列表显示出来的。
whatis 会用单行来描述给定的命令,就是解释当前命令。
exit用于结束当前的终端会话。
ping 通过发送数据包ping远程主机(服务器),常用与检测网络连接和服务器状态。
who能列出当前登录的用户名。
su 用于切换不同的用户。即使没有使用密码,超级用户也能切换到其它用户。
uname会显示出关于系统的重要信息,如内核名称、主机名、内核版本、处理机类型等等,使用uname -a可以查看所有信息。
df查看文件系统中磁盘的使用情况–硬盘已用和可用的存储空间以及其它存储设备。你可以使用df -h将结果以人类可读的方式显示。
ps显示系统的运行进程。
top命令会默认按照CPU的占用情况,显示占用量较大的进程,可以使用top -u 查看某个用户的CPU使用排名情况。
shutdown用于关闭计算机,而shutdown -r用于重启计算机。这个我就不试了......
不带参数的xrandr 命令会列出系统支持的视频接口名称和设备连接情况,还可以从输出信息里看到 当前分辨率current ,以及支持的 最大分辨率 。
带*的表示当前分辨率。
如果xrandr查询结果中没有合适的分辨率,则可以通过newmode来
添加,下面将给出eDP1添加1280x1024x60的分辨率方法。
3.1 使用cvt生成一个modeline,命令如下:
3.2 使用newmode创建一个mode,参数就是上面的modeline后的内容:
3.3 新建模式,将新模式添加至当前输出设备,如果出错,则说明不支持此模式
3.4 设置newmode为当前分辨率
(1)打开外接显示器,双屏幕显示相同的内容--克隆,(auto为最高分辨率)
(2)若要指定外接显示器的分辨率可以使用下面的命令(1280*1024):
(3)打开外接显示器,设置为右侧扩展
(4)关闭显示器
(5)打开VGA-0接口显示器,关闭DVI-D-0接口显示器
(6设置HDMI2为主屏幕
(7) 设置eDp1在HDMI2的右面
以红旗6为例
1.从开始菜单打开3D开关,打开
2.同时按住Ctrl、Alt键,拖动鼠标
3.看到没有?
Linux下的视频转换:mencoder 制作适合在智能手机和PDA上观看的mpeg4视频。 Linux上有一个很强大的视频音频转换软件,就是Mplayer自带的mencoder (MPlayer's Movie Encoder)。mencoder就象是一台全手动的照相机,可调整的选项非常多,不过这儿只是把最常见的情况说一下。 转换avi文件,并把字幕内嵌到视频中。首先假设一下下列的条件: 文件名:video.avi 字幕文件名:video.srt 目标文件:new.avi 目标文件格式:mpeg4 目标文件视频码率:200 目标文件音频码率:64 目标文件分辨率: 320:240 制作内嵌字幕所需的字体:simsun.ttf (上面各项都可以根据实际情况进行调整) 转换命令如下: mencoder-oac mp3lame -lameopts vbr=3:br=64 -ovc lavc -lavcoptsvcodec=mpeg4:mbd=1:vbitrate=200 -sub video.srt -o new.avi -fontsimsun.ttf video.avi -subcp cp936 -subfont-text-scale 4 -vfscale=320:240 各选项的含义: -oac 编码文件的音频部分。这儿是用lame将音频encode成mp3,即mp3lame。其他可用的选项可以调用mencoder的man page查看。 -lameopts 顾名思义,即lame选项,这儿只需定义一下码率就可以了。 vbr 设定音频码率的方法,格式为vbr=0-4 0 cbr average bitrate 1 mt 2 rh constant bitrate Also forces CBR mode encoding on subsequent ABR presets modes. 3 abr 4 mtrh 在这儿用的是3,abr。 br 就是设定我们所需要的码率值,格式为br=0-1024,只能在vbr为0和3的情况下才能使用该选项。 -ovc 编码文件的视频部分。主要有以下几个选项 -ovc copy 不进行编码,只是复制视频流 -ovc divx4 编码成DivX4/DivX5 -ovc raw 编码成任意不压缩的格式(用‘-vf format’设定具体的格式) -ovc lavc 使用libavcodec进行编码 -lavcopts 就是libavcodec的选项。 vcodec=使用指定的视频编码,下面列一下几个主要的值 h264 H.264 h263 H.263 h263p H.263+ mpeg4 MPEG-4 (DivX 4/5) msmpeg4 DivX 3 msmpeg4v2 MS MPEG4v2 wmv1 Windows Media Video, version 1 (又称 WMV7) wmv2 Windows Media Video, version 2 (又称 WMV8) rv10 旧的RealVideo格式 mpeg1video MPEG-1 video mpeg2video MPEG-2 video mbd 决定视频宏块的算法,这儿只需要mbd=1即可。其余的可以查看man page。 vbitrate 设定视频的码率(默认为800)。 -sub 设定字幕文件 -o 目标视频文件 -font 制作内嵌字幕所需字体的路径 -subcp 字幕的编码,简体中文就是cp936 -subfont-text-scale 字幕字体的大小 -vf scale 视频的分辨率 如果不需要将字幕内嵌入视频文件,只需要去掉-sub、-font、-subcp、-subfont-text-scale这几个选项。将rmvb转换成mpeg4也是如此。 ◆Linux下的视频转换:ffmpeg 格式:ffmpeg [[输入文件选项]- i 输入文件名] {[输入文件选项] 输出文件名} 主要选项: -L 显示ffmpeg的版权说明 -h 显示帮助 -version 显示版本 -formats 显示支持的文件格式,编码和协议 -f 格式名 强制使用格式 -img 文件格式名 强制使用片格式 -i 文件名 待转换文件名字 -y 覆盖同名输出文件 -t 时间 设置影片时间长度 -fs 最大尺寸 设置文件的最大尺寸 -ss 时间点 设置开始转换的时间点 -title 文字 设置标题 -author 文字 设置作者 -copyright 文字 设置版权声明 -comment 文字 设置备注 视频选项: -b 比特率 设置文件比特率 (单位是kbit/s) -r 速度 桢速度 (Hz value) -s 大小 设置大小,宽乘高 -newvideo 在现在的视频流后面加入信的视频流 Audio options: -aframes 数字 设置转换多少桢(frame)的音频 -ab bitrate 设置音乐的比特率(单位:kbit/s) -aq 质量 这只音频质量 (指定编码) -ar 采样率 设置音频采样率 (单位:Hz) -ac 声道数字 设置声道数 -an 取消音频 -acodec 编码 强制音频 编码 ('copy' to copy stream) -vol volume 改变音量 (256为普通) -newaudio 追加音乐
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流