タッチスクリーン

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

関連記事

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 がデフォルトです。

Two-fingers scrolling

The two-fingers scrolling has to be implemented on the application side (see this link). For Firefox, see Firefox/Tweaks#Enable touchscreen gestures.

There is a hack to emulates this scrolling behavior for every application in #Touchegg, but the X server still handles it as text selection (at least with 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 ルールを使うほうが良いでしょう。

Touchegg

Touchegg はマルチタッチのジェスチャープログラムです。バックグラウンドで実行することで、ウィンドウマネージャにマルチタッチのサポートを追加します。