Linux之触控屏幕设定 | Gechic
搜寻问题与解决方案
< All Topics

Linux之触控屏幕设定

Linux自Kernal 3.8版起便支持触控屏幕输入,目前通行的Linux发行版,如Debian、Ubuntu、Manjaro均支持USB触控屏幕即插即用。然而这些Linux发行版虽然附带分辨率与显示方向的显示设置接口,却不具备设定触控输入与校定的图形接口。因此,在双屏幕延伸显示、以及触控屏幕直向显示时,用户会发现触控的反应位置并不准确;此时,请参考下列说明,手动进行触控输入设定。

Linux直向触控屏幕之触控设定

若在Linux系统,使用单一触控屏幕做为直向显示应用时,请至40-libinput配置文件中,设定触控的旋转矩阵。

开启40-libinput配置文件

在Terminal中输入指令 cd /usr/share/X11/xorg.conf.d,进入xorg.conf.d文件夹。
输入指令 ls 列出所有档案,确认其下包含有40-libinput.conf

加入触控输入的旋转矩阵

输入下列指令,打开并编辑 40-libinput.conf 档案。

sudo nano 40-libinput.conf

找到touchscreen 段落,加入新的一列 Option “TransformationMatrix” “0 -1 1 1 0 0 0 0 1”
按Ctl+X➜按y储存档案。

③ 重新启动,完成!以手指在触控屏幕上测试,反应位置正确

输入 sudo reboot,重新启动,开机后即完成设定。

旋转矩阵 ”TransformationMatrix” 的值依各触控屏幕而异,以Gechic 触控屏幕为例:
旋转90° = Option “TransformationMatrix” “0 1 0 -1 0 1 0 0 1”
旋转270° = Option “TransformationMatrix” “0 -1 1 1 0 0 0 0 1”

以Ubuntu desktop的显示设置为例,旋转270° 适用于显示方向设定为【Portrait Right】。

Linux延伸触控屏幕之触控设定

若连接的触控屏幕是采用延伸双屏幕的显示设置,不论触控屏幕为水平显示或垂直显示,都可以使用xinput 的map-to-output指令来指定触控位置映像至外接触控屏幕。由于Debian 与Ubuntu发行版都已预设执行wayland,在使用xinput之前,必须先关闭桌面环境的wayland功能。请参考下列范例进行设定:

Debian-Gnome桌面

关闭wayland

在Terminal输入下列指令,开启daemon.conf档 【此为Debian12的配置文件, Debian11的配置文件名为custom.conf】

sudo nano /etc/gdm3/daemon.conf

找到 #waylandenable=false,删除#後,储存档案并重新启动

执行xinput list

输入指令 xinput list 列出所有联机装置,并找出触控屏幕的联机ID (给奇触控屏幕的名称一律显示为ILITEK-TP ),在此范例中,外接的触控屏幕联机ID为22。

执行xrandr

输入指令 xrandr 列出所有列出所有显示器,并找出触控屏幕的联机名称(在此范例中,以HDMI联机的外接触控屏幕名称”HDMI-1”;其延伸显示设置的分辨率为1920*1080+1366*0 )

执行 xinput map-to-output

输入下列指令列,指定xinput装置 ID 22 映像至显示器HDMI-1

xinput map-to-output 22 “HDMI-1”

以手指在触控屏幕上测试,反应位置正确!

Debian-Plasma桌面

关闭wayland

🔵 点选左下角【System settings】 图标➜开启【Startup and Shutdown】➜点选【Behavior】➜在log in session中选择【Plasma (X11)】
🔵点选左栏内的【Background Services】➜在右栏内向下滑,找到并取消【KScreen 2】的勾选➜点选【Apply】后离开   ( Plasma有独立的窗口管理器KScreen,请一并关闭)
🔵重新启动,再登入时于右下角选择【Plasma(X11)】后登入

执行xinput list

在Konsole中输入指令 xinput list 列出所有联机装置,并找出触控屏幕的联机ID (给奇触控屏幕的名称一律显示为ILITEK-TP ),在此范例中,外接的触控屏幕联机ID为11

执行xrandr

输入指令 xrandr 列出所有列出所有显示器,并找出触控屏幕的联机名称(在此范例中,以HDMI联机的外接触控屏幕名称”HDMI-1”;其延伸显示设置的分辨率为1920*1080+1366*0 )

执行 xinput map-to-output

输入下列指令列,指定xinput装置 ID 11 映像至显示器HDMI-1

xinput map-to-output 11 “HDMI-1”

以手指在触控屏幕上测试,反应位置正确!

Ubuntu桌面

关闭wayland

在Terminal中输入下列指令,开启custom.conf檔,找到 waylandenable=enable,在前方加上#后,储存档案并重新启动

sudo nano /etc/gdm3/custom.conf

执行xinput list

在Terminal中输入指令 xinput list 列出所有联机装置,并找出触控屏幕的联机ID (给奇触控屏幕的名称一律显示为ILITEK-TP ),在此范例中,外接的触控屏幕联机ID为11

执行xrandr

输入指令 xrandr 列出所有列出所有显示器,并找出触控屏幕的联机名称(在此范例中,以HDMI联机的外接触控屏幕名称”HDMI-1”;其延伸显示设置的分辨率为1920*1080+0*0 )

执行 xinput map-to-output

输入下列指令列,指定xinput装置 ID 11 映像至显示器HDMI-1

xinput map-to-output 11 “HDMI-1”

⑤ 完成! 以手指在触控屏幕上测试,反应位置正确!

设定map-to-output自动执行档

上述触控映射在重开机或外接屏幕的USB线重新插拔后便会失效,必须再一次输入map-to-output指令设定USB装置的映像位置。为了使用的便利性,建议将map-to-output指令设定为桌面开机后的自动执行程序。

① 确认触控屏幕之属性名称

先前查到触控屏幕的系统办识的id为11,然而此id可能因为重开机或更换USB埠而异动,因此在设定自动执行档时,我们建议使用装置名称来取代装置id。在Terminal输入指令 xinput list-props 11,显示外接触控屏幕的所有属性数据,即可查到装置的名称为 ‘ILITEK       ILITEK-TP   ‘ (所有单引号之间的数据,包含空格)。

新增一个脚本文件

输入下列指令,在根目录下新增一个文件。

在文件内输入下列内容,储存并离开。
#! /bin/bash
xinput map-to-output “ILITEK ILITEK-TP “ HDMI-1

输入下列指令,开放touchscreen.sh的执行权限。
sudo chmod+x ~/.config/touchscreen.sh

新增一个桌面的自动执行档

在Terminal输入下列指令, 在根目录的.config/autostart下新增一个档名为touch.desktop 的档案(若不存在autostart文件夹,请自行新增)。
sudo nano ~/.config/autostart/touch.desktop
在档案内输入下列内容,储存后离开。[注意: 执行文件的地址应为你的实际执行档案位置]
[Desktop Entry]
Type=Application
Name=touch
Exec=/home/gechic/.config/touchscreen.sh

重新启动

重新启动后,测试外接触控屏幕,即能在正常位置显示触控反应。