「タッチスクリーン」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (add TranslationStatus.) |
|||
(3人の利用者による、間の11版が非表示) | |||
1行目: | 1行目: | ||
[[Category:入力デバイス]] |
[[Category:入力デバイス]] |
||
+ | [[Category:ディスプレイ]] |
||
[[en:Touchscreen]] |
[[en:Touchscreen]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
9行目: | 10行目: | ||
== イントロダクション == |
== イントロダクション == |
||
− | この記事ではカーネル (の usbtouchscreen モジュールなど) によってサポートされているタッチスクリーンデバイスを対象にします。サポートされていれば、デバイスの {{ic|/dev/input/event*}} ノードが存在するはずです。ノードが存在するか確認するには: |
+ | この記事ではカーネル (の ''usbtouchscreen'' モジュールなど) によってサポートされているタッチスクリーンデバイスを対象にします。サポートされていれば、デバイスの {{ic|/dev/input/event*}} ノードが存在するはずです。ノードが存在するか確認するには: |
$ less /proc/bus/input/devices |
$ less /proc/bus/input/devices |
||
37行目: | 38行目: | ||
あなたが使用するタッチスクリーンデバイスにあわせて適当なドライバーを選択してください。タッチスクリーンが既に動作する場合はおそらく evdev がデフォルトです。 |
あなたが使用するタッチスクリーンデバイスにあわせて適当なドライバーを選択してください。タッチスクリーンが既に動作する場合はおそらく evdev がデフォルトです。 |
||
+ | |||
+ | == 2 本指スクロール == |
||
+ | |||
+ | 2 本指スクロールはアプリケーション側で実装する必要があります([https://bbs.archlinux.org/viewtopic.php?pid=1839974#p1839974 このリンク]を参照してください)。 |
||
+ | Firefoxについては、[[Firefox/設定#タッチスクリーンジェスチャを有効化する]]を参照してください。 |
||
+ | |||
+ | [[#Touchegg]] でこのスクロール動作をエミュレートするハックはありますが、X サーバーはそれをテキスト選択として扱います(少なくとも[[Plasma]]では)。 |
||
== evdev ドライバー == |
== evdev ドライバー == |
||
45行目: | 53行目: | ||
== マルチディスプレイでタッチスクリーンを使う == |
== マルチディスプレイでタッチスクリーンを使う == |
||
− | マルチディスプレイを使う場合 (その中にタッチスクリーンも含まれる場合)、タッチサーフェスとスクリーンのマッピングを Xorg に指定する必要があります。 |
+ | マルチディスプレイを使う場合 (その中にタッチスクリーンも含まれる場合)、タッチサーフェスとスクリーンのマッピングを Xorg に指定する必要があります。xinput を使うことでとても簡単に設定できます。 |
− | |||
− | xinput を使うことでとても簡単に設定できます: |
||
以下は Wacom タブレットと外付けモニタを使用する例です。xrandr を実行すると2つのディスプレイが表示されます: |
以下は Wacom タブレットと外付けモニタを使用する例です。xrandr を実行すると2つのディスプレイが表示されます: |
||
82行目: | 88行目: | ||
}} |
}} |
||
− | + | スタイラス入力が 2 つあることがわかります。今、私たちは単に以下のように入力を出力にマップする必要があります: |
|
− | $ xinput --map-to-output |
+ | $ xinput --map-to-output 'Serial Wacom Tablet WACf004 stylus' LVDS1 |
− | $ xinput --map-to-output |
+ | $ xinput --map-to-output 'Serial Wacom Tablet WACf004 eraser' LVDS1 |
+ | |||
+ | これらのコマンドを ~/.xinitrc または類似のものに入れることで自動化することができます。タッチスクリーンが切断されて再接続された場合、例えば KVM 経由でモニターを切り替える場合など、マッピングは失われます。その場合は、udev ルールを使用する方が良いです。タッチスクリーンのキャリブレーションページには、変換マトリックスが手動で計算され、自動的に適用される必要がある場合の例として udev ルールがあります。 |
||
+ | |||
+ | === xrandr-watch-git を使用して map-to-output を自動化する === |
||
+ | |||
+ | スクリプトからキャプチャできる [[xrandr]] イベントがあります。{{AUR|xrandr-watch-git}} をインストールし、実行権限を持つスクリプト {{ic|~/.xrandr-changed}} を作成して map-to-output を実行します。例えば: |
||
+ | |||
+ | {{hc|~/.xrandr-changed| |
||
+ | #!/bin/sh |
||
+ | xinput --map-to-output "Wacom HID 4861 Finger touch" "eDP1" |
||
+ | }} |
||
+ | |||
+ | そして、[[systemd/ユーザー]] サービスとして {{ic|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 == |
||
+ | [[Touchegg]] は、X とのみ互換性のあるマルチタッチジェスチャープログラムで、ユーザーとしてバックグラウンドで実行され、ジェスチャーを認識し、それをマウスホイールの動きなどのより従来のイベントに変換します。たとえば、2 本指でスクロールすることができます。しかし、独自のジェスチャー認識を行うアプリケーションやウィンドウマネージャーと干渉することもあります。タッチパッドとタッチスクリーンの両方があり、タッチパッドドライバー(synaptics や libinput など)がジェスチャーを自体で認識せずにマルチタッチイベントを通過させるように設定されている場合、Touchegg は両方でジェスチャーを認識しますが、これは設定できません。実際には、synaptics や libinput のタッチパッドドライバーよりもジェスチャーの認識が優れていますが、タッチスクリーンでは、アプリケーションが独自の方法でタッチに応答する方が一般的に良いです。一部の Qt や GTK アプリケーションはそれを行いますが、Touchegg がタッチイベントを「食べてしまう」とそれができなくなります。そのため、Touchegg は主に独自のタッチイベントの使用を行わないレガシーアプリケーションを実行している場合に便利です。 |
||
− | [[Touchegg]] はマルチタッチのジェスチャープログラムです。バックグラウンドで実行することで、ウィンドウマネージャにマルチタッチのサポートを追加します。 |
||
+ | |||
+ | 2 本指スクロールは、最近の touchegg 2.0 の書き直しで無効にされました。 |
||
+ | 有効にするには、{{Pkg|xdotool}} をインストールし、[https://github.com/JoseExposito/touchegg/issues/438 このクローズされたイシュー] を参照してください。 |
||
+ | |||
+ | {{TranslationStatus|Touchscreen|2024/6/6|782539}} |
2024年6月6日 (木) 22:58時点における最新版
関連記事
Linux でタッチスクリーンデバイスをセットアップしようと試みた場合、(多少の較正は必要ながらも) 特に何も設定しなくても動作するときと、あるいはカーネルによってサポートされていないデバイスなら、設定するのがとても面倒くさい場合があります。
目次
イントロダクション
この記事ではカーネル (の usbtouchscreen モジュールなど) によってサポートされているタッチスクリーンデバイスを対象にします。サポートされていれば、デバイスの /dev/input/event*
ノードが存在するはずです。ノードが存在するか確認するには:
$ less /proc/bus/input/devices
あるいはディスプレイをタッチしたときに使われるイベントノードを確認するには:
$ cat /dev/input/event? # replace ? with the event numbers
デバイスノードが見つけられたのであれば、デバイスを動作させることもおそらくできるはずです。
利用可能な X11 ドライバー
X11 用のタッチスクリーンインプットドライバーは多数存在します。extra リポジトリに入っている最も一般的なドライバーは:
- xf86-input-evdev (タッチスクリーンを接続しただけで動作する場合のデフォルトドライバー)
- xf86-input-libinput; libinput を参照
- xf86-input-elographics
リポジトリに含まれていない、マイナーなドライバーは:
- 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)]
スタイラス入力が 2 つあることがわかります。今、私たちは単に以下のように入力を出力にマップする必要があります:
$ xinput --map-to-output 'Serial Wacom Tablet WACf004 stylus' LVDS1 $ xinput --map-to-output 'Serial Wacom Tablet WACf004 eraser' LVDS1
これらのコマンドを ~/.xinitrc または類似のものに入れることで自動化することができます。タッチスクリーンが切断されて再接続された場合、例えば KVM 経由でモニターを切り替える場合など、マッピングは失われます。その場合は、udev ルールを使用する方が良いです。タッチスクリーンのキャリブレーションページには、変換マトリックスが手動で計算され、自動的に適用される必要がある場合の例として 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 をインストールし、このクローズされたイシュー を参照してください。