libinput
関連記事
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
または
$ xinput set-prop 14 "libinput Click Method Enabled" 1 1
Xorg 設定ファイルを使う
オプションの永続的な設定については Xorg#.conf ファイルを使う を見て下さい。Logitech Marble Mouse#libinput を使うや下の#ボタンの再マッピングに設定例が載っています。
通常、入力デバイス用に別のドライバーを同時にインストールすることができます。デバイスのドライバーを 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
です。
基本的な設定は以下のようになります:
/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:
- コントロールセンターの 'Mouse & Touchpad' に基本的な設定 UI が存在します。GNOME#マウスとタッチパッドも参照。
- gnome-tweaks には他にもいくつか設定が存在します。
- 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本指のタップを左・右・中に設定するには TappingButtonMap
を lrm
に、左・中・右にするには 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 では貼り付けに使われています) の代わりに使いたいと思うかもしれません。現在のボタンマッピングは次のコマンドで確認できます (device は xinput 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 で設定を直接相互利用することはできません。
デバイスによっては同じデバイス名で複数回、それぞれ異なる量のボタンが存在します。以下は 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] を見てください。
タッチパッドの無効化
タッチパッドを無効化するには、まず xinput list
で名前を確認してから xinput disable name
で無効化してください。
設定を永続化する場合は自動起動を見てください。
ジェスチャー
libinput ドライバーにはスワイプやピンチなどの高度なマルチタッチイベントを処理できるロジックが含まれていますが [6]、デスクトップ環境やウィンドウマネージャがまだそれらのアクションを実装していない可能性があります。
libinput-gestures
EWMH (wm-spec を参照) 互換のウィンドウマネージャでは、代わりに libinput-gestures ユーティリティを使うことができます。このプログラムは libinput のジェスチャーを (libinput debug-events
を使って) タッチパッドから読み込んで設定ファイルにあわせてジェスチャーをマッピングします。libinput に組み込まれている認識機能の範囲内で柔軟な設定が可能です。
libinput-gestures を使用するには、libinput-gesturesAUR パッケージをインストールしてください。デフォルト設定では、スワイプやピンチのジェスチャーが使えます。また、個人設定ファイルで自由にジェスチャーを定義できます。詳しくは README を見てください。
fusuma
Fusuma は Ruby で書かれたマルチタッチジェスチャー認識ツールで、libinput-gestures の代替として使えます。
fusuma
の Ruby 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本指のスワイプを使います。
gebaar
Gebaar もジェスチャー認識ツールです。 Fusuma と違いピンチ (サポートは今後予定されています) やスワイプには対応していませんが、3/4指で上下左右にスワイプする以外に、Fusuma にはない斜めスワイプにも対応しています。
gebaar のフォークは Gebaar にあり、gebaar-libinput-gitAUR を使ってインストールすることができます。gebaar-libinput-gitAUR はピンチジェスチャーをサポートし、オリジナルの gebaar に機能が追加されています。このバージョンは現在活発に開発されており、オリジナルとは互換性のない設定変更が導入されていることに注意してください Gebaar
GnomeExtendedGestures
GNOME との統合が必要な場合、GnomeExtendedGestures が存在します (gnome-shell-extension-extended-gestures-gitAUR)。3本指の縦・横のジェスチャーを設定して gnome-shell のアクションを実行できます (アプリケーションの切り替えなど)。
Scroll with mouse by holding a button
There is a nice trick to optimize scrolling with a mouse or trackball by holding a mouse button (like right or middle button, or some other if the mouse has more buttons) and moving the mouse. Very useful in case your mouse does not have the mouse wheel (often the case with the trackballs). To do that one has to set ScrollMethod
to button
and specify the mouse button in the ScrollButton
option for the action. Here is an example for configuration to achieve that:
/etc/X11/xorg.conf.d/00-mouse.conf
Section "InputClass" Identifier "system-mouse" MatchIsPointer "on" Option "ScrollMethod" "button" Option "ScrollButton" "3" EndSection
Mouse wheel scrolling speed scaling
For some mouses, especially when using on a HiDPI desktop, the wheel scrolls too slow. A patch is submitted to libinput but it hasn't been accepted. There is a third-party xf86-input-libinput that incoperates this patch.
This patch introduces a new property libinput Scroll Distance Scale
to mouses, and you can set a scaling factor like
$ xinput --set-prop 'RAPOO Rapoo 2.4G Wireless Device' 'libinput Scroll Distance Scale' 2.5 2.5
where the RAPOO Rapoo 2.4G Wireless Device
is the name of your mouse device, listed in xinput --list
. 2.5 2.5
are the scaling factors, for x- and y-axis, respectively.
Alternatively, install libinput-multiplierAUR and restart Xorg, then enlarge y-axis scroll distance to 6 times by
$ echo 6 > /tmp/libinput_discrete_deltay_multiplier
Here is an example to modify the scaling factor upon focusing change
トラブルシューティング
まず、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
参照
- libinput Wayland ドキュメント
- FOSDEM 2015 - libinput - Hans de Goede によるプロジェクトの目標と計画についての説明
- Peter Hutterer のブログ - プロジェクトのハッカーによる libinput 関連の記事