觸摸屏

出自 Arch Linux 中文维基

若您曾嘗試過在Linux內配置一個觸摸屏設備,你可能會發現這個設備要麼開箱即用(除去一些簡單的配置過程),要麼擁有非常繁瑣的配置,特別是它不被內核支持的情況下。

介紹[編輯 | 編輯原始碼]

本文假定你的觸摸屏設備被內核支持(例如USB觸摸屏模塊),這意味着你的計算機上會有目錄/dev/input/event*/。執行

$ less /proc/bus/input/devices

以查看你的設備是否被列出;或嘗試

# cat /dev/input/event‘’?‘’ # 以您设备的事件编号代替"?"

以查看每一個事件節點。若你找到了設備相應的節點,那麼您的設備可能能正常工作。

驅動程序[編輯 | 編輯原始碼]

有很多適用於觸摸屏的X11驅動程序。最常見的驅動程序包是在extra軟件倉庫中:

也有一些倉庫或AUR中沒有包括的較不常見的驅動程序包,例如:

  • xf86-input-magictouch
  • xf86-input-mutouch
  • xf86-input-plpevtch
  • xf86-input-palmax

某些設備存在專有驅動程序(例如:xf86-input-egalaxAUR),但建議先嘗試開源驅動程序。

請根據您的觸摸屏的品牌、型號等參數選擇適當的驅動程序。同樣地,若您的觸摸屏已經可以正常使用,那麼xf86-input-evdev可能是首選驅動程序。

兩指滾動[編輯 | 編輯原始碼]

必須在應用程式端實現兩指滾動(參見此連結)。

對於 Firefox,見 Firefox/Tweaks#Enable touchscreen gestures

#Touchegg 中,有一個 hack 可以模擬每個應用程式的這種滾動行為,但 X 伺服器仍將其作為文本選擇處理(至少在 Plasma 中)。

evdev 驅動程序[編輯 | 編輯原始碼]

校準[編輯 | 編輯原始碼]

運行xinput_calibratorAUR包內的xinput_calibrator,並遵循說明進行操作。

在多顯示器情景下使用觸摸屏[編輯 | 編輯原始碼]

若要在多顯示器的情況下使用觸摸屏(其中一部分不是觸摸屏),你需要配置Xorg對觸摸位置和屏幕之間的映射。可以通過xinput實現。接下來的例子以具有wacom數位板和外接顯示器的配置為例。

運行xrandr顯示兩個顯示器的參數:

$ xrandr
Screen 0: minimum 320 x 200, current 2944 x 1080, maximum 8192 x 8192
LVDS1 connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x768       60.0*+
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 connected 1920x1080+1024+0 (normal left inverted right x axis y axis) 477mm x 268mm
   1920x1080      60.0*+
   1600x1200      60.0  
   1680x1050      60.0  
   1680x945       60.0  

可見這裏有兩個顯示器:LVDS1VGA1LVDS1是筆記本電腦自帶的顯示器,VGA1是外接顯示器。我們將要將手寫筆輸入映射到LVDS1,所以我們需要知道手寫筆輸入的ID:

$ xinput --list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ QUANTA OpticalTouchScreen               	id=9	[slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                   	id=11	[slave  pointer  (2)]
⎜   ↳ Serial Wacom Tablet WACf004 stylus      	id=13	[slave  pointer  (2)]
⎜   ↳ Serial Wacom Tablet WACf004 eraser      	id=14	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ Power Button                            	id=6	[slave  keyboard (3)]
    ↳ Video Bus                               	id=7	[slave  keyboard (3)]
    ↳ Sleep Button                            	id=8	[slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard            	id=10	[slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                  	id=12	[slave  keyboard (3)]

我們可以看見有兩個手寫筆輸入被識別出來,我們需要分別映射輸入到屏幕輸出,如下:

$ xinput --map-to-output 'Serial Wacom Tablet WACf004 stylus' LVDS1
$ xinput --map-to-output 'Serial Wacom Tablet WACf004 eraser' LVDS1

你可以通過將它們添加到~/xinitrc或類似的文件中以自動執行這些命令。若你斷開了屏幕並重新連接(比如通過KVM切換顯示器時),那麼映射將會失效。你可以使用udev規則來避免這種情況下可能出現的繁瑣的配置過程。(請參見Calibrating Touchscreen#Do it automatically via a udev rule

使用xrandr-watch-git軟件包自動映射[編輯 | 編輯原始碼]

我們可以通過xrandr-watch-gitAUR軟件包配置一些xrandr事件的捕獲並自動執行腳本。安裝xrandr-watch-gitAUR,創建一個具有執行權限的腳本 ~/.xrandr-changed,以執行 map-to-output,例如:

~/.xrandr-changed
#!/bin/sh
xinput --map-to-output "Wacom HID 4861 Finger touch" "eDP1"

並啟動,測試並啟用 systemd/用戶的服務xrandr-watcher.service

Wayland/Weston[編輯 | 編輯原始碼]

Wayland 目前沒有已知的方法來將觸摸鎖定到特定顯示器。有諸如 weston-touch-calibrator 之類的工具,但 Gnome Wayland 使用 XWayland,使校準器無法定位任何觸摸屏。

Wayland/XWayland 也掩蓋了 xinput 列表,並將它們下放到通用的 xwayland 設備,如 "xwayland-pointer"、"xwayland-relative-pointer"、"xwayland-touch-pointer"等等。"Xinput"的Wayland方法是"Libinput",但不具備所有相同的功能。 目前已知的在多頭設置中使用觸摸屏的方法是強制 Gnome 或 KDE 使用 X11。libinput 目前假設觸摸屏覆蓋所有可用的顯示器。

Touchegg[編輯 | 編輯原始碼]

Touchegg 是一個多點觸摸手勢程序,僅與 X 兼容,可在後台以用戶身份運行,識別手勢並響應,例如將雙指滑動映射為鼠標滾輪移動。但它也會使已經擁有自己的手勢識別功能的應用程式或窗口管理器的手勢功能不正常。如果您同時使用觸摸板和觸摸屏,並且已配置觸摸板驅動程序(例如Synaptics或libinput)為不識別手勢本身,而是通過多點觸摸事件觸發,那麼Touchegg將搶先識別這些手勢並讓Synaptics與libinput無法識別。實際上,與Synaptics或libinput觸摸板驅動程序相比,它能更好地識別手勢。但是對於觸摸屏,軟件自己擁有的手勢功能一般會更加好用。一些Qt和GTK應用程式擁有自己獨有的手勢系統,但是如果Touchegg覆蓋了觸摸事件,它們將無法識別。因此,當您主要運行較古老的應用程式時,Touchegg很有用,它們通常沒有自己的手勢功能。

在最近對 touchegg 2.0 的重寫中,雙指滾動已被禁用。

要啟用它,請安裝 xdotool 並查看這個關閉的問題