觸控螢幕 - Arch Linux 中文维基

跳至內容

# 觸控螢幕

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Touchscreen，最近一次同步於 2022-09-04，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

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

## 介紹

本文假定你的觸控螢幕設備被內核支持（例如USB觸控螢幕模塊），這意味著你的計算機上會有目錄`/dev/input/event*/`。執行

    $ less /proc/bus/input/devices

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

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

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

## 驅動程序

有很多適用於觸控螢幕的X11驅動程序。最常見的驅動程序包是在extra軟體倉庫中：

- xf86-input-evdev包 (在您的設備可以使用的情況下，這通常是默認的驅動程序)
- xf86-input-libinput包;（參見 libinput）
- xf86-input-elographics包

也有一些倉庫或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

可見這裡有兩個顯示器：LVDS1與VGA1。LVDS1是筆記本電腦自帶的顯示器，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包 並查看這個關閉的問題。

分類：​

- 輸入設備
- 顯示器

觸控螢幕
新增話題