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   ‘ (所有單引號之間的資料,包含空格)。

新增一個指令檔

輸入下列指令,在根目錄下新增一個文件。

sudo nano ~/.config/touchscreen.sh

在文件內輸入下列內容,儲存並離開。
#! /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

重新開機

重新開機後,測試外接觸控螢幕,即能在正常位置顯示觸控反應。