「Libinput」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(同期)
(2人の利用者による、間の9版が非表示)
2行目: 2行目:
 
[[Category:入力デバイス]]
 
[[Category:入力デバイス]]
 
[[en:Libinput]]
 
[[en:Libinput]]
  +
[[es:Libinput]]
  +
[[zh-hans:Libinput]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|Xorg}}
 
{{Related|Xorg}}
12行目: 14行目:
 
:libinput は Wayland コンポジタで入力デバイスを処理するためのライブラリで、汎用的な X.Org 入力ドライバーでもあります。デバイスの検出・管理、入力デバイスのイベントの処理・抽象化を担当し、ユーザーが期待する一般的な機能セットを提供することでコンポジタを改造する必要があるコードの量を減らします。
 
:libinput は Wayland コンポジタで入力デバイスを処理するためのライブラリで、汎用的な X.Org 入力ドライバーでもあります。デバイスの検出・管理、入力デバイスのイベントの処理・抽象化を担当し、ユーザーが期待する一般的な機能セットを提供することでコンポジタを改造する必要があるコードの量を減らします。
   
libinput ドライバーは標準的な[[Xorg#入力デバイス|入力デバイス]]はほとんどサポートしています。特にプロジェクトが力を入れてるのは、タッチパッドやタッチスクリーンのタッチ機能 (マルチタッチやジェスチャー) の先進的なサポートです。詳しくは [http://wayland.freedesktop.org/libinput/doc/latest/pages.html ドキュメント] を見て下さい。
+
libinput ドライバーは標準的な[[Xorg#入力デバイス|入力デバイス]]はほとんどサポートしています。特にプロジェクトが力を入れてるのは、タッチパッドやタッチスクリーンのタッチ機能 (マルチタッチやジェスチャー) の先進的なサポートです。詳しくは [https://wayland.freedesktop.org/libinput/doc/latest/ libinput のドキュメント] を見て下さい。
   
 
== インストール ==
 
== インストール ==
24行目: 26行目:
 
== 設定 ==
 
== 設定 ==
   
  +
[[Wayland]] 用の libinput 設定ファイルは存在しません。設定できるオプションは使用しているデスクトップ環境のサポート状況によって変わります。[[#グラフィカルツール]]を参照。
[[Xorg]] 用のデフォルト設定ファイルは {{ic|/usr/share/X11/xorg.conf.d/60-libinput.conf}} にインストールされます。キーボードやタッチパッド、トラックポイントやサポートされているタッチスクリーンなら特別な設定をしなくても自動で検出されます。
 
  +
  +
[[Xorg]] 用のデフォルト設定ファイルは {{ic|/usr/share/X11/xorg.conf.d/40-libinput.conf}} にインストールされます。キーボードやタッチパッド、トラックポイントやサポートされているタッチスクリーンなら特別な設定をしなくても自動で検出されます。
  +
  +
=== xinput を使う ===
   
 
まず、次を実行してください:
 
まず、次を実行してください:
# libinput-list-devices
+
# libinput list-devices
 
上記のコマンドは接続されているデバイスと、libinput によってサポートされている機能を出力します。
 
上記のコマンドは接続されているデバイスと、libinput によってサポートされている機能を出力します。
   
 
グラフィカル環境を[[再起動]]すれば、他のドライバーが優先的に使用されるように設定されていないかぎり、デフォルト設定によって libinput によってデバイスが管理されるようになるはずです。
 
グラフィカル環境を[[再起動]]すれば、他のドライバーが優先的に使用されるように設定されていないかぎり、デフォルト設定によって libinput によってデバイスが管理されるようになるはずです。
   
設定できるオプションは libinput(4) [[man ページ]]を参照してください。''xinput'' ツールを使うことで使用している特定のデバイスのオプションを確認・変更することができます。例えばオプションを確認するには:
+
設定できるオプションは {{man|4|libinput}} [[man ページ]]を参照してください。''xinput'' ツールを使うことで使用している特定のデバイスのオプションを確認・変更することができます。
  +
$ xinput list-props ''device-number''
 
  +
デバイスとその番号を確認するには:
  +
$ xinput list
  +
オプションを確認するには:
  +
$ xinput list-props ''device''
 
オプションを設定するには:
 
オプションを設定するには:
$ xinput set-prop ''device-number'' ''option-number'' ''setting''
+
$ xinput set-prop ''device'' ''option-number'' ''setting''
  +
  +
例えば、libinput の Click Method Enabled (303) のオプションを設定するには、以下のコマンドを実行:
  +
  +
$ xinput set-prop 14 303 {1 1}
  +
  +
=== Xorg 設定ファイルを使う ===
   
オプションの永続的な設定については [[Xorg#.conf ファイルを使う]] を見て下さい。[[Logitech Marble Mouse#libinput を使う]]や下の[[#タッチパッドの設定]]に設定例が載っています。
+
オプションの永続的な設定については [[Xorg#.conf ファイルを使う]] を見て下さい。[[Logitech Marble Mouse#libinput を使う]]や下の[[#ンの再マピング]]に設定例が載っています。
   
 
通常、[[Xorg#入力デバイス|入力デバイス]]用に別のドライバーを同時にインストールすることができます。デバイスのドライバーを libinput を使うように切り替えたいときは、{{ic|/etc/X11/xorg.conf.d/}} にある昔の設定ファイルによって他のドライバーが優先されるようになっていないことを確認してください。
 
通常、[[Xorg#入力デバイス|入力デバイス]]用に別のドライバーを同時にインストールすることができます。デバイスのドライバーを libinput を使うように切り替えたいときは、{{ic|/etc/X11/xorg.conf.d/}} にある昔の設定ファイルによって他のドライバーが優先されるようになっていないことを確認してください。
   
  +
{{Tip|libinput と synaptics を同時にインストールしてデフォルト設定を使っている場合 ({{ic|/etc/X11/xorg.conf.d}} に両方のファイルが存在しない場合)、{{ic|70-synaptics.conf}} のファイル名によって synaptics が優先されます。libinput を優先させたい場合、デフォルトの libinput 設定のシンボリックリンクを作成してください:
{{Tip|libinput でタッチパッドを正しく動作させるには synaptics の設定 ({{ic|/etc/X11/xorg.conf.d/50-synaptics.conf}}) を手動で削除する必要があるかもしれません。}}
 
  +
# ln -s /usr/share/X11/xorg.conf.d/40-libinput.conf /etc/X11/xorg.conf.d/40-libinput.conf
  +
両方の設定ファイルが {{ic|/etc/X11/xorg.conf.d}} に存在する場合、libinput の設定ファイルは2番目になります。[[Xorg#.conf ファイルを使う]]を見てください。libinput を無効化したくなった場合、作成したシンボリックリンクを {{ic|/etc/X11/xorg.conf.d/}} から削除してください。}}
   
どのデバイスが libinput によって管理されているか ''xorg'' のログファイルで確認できます。例えば、{{ic|/etc/X11/xorg.conf.d/}} に何も設定ファイルを置いていない (デバイスを自動で検出させている) ノートパソコンの場合、以下のようになります:
+
どのデバイスが libinput によって管理されているか [[Xorg#共通|xorg のログファイル]]で確認できます。例えば、{{ic|/etc/X11/xorg.conf.d/}} に何も設定ファイルを置いていない (デバイスを自動で検出させている) ノートパソコンの場合、以下のようになります:
{{hc|$ grep -e "Using input driver 'libinput'" ~/.local/share/xorg/Xorg.0.log|
+
{{hc|$ grep -e "Using input driver 'libinput'" ''/path/to/Xorg.0.log''|
 
[ 28.799] (II) Using input driver 'libinput' for 'Power Button'
 
[ 28.799] (II) Using input driver 'libinput' for 'Power Button'
 
[ 28.847] (II) Using input driver 'libinput' for 'Video Bus'
 
[ 28.847] (II) Using input driver 'libinput' for 'Video Bus'
54行目: 72行目:
 
[ 28.895] (II) Using input driver 'libinput' for 'ThinkPad Extra Buttons'}}
 
[ 28.895] (II) Using input driver 'libinput' for 'ThinkPad Extra Buttons'}}
   
もちろん、あるデバイスでは他のドライバーを使用して、他のデバイスでは libinput を使うようにすることもできます。使用するドライバーを決める要因は様々です。例えば、[[Touchpad Synaptics]] と比べて、libinput ドライバーにはタッチパッドの挙動をカスタマイズするためのオプションが少ないですが、マルチタッチイベントをよりプログラマティックに処理することができます (例: 手のひら検出)。従って、あるドライバーでハードウェアの問題を抱えるような場合、別のドライバーを試してみると良いでしょう。
+
もちろん、あるデバイスでは他のドライバーを使用して、他のデバイスでは libinput を使うようにすることもできます。使用するドライバーを決める要因は様々です。例えば、[[Synaptics タッチパッド]]ドライバーと比べて、libinput ドライバーにはタッチパッドの挙動をカスタマイズするためのオプションが少ないですが、マルチタッチイベントをよりプログラマティックに処理することができます (例: 手のひら検出)。従って、あるドライバーでハードウェアの問題を抱えるような場合、別のドライバーを試してみると良いでしょう。
   
  +
=== 一般的なオプション ===
== Tips and tricks ==
 
   
  +
カスタム設定ファイルは {{ic|/etc/X11/xorg.conf.d/}} に配置します。よく使われるファイル名は {{ic|30-touchpad.conf}} です。
=== タッチパッドの設定 ===
 
   
  +
{{Tip|利用可能な設定オプションや説明などは {{ic|/usr/share/X11/xorg.conf.d/40-libinput.conf}} や {{man|4|libinput}} のマニュアルページを参照してください。}}
タップはデフォルトで無効になっていることがあります。有効にするには、設定ファイルを追加してください:
 
  +
  +
基本的な設定は以下のようになります:
 
{{hc|/etc/X11/xorg.conf.d/30-touchpad.conf|
 
{{hc|/etc/X11/xorg.conf.d/30-touchpad.conf|
 
Section "InputClass"
 
Section "InputClass"
Identifier "MyTouchpad"
+
Identifier "devname"
MatchIsTouchpad "on"
+
Driver "libinput"
  +
...
Driver "libinput"
 
  +
EndSection
Option "Tapping" "on"
 
  +
}}
  +
単体の設定ファイルでお好きな数だけセクションを定義することができます。{{ic|MatchIsPointer "on"}}, {{ic|MatchIsKeyboard "on"}}, {{ic|MatchIsTouchpad "on"}}, {{ic|MatchIsTouchscreen "on"}} などを使って設定したいデバイスをフィルタリングしてください。詳しくは {{man|4|libinput}} を参照。一般的な設定オプションは以下の通りです:
  +
* {{ic|"Tapping" "on"}}: タップでクリック。
  +
* {{ic|"ClickMethod" "clickfinger"}}: トラックパッドの中・右ボタンの領域が消えて、代わりに2本指のクリックが右クリックに、3本指のクリックが中クリックになります。詳しくは [https://wayland.freedesktop.org/libinput/doc/latest/clickpad-softbuttons.html#clickfinger-behavior ドキュメント] を参照。
  +
* {{ic|"NaturalScrolling" "true"}}: ナチュラルスクロール (逆スクロール)。
  +
* {{ic|"ScrollMethod" "edge"}}: エッジスクロール (縦スクロール)。
  +
デバイスによっては上記の一部オプションが使えないこともあるので注意してください。
  +
  +
=== グラフィカルツール ===
  +
  +
複数の GUI ツールが存在します:
  +
  +
* [[GNOME]]:
  +
** コントロールセンターの 'Mouse & Touchpad' に基本的な設定 UI が存在します。[[GNOME#マウスとタッチパッド]]も参照。
  +
** {{pkg|gnome-tweaks}} には他にもいくつか設定が存在します。
  +
* [[Cinnamon]]:
  +
** GNOME UI と同じように設定することができます。
  +
* [[KDE|KDE Plasma]] 5:
  +
** キーボード・マウス・コントローラーデバイスはシステム設定から設定できます。デフォルトのタッチパッドモジュールは旧 synaptics ドライバーに基づいているため libinput の設定は機能しません。
  +
** {{AUR|kcm-pointing-devices-git}} は libinput によってサポートされている全ての入力デバイスの古い KDE 設定モジュールです。タッチパッド設定も機能しますが再起動すると設定は消えてしまいます。詳しくは [https://bugs.kde.org/show_bug.cgi?id=402882 KDE Bug 402882] を参照。
  +
  +
== ヒントとテクニック ==
  +
  +
=== ボタンの再マッピング ===
  +
  +
例としてタッチパッドの2本指タップと3本指タップを置き換えるとします。デフォルトでは3本指タップでテキストを貼り付けることができますが、[[Xorg]] の設定ファイルで {{ic|TappingButtonMap}} オプションを設定することで2本指タップで貼り付けを行うように設定できます。1・2・3本指のタップを左・右・中に設定するには {{ic|TappingButtonMap}} を {{ic|lrm}} に、左・中・右にするには {{ic|lmr}} に設定してください。
  +
  +
{{hc|/etc/X11/xorg.conf.d/30-touchpad.conf|
  +
Section "InputClass"
  +
Identifier "touchpad"
  +
Driver "libinput"
  +
MatchIsTouchpad "on"
  +
Option "Tapping" "on"
  +
Option "TappingButtonMap" "lmr"
 
EndSection}}
 
EndSection}}
   
  +
デバイスがタッチパッドではない場合は {{ic|MatchIsTouchpad "on"}} を削除して {{ic|Identifier}} も変えてください。
=== マウスボタンの再マッピング ===
 
  +
  +
=== ボタンの手動再マッピング ===
   
デバイスによってはボタンのマッピングを変えたいというときもあるでしょう。例えば、中ボタンがマウスホイールと一体となっている場合、マウスの親指ボタンを中ボタン (X11 では貼り付けに使われています) の代わりに使いたいと思うかもしれません。現在のボタンマッピングは次のコマンドで確認できます:
+
デバイスによってはボタンのマッピングを変えたいというときもあるでしょう。例えば、中ボタンがマウスホイールと一体となっている場合、マウスの親指ボタンを中ボタン (X11 では貼り付けに使われています) の代わりに使いたいと思うかもしれません。現在のボタンマッピングは次のコマンドで確認できます (''device'' は {{ic|xinput list}} で確認できるデバイス名あるいはデバイス ID に置き換えてください):
 
$ xinput get-button-map ''device''
 
$ xinput get-button-map ''device''
 
ボタン番号の順番は自由に変更することができます。例:
 
ボタン番号の順番は自由に変更することができます。例:
90行目: 146行目:
 
...</nowiki>}}
 
...</nowiki>}}
   
=== デバ ===
+
=== チパッド感度の変更 ===
   
  +
libinput がタッチが押されたときと離されたときを認識する適切な閾値を探す方法は上流ドキュメント [https://wayland.freedesktop.org/libinput/doc/latest/touchpad-pressure-debugging.html#touchpad-pressure-hwdb] に書かれています。
まず、パッケージに含まれている ''libinput-debug-events'' ツールで問題をデバッグできないか確認してください。{{ic|libinput-debug-events --help}} を実行すればオプションが表示されます。
 
   
  +
タッチパッドのカスタム圧力値は一時的なローカルデバイスクアークで設定できます。[https://wayland.freedesktop.org/libinput/doc/latest/device-quirks.html] を見てください。
入力デバイスによってはカーネルのサポートが必要なことがありますが、それを確認するには {{Pkg|evemu}} パッケージに含まれている ''evemu-describe'' を使います:
 
   
  +
{{Note|クアークは内部的な API で将来的に libinput で動作するか保証がありません。バージョン 1.11 と 1.12 の間から、udev ルール [https://wayland.freedesktop.org/libinput/doc/1.11.3/udev_config.html#hwdb] が {{ic|.quirk}} ファイルによって置き換えられました [https://wayland.freedesktop.org/libinput/doc/latest/device-quirks.html]。}}
[http://ix.io/m6b software supported input trackpad driver] の出力を [https://github.com/whot/evemu-devices/blob/master/touchpads/SynPS2%20Synaptics%20TouchPad-with-scrollbuttons.events a supported trackpad] と比較して下さい (ABS_, ABS_MT, REL_X/Y)。クリックパッドの場合 {{ic|INPUT_PROP_BUTTONPAD}} プロパティも設定されます。
 
   
===== タッチパッド GNOME で動作しない =====
+
=== タッチパッドの無効化 ===
   
  +
タッチパッドを無効化するには、まず {{ic|xinput list}} で名前を確認してから {{ic|xinput disable ''name''}} で無効化してください。
以下のコマンドを実行してタッチパッドのイベントを GNOME デスクトップに送信してください:
 
$ gsettings set org.gnome.desktop.peripherals.touchpad send-events enabled
 
   
  +
{{Note|
=== マルチタッチイベント ===
 
  +
* ID 番号を使うよりも名前を使うほうが安定して無効化できます。デバイスの番号は変わる可能性があります。
  +
* 名前に空白が含まれる場合はクォートで囲ってください。
  +
}}
   
  +
設定を永続化する場合は[[自動起動]]を見てください。
libinput ドライバーにはスワイプやピンチなどの高度なマルチタッチイベントを処理できるロジックが含まれていますが、[[デスクトップ環境]]や[[ウィンドウマネージャ]]がまだそれらのアクションを実装していない可能性があります。
 
   
  +
=== ジェスチャー ===
[[wikipedia:Extended_Window_Manager_Hints|EWMH]] ([https://www.freedesktop.org/wiki/Specifications/wm-spec/ wm-spec] を参照) 互換のウィンドウマネージャでは、代わりに [https://github.com/bulletmark/libinput-gestures libinput-gestures] ユーティリティを使うことができます。
 
   
  +
libinput ドライバーにはスワイプやピンチなどの高度なマルチタッチイベントを処理できるロジックが含まれていますが [https://wayland.freedesktop.org/libinput/doc/latest/gestures.html]、[[デスクトップ環境]]や[[ウィンドウマネージャ]]がまだそれらのアクションを実装していない可能性があります。
ユーティリティはユーザーでインストール・設定・アンインストールできます。依存パッケージの {{Pkg|python}} と {{Pkg|xdotool}} はシステムにインストールしてください。{{ic|~/.config/libinput-events.conf}} ファイルを使うことでスワイプやピンチを行ったときのアクションを定義できます。まだ [[AUR]] パッケージは存在しません [https://github.com/bulletmark/libinput-gestures/issues/6]。
 
   
  +
==== libinput-gestures ====
=== ナチュラルスクロール ===
 
   
  +
[[wikipedia:Extended_Window_Manager_Hints|EWMH]] ([https://www.freedesktop.org/wiki/Specifications/wm-spec/ wm-spec] を参照) 互換のウィンドウマネージャでは、代わりに [https://github.com/bulletmark/libinput-gestures libinput-gestures] ユーティリティを使うことができます。このプログラムは libinput のジェスチャーを ({{ic|libinput debug-events}} を使って) タッチパッドから読み込んで設定ファイルにあわせてジェスチャーをマッピングします。libinput に組み込まれている認識機能の範囲内で柔軟な設定が可能です。
ナチュラルスクロール (逆スクロール) を設定するには、以下の設定ファイルを追加:
 
   
  +
[https://github.com/bulletmark/libinput-gestures libinput-gestures] を使用するには、{{Aur|libinput-gestures}} パッケージをインストールしてください。デフォルト設定では、スワイプやピンチのジェスチャーが使えます。また、個人設定ファイルで自由にジェスチャーを定義できます。詳しくは [https://github.com/bulletmark/libinput-gestures/blob/master/README.md README] を見てください。
{{hc|/etc/X11/xorg.conf.d/20-natural-scrolling.conf|
 
Section "InputClass"
 
Identifier "libinput pointer catchall"
 
MatchIsPointer "on"
 
MatchDevicePath "/dev/input/event*"
 
Driver "libinput"
 
Option "NaturalScrolling" "true"
 
EndSection
 
   
  +
==== fusuma ====
Section "InputClass"
 
  +
Identifier "libinput touchpad catchall"
 
  +
[https://github.com/iberianpig/fusuma Fusuma] は [[Ruby]] で書かれたマルチタッチジェスチャー認識ツールで、libinput-gestures の代替として使えます。
MatchIsTouchpad "on"
 
  +
MatchDevicePath "/dev/input/event*"
 
  +
{{ic|fusuma}} の [[Ruby#RubyGems|Ruby gem]] をインストールしてください:
Driver "libinput"
 
  +
Option "NaturalScrolling" "true"
 
  +
$ gem install fusuma
EndSection}}
 
  +
  +
また、AUR には旧バージョンが存在します: {{AUR|ruby-fusuma}}。
  +
  +
それから {{ic|~/.config/fusuma/config.yml}} で以下のように設定:
  +
  +
{{hc|~/.config/fusuma/config.yml|<nowiki>
  +
swipe:
  +
3:
  +
left:
  +
shortcut: 'alt+Right'
  +
right:
  +
shortcut: 'alt+Left'
  +
up:
  +
shortcut: 'ctrl+shift+plus'
  +
down:
  +
shortcut: 'ctrl+minus'
  +
pinch:
  +
in:
  +
shortcut: 'ctrl+shift+plus'
  +
out:
  +
shortcut: 'ctrl+minus'
  +
  +
threshold:
  +
swipe: 0.5
  +
pinch: 0.2
  +
  +
interval:
  +
swipe: 0.2
  +
pinch: 0.2
  +
</nowiki>}}
  +
  +
スワイプの閾値を低くするとページをスワイプしすぎてしまいます。
  +
  +
上記の設定は3本指のスワイプを使います。
  +
  +
==== GnomeExtendedGestures ====
  +
  +
GNOME との統合が必要な場合、[https://github.com/mpiannucci/GnomeExtendedGestures GnomeExtendedGestures] が存在します ({{Aur|gnome-shell-extension-extended-gestures-git}})。3本指の縦・横のジェスチャーを設定して gnome-shell のアクションを実行できます (アプリケーションの切り替えなど)。
  +
  +
== トラブルシューティング ==
  +
  +
まず、{{ic|libinput debug-events}} を実行して問題をデバッグできないか確認してください。利用可能なオプションは {{man|1|libinput-debug-events}} を見てください。
  +
  +
入力デバイスによってはカーネルのサポートが必要なことがありますが、それを確認するには {{Pkg|evemu}} パッケージに含まれている ''evemu-describe'' を使います:
  +
  +
[http://ix.io/m6b software supported input trackpad driver] の出力を [https://github.com/whot/evemu-devices/blob/master/touchpads/SynPS2%20Synaptics%20TouchPad-with-scrollbuttons.events a supported trackpad] と比較して下さい (ABS_, ABS_MT, REL_X/Y)。クリックパッドの場合 {{ic|INPUT_PROP_BUTTONPAD}} プロパティも設定されます。
  +
  +
=== タッチパッドが GNOME で動作しない ===
  +
  +
以下のコマンドを実行してタッチパッドのイベントを GNOME デスクトップに送信してください:
  +
$ gsettings set org.gnome.desktop.peripherals.touchpad send-events enabled
  +
  +
さらに、GNOME によって特定の設定が上書きされ、タップがオフになったり強制的にナチュラルスクロールになることがあります。そのような場合、GNOME の {{ic|gsettings}} コマンドラインツールを使うか、適当なグラフィカルフロントエンドを使って設定を行ってください。例えば、タップを有効にしてナチュラルスクロールを無効化したい場合、以下のようにタッチパッドの設定値を変更します:
  +
$ gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click true
  +
$ gsettings set org.gnome.desktop.peripherals.touchpad natural-scroll false
  +
  +
=== KDE の Touchpad KCM におけるタッチパッドの設定が反映されない ===
  +
  +
KDE のタッチパッド設定モジュールは [[Xorg]] における libinput をサポートしていません。Plasma セッションが起動するとデフォルトオプションが上書きされるため {{ic|/etc/X11/xorg.conf.d/}} のタッチパッドデバイスに関する Xorg 設定セクションも機能しません。完全なサポートは得られませんが、いくつか解決方法があります:
   
  +
* {{AUR|kcm-pointing-devices-git}} をインストールする。ただし、再起動するとオプションが元に戻ります。
上記の設定で、全てのタッチパッドやマウスのスクロールが逆になります。
 
  +
* {{ic|xinput set-prop}} で手動でオプションを設定する。Plasma の起動時にオプションを適用するために {{ic|~/.config/autostart-scripts/}} の bash スクリプトにコマンドを保存する必要があります。
   
 
== 参照 ==
 
== 参照 ==
   
 
* [https://wayland.freedesktop.org/libinput/doc/latest/index.html libinput Wayland ドキュメント]
 
* [https://wayland.freedesktop.org/libinput/doc/latest/index.html libinput Wayland ドキュメント]
* [https://archive.fosdem.org/2015/schedule/event/libinput/attachments/slides/591/export/events/attachments/libinput/slides/591/libinput_xorg.pdf FOSDEM 2015 - libinput] - Hans de Goede on goals and plans of the project
+
* [https://archive.fosdem.org/2015/schedule/event/libinput/attachments/slides/591/export/events/attachments/libinput/slides/591/libinput_xorg.pdf FOSDEM 2015 - libinput] - Hans de Goede によるプロジェクトの目標と計画についての説明
*[http://who-t.blogspot.com.au/ Peter Hutterer's Blog] - numerous posts on libinput from one of the project's hackers.
+
*[http://who-t.blogspot.com.au/ Peter Hutterer のブログ] - プロジェクトのハッカーによる libinput 関連の記事

2019年3月17日 (日) 22:33時点における版

関連記事

libinput プロジェクトより:

libinput は Wayland コンポジタで入力デバイスを処理するためのライブラリで、汎用的な X.Org 入力ドライバーでもあります。デバイスの検出・管理、入力デバイスのイベントの処理・抽象化を担当し、ユーザーが期待する一般的な機能セットを提供することでコンポジタを改造する必要があるコードの量を減らします。

libinput ドライバーは標準的な入力デバイスはほとんどサポートしています。特にプロジェクトが力を入れてるのは、タッチパッドやタッチスクリーンのタッチ機能 (マルチタッチやジェスチャー) の先進的なサポートです。詳しくは libinput のドキュメント を見て下さい。

インストール

Wayland で libinput を使用する場合、特にインストールする必要があるものはありません。あなたが使用しているグラフィカル環境の依存パッケージとして libinput パッケージは既にインストールされているはずです。他に必要なドライバーはありません。

Xorg で libinput を使用する場合、xf86-input-libinput パッケージをインストールしてください。xf86-input-libinput は libinput のラッパーで、X でも libinput で入力デバイスを扱えるようになります。evdev や synaptics の代わりのドライバーとしても使うことが可能です [1]。つまり、xf86-input- で始まる X 用のドライバーパッケージを置換できます。

また、xorg-xinput をインストールすることで実行中に設定を変更することができます。

設定

Wayland 用の libinput 設定ファイルは存在しません。設定できるオプションは使用しているデスクトップ環境のサポート状況によって変わります。#グラフィカルツールを参照。

Xorg 用のデフォルト設定ファイルは /usr/share/X11/xorg.conf.d/40-libinput.conf にインストールされます。キーボードやタッチパッド、トラックポイントやサポートされているタッチスクリーンなら特別な設定をしなくても自動で検出されます。

xinput を使う

まず、次を実行してください:

# libinput list-devices

上記のコマンドは接続されているデバイスと、libinput によってサポートされている機能を出力します。

グラフィカル環境を再起動すれば、他のドライバーが優先的に使用されるように設定されていないかぎり、デフォルト設定によって libinput によってデバイスが管理されるようになるはずです。

設定できるオプションは libinput(4) man ページを参照してください。xinput ツールを使うことで使用している特定のデバイスのオプションを確認・変更することができます。

デバイスとその番号を確認するには:

$ xinput list

オプションを確認するには:

$ xinput list-props device

オプションを設定するには:

$ xinput set-prop device option-number setting 

例えば、libinput の Click Method Enabled (303) のオプションを設定するには、以下のコマンドを実行:

$ xinput set-prop 14 303 {1 1}

Xorg 設定ファイルを使う

オプションの永続的な設定については Xorg#.conf ファイルを使う を見て下さい。Logitech Marble Mouse#libinput を使うや下の#ボタンの再マッピングに設定例が載っています。

通常、入力デバイス用に別のドライバーを同時にインストールすることができます。デバイスのドライバーを libinput を使うように切り替えたいときは、/etc/X11/xorg.conf.d/ にある昔の設定ファイルによって他のドライバーが優先されるようになっていないことを確認してください。

ヒント: libinput と synaptics を同時にインストールしてデフォルト設定を使っている場合 (/etc/X11/xorg.conf.d に両方のファイルが存在しない場合)、70-synaptics.conf のファイル名によって synaptics が優先されます。libinput を優先させたい場合、デフォルトの libinput 設定のシンボリックリンクを作成してください:
# ln -s /usr/share/X11/xorg.conf.d/40-libinput.conf /etc/X11/xorg.conf.d/40-libinput.conf
両方の設定ファイルが /etc/X11/xorg.conf.d に存在する場合、libinput の設定ファイルは2番目になります。Xorg#.conf ファイルを使うを見てください。libinput を無効化したくなった場合、作成したシンボリックリンクを /etc/X11/xorg.conf.d/ から削除してください。

どのデバイスが libinput によって管理されているか xorg のログファイルで確認できます。例えば、/etc/X11/xorg.conf.d/ に何も設定ファイルを置いていない (デバイスを自動で検出させている) ノートパソコンの場合、以下のようになります:

$ grep -e "Using input driver 'libinput'" /path/to/Xorg.0.log
[    28.799] (II) Using input driver 'libinput' for 'Power Button'
[    28.847] (II) Using input driver 'libinput' for 'Video Bus'
[    28.853] (II) Using input driver 'libinput' for 'Power Button'
[    28.860] (II) Using input driver 'libinput' for 'Sleep Button'
[    28.872] (II) Using input driver 'libinput' for 'AT Translated Set 2 keyboard'
[    28.878] (II) Using input driver 'libinput' for 'SynPS/2 Synaptics TouchPad'
[    28.886] (II) Using input driver 'libinput' for 'TPPS/2 IBM TrackPoint'
[    28.895] (II) Using input driver 'libinput' for 'ThinkPad Extra Buttons'

もちろん、あるデバイスでは他のドライバーを使用して、他のデバイスでは libinput を使うようにすることもできます。使用するドライバーを決める要因は様々です。例えば、Synaptics タッチパッドドライバーと比べて、libinput ドライバーにはタッチパッドの挙動をカスタマイズするためのオプションが少ないですが、マルチタッチイベントをよりプログラマティックに処理することができます (例: 手のひら検出)。従って、あるドライバーでハードウェアの問題を抱えるような場合、別のドライバーを試してみると良いでしょう。

一般的なオプション

カスタム設定ファイルは /etc/X11/xorg.conf.d/ に配置します。よく使われるファイル名は 30-touchpad.conf です。

ヒント: 利用可能な設定オプションや説明などは /usr/share/X11/xorg.conf.d/40-libinput.conflibinput(4) のマニュアルページを参照してください。

基本的な設定は以下のようになります:

/etc/X11/xorg.conf.d/30-touchpad.conf
Section "InputClass"
    Identifier "devname"
    Driver "libinput"
    ...
EndSection

単体の設定ファイルでお好きな数だけセクションを定義することができます。MatchIsPointer "on", MatchIsKeyboard "on", MatchIsTouchpad "on", MatchIsTouchscreen "on" などを使って設定したいデバイスをフィルタリングしてください。詳しくは libinput(4) を参照。一般的な設定オプションは以下の通りです:

  • "Tapping" "on": タップでクリック。
  • "ClickMethod" "clickfinger": トラックパッドの中・右ボタンの領域が消えて、代わりに2本指のクリックが右クリックに、3本指のクリックが中クリックになります。詳しくは ドキュメント を参照。
  • "NaturalScrolling" "true": ナチュラルスクロール (逆スクロール)。
  • "ScrollMethod" "edge": エッジスクロール (縦スクロール)。

デバイスによっては上記の一部オプションが使えないこともあるので注意してください。

グラフィカルツール

複数の GUI ツールが存在します:

  • GNOME:
  • Cinnamon:
    • GNOME UI と同じように設定することができます。
  • KDE Plasma 5:
    • キーボード・マウス・コントローラーデバイスはシステム設定から設定できます。デフォルトのタッチパッドモジュールは旧 synaptics ドライバーに基づいているため libinput の設定は機能しません。
    • kcm-pointing-devices-gitAUR は libinput によってサポートされている全ての入力デバイスの古い KDE 設定モジュールです。タッチパッド設定も機能しますが再起動すると設定は消えてしまいます。詳しくは KDE Bug 402882 を参照。

ヒントとテクニック

ボタンの再マッピング

例としてタッチパッドの2本指タップと3本指タップを置き換えるとします。デフォルトでは3本指タップでテキストを貼り付けることができますが、Xorg の設定ファイルで TappingButtonMap オプションを設定することで2本指タップで貼り付けを行うように設定できます。1・2・3本指のタップを左・右・中に設定するには TappingButtonMaplrm に、左・中・右にするには lmr に設定してください。

/etc/X11/xorg.conf.d/30-touchpad.conf
Section "InputClass"
    Identifier "touchpad"
    Driver "libinput"
    MatchIsTouchpad "on"
    Option "Tapping" "on"
    Option "TappingButtonMap" "lmr"
EndSection

デバイスがタッチパッドではない場合は MatchIsTouchpad "on" を削除して Identifier も変えてください。

ボタンの手動再マッピング

デバイスによってはボタンのマッピングを変えたいというときもあるでしょう。例えば、中ボタンがマウスホイールと一体となっている場合、マウスの親指ボタンを中ボタン (X11 では貼り付けに使われています) の代わりに使いたいと思うかもしれません。現在のボタンマッピングは次のコマンドで確認できます (devicexinput list で確認できるデバイス名あるいはデバイス ID に置き換えてください):

$ xinput get-button-map device

ボタン番号の順番は自由に変更することができます。例:

$ xinput set-button-map device 1 6 3 4 5 0 7

上記の例では、6番目のボタンを中ボタンにマッピングして、元々の中ボタンは0を指定して無効にしています。Wayland でも上記の設定は使えますが、device の番号とボタンのマップの両方が異なっているので注意してください。Xorg と Wayland で設定を直接相互利用することはできません。

ヒント: (xorg-xev パッケージに含まれている) xev を使うことで実際のボタンがどの ID にマッピングされているか確認できます。

デバイスによっては同じデバイス名で複数回、それぞれ異なる量のボタンが存在します。以下は xinitrc で Logitech Revolution MX マウスのボタンマッピングを変更する例です:

~/.xinitrc
...
for i in $(xinput list | grep "Logitech USB Receiver" | perl -n -e'/id=(\d+)/ && print "$1\n"')
	do if xinput get-button-map "$i" 2>/dev/null| grep -q 20; then
		xinput set-button-map "$i" 1 17 3 4 5 8 7 6 9 10 11 12 13 14 15 16 2 18 19 20
	fi
done
...

タッチパッド感度の変更

libinput がタッチが押されたときと離されたときを認識する適切な閾値を探す方法は上流ドキュメント [2] に書かれています。

タッチパッドのカスタム圧力値は一時的なローカルデバイスクアークで設定できます。[3] を見てください。

ノート: クアークは内部的な API で将来的に libinput で動作するか保証がありません。バージョン 1.11 と 1.12 の間から、udev ルール [4].quirk ファイルによって置き換えられました [5]

タッチパッドの無効化

タッチパッドを無効化するには、まず xinput list で名前を確認してから xinput disable name で無効化してください。

ノート:
  • ID 番号を使うよりも名前を使うほうが安定して無効化できます。デバイスの番号は変わる可能性があります。
  • 名前に空白が含まれる場合はクォートで囲ってください。

設定を永続化する場合は自動起動を見てください。

ジェスチャー

libinput ドライバーにはスワイプやピンチなどの高度なマルチタッチイベントを処理できるロジックが含まれていますが [6]デスクトップ環境ウィンドウマネージャがまだそれらのアクションを実装していない可能性があります。

libinput-gestures

EWMH (wm-spec を参照) 互換のウィンドウマネージャでは、代わりに libinput-gestures ユーティリティを使うことができます。このプログラムは libinput のジェスチャーを (libinput debug-events を使って) タッチパッドから読み込んで設定ファイルにあわせてジェスチャーをマッピングします。libinput に組み込まれている認識機能の範囲内で柔軟な設定が可能です。

libinput-gestures を使用するには、libinput-gesturesAUR パッケージをインストールしてください。デフォルト設定では、スワイプやピンチのジェスチャーが使えます。また、個人設定ファイルで自由にジェスチャーを定義できます。詳しくは README を見てください。

fusuma

FusumaRuby で書かれたマルチタッチジェスチャー認識ツールで、libinput-gestures の代替として使えます。

fusumaRuby gem をインストールしてください:

$ gem install fusuma

また、AUR には旧バージョンが存在します: ruby-fusumaAUR

それから ~/.config/fusuma/config.yml で以下のように設定:

~/.config/fusuma/config.yml
swipe:
  3: 
    left: 
      shortcut: 'alt+Right'
    right: 
      shortcut: 'alt+Left'
    up: 
      shortcut: 'ctrl+shift+plus'
    down: 
      shortcut: 'ctrl+minus'
pinch:
  in:
    shortcut: 'ctrl+shift+plus'
  out:
    shortcut: 'ctrl+minus'

threshold:
  swipe: 0.5
  pinch: 0.2

interval:
  swipe: 0.2
  pinch: 0.2

スワイプの閾値を低くするとページをスワイプしすぎてしまいます。

上記の設定は3本指のスワイプを使います。

GnomeExtendedGestures

GNOME との統合が必要な場合、GnomeExtendedGestures が存在します (gnome-shell-extension-extended-gestures-gitAUR)。3本指の縦・横のジェスチャーを設定して gnome-shell のアクションを実行できます (アプリケーションの切り替えなど)。

トラブルシューティング

まず、libinput debug-events を実行して問題をデバッグできないか確認してください。利用可能なオプションは libinput-debug-events(1) を見てください。

入力デバイスによってはカーネルのサポートが必要なことがありますが、それを確認するには evemu パッケージに含まれている evemu-describe を使います:

software supported input trackpad driver の出力を a supported trackpad と比較して下さい (ABS_, ABS_MT, REL_X/Y)。クリックパッドの場合 INPUT_PROP_BUTTONPAD プロパティも設定されます。

タッチパッドが GNOME で動作しない

以下のコマンドを実行してタッチパッドのイベントを GNOME デスクトップに送信してください:

$ gsettings set org.gnome.desktop.peripherals.touchpad send-events enabled

さらに、GNOME によって特定の設定が上書きされ、タップがオフになったり強制的にナチュラルスクロールになることがあります。そのような場合、GNOME の gsettings コマンドラインツールを使うか、適当なグラフィカルフロントエンドを使って設定を行ってください。例えば、タップを有効にしてナチュラルスクロールを無効化したい場合、以下のようにタッチパッドの設定値を変更します:

$ gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click true
$ gsettings set org.gnome.desktop.peripherals.touchpad natural-scroll false

KDE の Touchpad KCM におけるタッチパッドの設定が反映されない

KDE のタッチパッド設定モジュールは Xorg における libinput をサポートしていません。Plasma セッションが起動するとデフォルトオプションが上書きされるため /etc/X11/xorg.conf.d/ のタッチパッドデバイスに関する Xorg 設定セクションも機能しません。完全なサポートは得られませんが、いくつか解決方法があります:

  • kcm-pointing-devices-gitAUR をインストールする。ただし、再起動するとオプションが元に戻ります。
  • xinput set-prop で手動でオプションを設定する。Plasma の起動時にオプションを適用するために ~/.config/autostart-scripts/ の bash スクリプトにコマンドを保存する必要があります。

参照