libinput

提供: ArchWiki
2024年8月14日 (水) 10:21時点におけるShota (トーク | 投稿記録)による版 (→‎Inertial scrolling does not work in KDE: を訳出)
ナビゲーションに移動 検索に移動

関連記事

libinput プロジェクトより:

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

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

インストール

XorgWayland をインストールしている場合、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 設定ファイルは存在しません。設定できるオプションは使用しているデスクトップ環境のサポート状況 (#グラフィカルツールを参照)、あるいはデスクトップ環境非依存の udev ルールによって異なります。あなたのデスクトップ環境がまだサポートしていないオプション (例えば GNOME におけるタッチパッドスクロースの速度) を設定したい場合は、libinput-config-gitAUR が使えるかもしれません。サポートされているオプションは libinput-config README にまとめられています。

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

Xorg の 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 を使うや下の#ボタンの再マッピングに設定例が載っています。

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

ヒント:
  • libinput と synaptics を同時にインストールしてデフォルト設定を使っている場合 (/etc/X11/xorg.conf.d に両方のファイルが存在しない場合)、デフォルトのインストールディレクトリにおいて synaptics の設定ファイルが 70- と大きい番号で始まる為 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

単体の設定ファイルで好きな数だけセクションを定義することができます。xorg.conf(5) § INPUTCLASS_SECTION にあるフィルターを使ってデバイスをフィルターできます。例えば、

  • MatchIsPointer "on" (トラックポイント)
  • MatchIsKeyboard "on"
  • MatchIsTouchpad "on"
  • MatchIsTouchscreen "on"

入力デバイスは libinput(4) § CONFIGURATOIN_DETAILS を見ながら設定できます。 一般的な設定オプションは以下の通りです:

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

デバイスによっては上記の一部オプションが使えないこともあり、適用するには X を再起動する必要があったりするので注意してください。


グラフィカルツール

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

  • GNOME:
  • Cinnamon:
    • GNOME UI と同じように設定することができます。
  • MATE:
    • 設定パネルからマウスのオプションが選べます。mate-mouse-properties からも設定できます。
  • KDE Plasma 5:
    • キーボード・マウス・コントローラーデバイスはシステム設定から設定できます。
  • Xfce:
    • xfce4-settings にあるマウスやタッチパッドのサブメニューから設定できます。

ヒントとテクニック

ボタンの再マッピング

例としてタッチパッドの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]

デバイスの無効化

環境変数を使う

環境変数 LIBINPUT_IGNORE_DEVICE を使って指定のデバイスの初期化を避ける事ができます [6]。次のような udev ルールを使って設定するのが最適です:

/etc/udev/rules.d/99-libinput-ignore.rules
ACTION=="add|change", device_delineation, ENV{LIBINPUT_IGNORE_DEVICE}="1"

device_delineation によってデバイスを指定します。例えば ibinput で全ての USB デバイスを無視させるには lsusb から取得した ID vendor_idproduct_id を使って SUBSYSTEMS=="usb", ATTRS{idVendor}=="vendor_id", ATTRS{idProduct}=="product_id" とします。

一度ファイルを用意したら、udev は自動的に設定の変更を反映するので (Udev#新しいルールをロードするを参照)、デバイスを再接続するだけで反映されます。

xinput を使う

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

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

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

有効化・無効化をトグルするには [7] のようなスクリプトを書いてください。

ジェスチャー

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

libinput-gestures

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

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

Touchegg を使っている場合は、干渉を避ける為に libinput-gesturesAUR はアンインストールしてください[9]

fusuma

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

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

$ gem install fusuma

あるいは、AUR バージョンが存在します: ruby-fusumaAUR

fusuma Ruby gem 以外にも、fusuma-plugin-sendkey Ruby gem あるいは、xdotool (X 用) か ydotool (Wayland, X11 など汎用) をインストールする必要があります。更なる代替は こちらにリストされています。

ヒント: fusuma-plugin-sendkey Ruby gemは X と Wayland 両方をサポートしています。

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

~/.config/fusuma/config.yml
swipe:
  3: 
    left: 
      sendkey: 'LEFTALT+RIGHT'
    right: 
      sendkey: 'LEFTALT+LEFT'
    up: 
      sendkey: 'LEFTALT+LEFTSHIFT+TAB'
    down: 
      sendkey: 'LEFTALT+TAB'
pinch:
  in:
    sendkey: 'LEFTALT+LEFTSHIFT+TAB'
  out:
    sendkey: 'LEFTALT+TAB'

threshold:
  swipe: 0.5
  pinch: 0.2

interval:
  swipe: 0.2
  pinch: 0.2

あるいは xdotool では次のようにします:

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

threshold:
  swipe: 0.5
  pinch: 0.2

interval:
  swipe: 0.2
  pinch: 0.2

ydotoolxdotool と同様です。

スワイプの閾値を低くするとページをスワイプしすぎるので重要です。

上記の設定は3本指のスワイプを使います。2本指のスワイプはサポートされていません [10]

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 のアクションを実行できます (アプリケーションの切り替えなど)。

ボタンを押したままマウスでスクロールする

マウスボタン(マウスにボタンがある場合は、右ボタンや中央ボタンなど)を押したままマウスを動かすことで、マウスやトラックボールでのスクロールを最適化する良い方法があります。マウスにマウスホイールがない場合 (トラックボールの場合が多い) に非常に便利です。そのためには、ScrollMethodbutton に設定し、アクションの ScrollButton オプションをマウスボタンを指定する必要があります。これを実現するための設定例を次に示します。

/etc/X11/xorg.conf.d/00-mouse.conf
Section "InputClass"
    Identifier "system-mouse"
    MatchIsPointer "on"
    Option "ScrollMethod" "button"
    Option "ScrollButton" "3"
EndSection

マウスホイールのスクロール速度の調整

マウスによっては、特に HiDPI デスクトップで使用する場合、ホイールのスクロールが遅すぎることがあります。patch が libinput にサブミットされましたが、受け付けられませんでした。このパッチにはサードパーティの xf86-input-libinput が組み込まれています。

このパッチでは、マウスに新しいプロパティ libinput Scroll Distance Scale が導入され、次のようなスケーリング係数を設定できます。

$ xinput --set-prop 'device_name' 'libinput Scroll Distance Scale' 2.5 2.5

ここで、device_name は、xinput --list にリストされているマウスデバイスの名前です。2.5 2.5 は、それぞれx軸とy軸の倍率です。

または、libinput-multiplierAUR をインストールして Xorg を再起動し、y軸のスクロール距離を6倍に拡大します。

$echo 6>/tmp/libinput_discrete_deltay_multiplier

フォーカス変更時に倍率を変更する場合 こちらを参照

入力時のタッチパッドの有効化

デフォルトでは、libinput はタイピング中にタッチパッドを無効化します。Inkscape におけるマウス入力付きキーバインディング動作など、いくつかのソフトウェアにおいて問題になります。次のように /etc/X11/xorg.conf.d/30-touchpad.confInputClass セクションを加える事でこの無効化動作を避ける事ができます:

Section "InputClass"
    ...
    Option "DisableWhileTyping" "0"
EndSection

トラブルシューティング

まず、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 で使えない

慣性スクロールの機能は現在実装されていません (KDE bug 456383)。Chromium-ベースのブラウザ上については、SmoothScroll の拡張機能をインストールする事で使えるようになります。

Keys stuck after entering tablet mode

On some Tablet PCs (notably Lenovo Yogas), holding a keyboard key while entering the tablet mode can cause the key be stuck until the tablet mode is disabled. It is sometimes possible to fix this behavior by modifying libinput quirks files. See Issue 914.

For example, find the name of the keyboard device:

# libinput list-devices
...
Device:           AT Translated Set 2 keyboard
Kernel:           /dev/input/event3
Capabilities:     keyboard 
...

Then, create an override file:

/etc/libinput/local-overrides.quirks
[Lenovo Thinkpad Yoga]
MatchName=AT Translated Set 2 keyboard
ModelTabletModeNoSuspend=0

ModelTabletModeNoSuspendテンプレート:=0 disables behavior that causes the bug. Consult Device quirks for information about configuration format and Match directives that select the device to configure. It is often possible to create an override file based on an existing quirks entry for your particular device. Default quirks files can be found in /usr/share/libinput/.

参照