タッチスクリーン

提供: ArchWiki
2024年6月6日 (木) 22:53時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎Touchegg: 記事を更新)
ナビゲーションに移動 検索に移動

関連記事

Linux でタッチスクリーンデバイスをセットアップしようと試みた場合、(多少の較正は必要ながらも) 特に何も設定しなくても動作するときと、あるいはカーネルによってサポートされていないデバイスなら、設定するのがとても面倒くさい場合があります。

イントロダクション

この記事ではカーネル (の usbtouchscreen モジュールなど) によってサポートされているタッチスクリーンデバイスを対象にします。サポートされていれば、デバイスの /dev/input/event* ノードが存在するはずです。ノードが存在するか確認するには:

$ less /proc/bus/input/devices

あるいはディスプレイをタッチしたときに使われるイベントノードを確認するには:

$ cat /dev/input/event? # replace ? with the event numbers

デバイスノードが見つけられたのであれば、デバイスを動作させることもおそらくできるはずです。

利用可能な X11 ドライバー

X11 用のタッチスクリーンインプットドライバーは多数存在します。extra リポジトリに入っている最も一般的なドライバーは:

リポジトリに含まれていない、マイナーなドライバーは:

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

デバイスによってはプロプライエタリなドライバーも存在しますが (例: xf86-input-egalaxAUR)、最初にオープンソースのドライバーを試すことを推奨します。

あなたが使用するタッチスクリーンデバイスにあわせて適当なドライバーを選択してください。タッチスクリーンが既に動作する場合はおそらく evdev がデフォルトです。

2 本指スクロール

2 本指スクロールはアプリケーション側で実装する必要があります(このリンクを参照してください)。 Firefoxについては、Firefox/設定#タッチスクリーンジェスチャを有効化するを参照してください。

#Touchegg でこのスクロール動作をエミュレートするハックはありますが、X サーバーはそれをテキスト選択として扱います(少なくともPlasmaでは)。

evdev ドライバー

キャリブレーション

xinput_calibratorAUR (AUR) をインストールして、xinput_calibrator を実行して指示に従って下さい。

マルチディスプレイでタッチスクリーンを使う

マルチディスプレイを使う場合 (その中にタッチスクリーンも含まれる場合)、タッチサーフェスとスクリーンのマッピングを Xorg に指定する必要があります。xinput を使うことでとても簡単に設定できます。

以下は Wacom タブレットと外付けモニタを使用する例です。xrandr を実行すると2つのディスプレイが表示されます:

$ 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  

上記で2つのディスプレイは 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)]

ID が 1314 の2つのスタイラス入力が存在することが確認できます。以下のように実行して入力を出力にマップしてください:

$ xinput --map-to-output 13 LVDS1
$ xinput --map-to-output 14 LVDS1

再起動によって ID は変化してしまいますが、以下のコマンドを ~/.xinitrc などに記述することで自動的に設定することができます:

xinput --map-to-output $(xinput list --id-only "Serial Wacom Tablet WACf004 stylus") LVDS1
xinput --map-to-output $(xinput list --id-only "Serial Wacom Tablet WACf004 eraser") LVDS1

また、タッチスクリーンを一度切断して再接続した場合 (例えば KVM でモニターを切り替えた場合など) もマッピングの設定は消失します。そのような場合は udev ルールを使うほうが良いでしょう。

xrandr-watch-git を使用して map-to-output を自動化する

スクリプトからキャプチャできる 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 は現在、sway(または wlroots ベースのサポートされたコンポジター)以外の環境で特定のディスプレイにタッチをロックする既知の方法がありません。weston-touch-calibrator などのツールはありますが、Gnome Wayland は Xwayland を使用しており、キャリブレーターがタッチスクリーンを見つけることができません。

Wayland/Xwayland はまた、xinput リストをマスクしてそれらを "xwayland-pointer", "xwayland-relative-pointer", "xwayland-touch-pointer" などの一般的な xwayland デバイスに統合します。Wayland の "Xinput" 方法は "Libinput" ですが、すべての同じ機能を持っているわけではありません。マルチヘッドセットアップでタッチスクリーンを使用する現在知られている方法は、Gnome や KDE に X11 を使用させることです。libinput は現在、タッチスクリーンが利用可能なすべてのモニターをカバーしていると仮定しています。

sway の設定については Sway#タッチディスプレイのマッピングを参照してください。

Touchegg

Touchegg は、X とのみ互換性のあるマルチタッチジェスチャープログラムで、ユーザーとしてバックグラウンドで実行され、ジェスチャーを認識し、それをマウスホイールの動きなどのより従来のイベントに変換します。たとえば、2 本指でスクロールすることができます。しかし、独自のジェスチャー認識を行うアプリケーションやウィンドウマネージャーと干渉することもあります。タッチパッドとタッチスクリーンの両方があり、タッチパッドドライバー(synaptics や libinput など)がジェスチャーを自体で認識せずにマルチタッチイベントを通過させるように設定されている場合、Touchegg は両方でジェスチャーを認識しますが、これは設定できません。実際には、synaptics や libinput のタッチパッドドライバーよりもジェスチャーの認識が優れていますが、タッチスクリーンでは、アプリケーションが独自の方法でタッチに応答する方が一般的に良いです。一部の Qt や GTK アプリケーションはそれを行いますが、Touchegg がタッチイベントを「食べてしまう」とそれができなくなります。そのため、Touchegg は主に独自のタッチイベントの使用を行わないレガシーアプリケーションを実行している場合に便利です。

2 本指スクロールは、最近の touchegg 2.0 の書き直しで無効にされました。 有効にするには、xdotool をインストールし、このクローズされたイシュー を参照してください。