libinput

提供: ArchWiki
2021年2月24日 (水) 22:32時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎xinput を使う: コマンド例を追加(英語版より))
ナビゲーションに移動 検索に移動

関連記事

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 と 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本指のスワイプを使います。

Gebaar

Gebaar is another gesture recognizer. Unlike Fusuma, it doesn't support pinching (support is planned in the future though) and threshholds, but in addition to swiping left, right, up and down with 3/4 fingers, it also supports diagonal swipes, which Fusuma does not.

There is a fork of gebaar at Gebaar which could be installed through gebaar-libinput-gitAUR which supports pinch gestures and adds additional features to original gebaar. Take in mind that this version is currently under active development and introduces config changes which makes it incompatable to original 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

参照