LoginSignup
2
2

LinuxをトラックパッドジェスチャでMacみたいに使おう (KDE5 + libinput-gestures)

Last updated at Posted at 2023-06-19

背景

10年前までMacを使っていて、トラックパッドをスワイプしてウィンドウ一覧を出すExposeや、仮想デスクトップをスライドで切り替えるSpacesなどがとてつもなく便利でした(老人の感想)。
LinuxでもKDE5環境でなら近い使用感にできたので、細かい点を忘れないようメモしておきます1。Qiitaにはすでに他の方の記事もたくさんあるので、そちらもご参考ください。

[2024/03/09] 新たにKDE6がリリースされていますが、組み込みのタッチパッドジェスチャと以下の操作が衝突します。しかも組み込み機能の無効化や設定パネルがないようなので2、ジェスチャがないと生きていけない人はまだ6/Waylandにアップデートしないことを私としては推奨します。(参考)

検証環境

  • ディストリビューションはArch Linux (up to date)
  • PCはVAIO SX12 (VJS124)、トラックパッドはELAN製
  • LinuxでXorgによるGUIが立ち上がっていること(Waylandはこの記事の対象外です)。
  • KDE5 (Plasma) をデスクトップ環境に使用している、あるいは乗り換えに抵抗がないこと
  • libinputをトラックパッドのドライバに使っていること (この確認は以下の記事が参考になります)3

インストール

まず必要なパッケージを導入します。以下の三点を入れてください。

  • libinput-gestures: ジェスチャを受け取る本体
  • dex: KDEのログイン時、上記を自動起動するために必要
  • xte (パッケージは xautomation): ジェスチャを実行した際にキー入力をするのに必要

Archではlibinput-gesturesはAURレポジトリに含まれておりpacmanでは導入できません。例えばyayを使って上記すべてを以下のように導入できます。
$ yay -S libinput-gestures dex xautomation

ジェスチャを受け取る側 (libinput-gestures) の設定

ジェスチャを使用するユーザはinputグループに所属している必要があります。
# gpassswd -a $USER inputなどでユーザをグループに追加し、再起動してください。

設定ファイルは/etc/libinput-gestures.confになります。手元のアサイン例を示します。

# 4本指で上にスワイプしてウィンドウの一覧、下にスワイプして仮想デスクトップの一覧を表示
gesture swipe up   4  xte "keydown Control_L" "usleep 50" "key F10" "keyup Control_L"
gesture swipe down 4  xte "keydown Super_L" "usleep 50" "key F8" "keyup Super_L"

# 3本指で左右にスワイプしてブラウザの戻る・進む
gesture swipe left  3  xte "keydown Alt_L" "usleep 50" "key Left" "keyup Alt_L"
gesture swipe right 3  xte "keydown Alt_L" "usleep 50" "key Right" "keyup Alt_L"

# 4本指で左右にスワイプして、仮想デスクトップの前後移動(KDE側の設定が必要)
# いわゆる「ナチュラルスクロール」になっているので注意
gesture swipe left  4  xte "keydown Alt_L" "keydown Control_L" "usleep 50" "key Right" "usleep 50" "keyup Control_L" "keyup Alt_L"
gesture swipe right 4  xte "keydown Alt_L" "keydown Control_L" "usleep 50" "key Left" "usleep 50" "keyup Control_L" "keyup Alt_L"

# 3本指で上下にスワイプして音量調節
gesture swipe up   3  qdbus org.kde.kglobalaccel /component/kmix org.kde.kglobalaccel.Component.invokeShortcut 'increase_volume'
gesture swipe down 3  qdbus org.kde.kglobalaccel /component/kmix org.kde.kglobalaccel.Component.invokeShortcut 'decrease_volume'

# 4本指を閉じてMission Control的な仮想デスクトップの一覧表示、開いてデスクトップを表示
# 本当はMacと同じく5本にしたかったが、認識しなかった…
gesture pinch in   4  xte "keydown Super_L" "usleep 50" "key w" "keyup Super_L"
gesture pinch out  4  xte "keydown Super_L" "usleep 50" "key d" "keyup Super_L"

このファイルで設定可能なジェスチャの種類は以下を参照ください。
https://github.com/bulletmark/libinput-gestures#configuration

xteは引数に指定したキーやマウス操作を左から順に実行していくコマンドです4usleep 数字とするとマイクロ秒単位で待機します5。使えるキーなどは$ man xteでマニュアルをご覧ください。

xteで修飾キーをkeydownで押した後は必ずkeyupで引き上げてください。引き上げないと押されっぱなしになり、キーボード操作がほぼ不可能になります(二敗)。

KDE側の設定

  1. KDE システム設定を開く。
  2. ワークスペースカテゴリのワークスペースの挙動 から 仮想デスクトップ を開き、適当にデスクトップを追加してください。
  3. ワークスペースカテゴリのショートカットからショートカットKwinを選択します。
  4. デスクトップ1に切り替えAlt + 1にアサインし、デスクトップ2から4も同様にアサインする。もっと使う人は適宜増やしてください。
  5. 次のデスクトップに切り替えCtrl + Alt + →前のデスクトップに切り替えCtrl + Alt + ← にアサイン

Firefoxユーザへ: デスクトップ間を移動する Alt + 数字 はFirefoxのタブの移動と衝突するので、困る場合はどちらかの修飾キーをCtrlに変えたりして対応してください6

Import Scheme機能から以下をインポートしても良いのかもしれませんが、動作は確認していないのでご注意ください。

[kwin][Global Shortcuts]
Switch to Desktop 1=Alt+1
Switch to Desktop 2=Alt+2
Switch to Desktop 3=Alt+3
Switch to Desktop 4=Alt+4
Switch to Next Desktop=Ctrl+Alt+Right
Switch to Previous Desktop=Ctrl+Alt+Left

動作テスト

  1. Alt + 数字キーで所定のデスクトップに移動できることを確認
  2. Ctrl + Alt + →および←でデスクトップ間をスライド移動できることを確認
  3. ターミナルで libinput-gestures-setup start を実行し、立ち上がることを確認 (libinput-gestures-setup statusで、動作状況が確認できます。)
  4. 上記で設定したトラックパッドジェスチャを実行し、動くことを確認
  5. 問題がなければ、libinput-gestures-setup autostart でスタートアップに登録する。

ハマった際は以下を確認してください。

  • 操作不能になった際は、おとなしく再起動しましょう。
  • どのジェスチャも実行できないときはxteが動作するかを確認してください。
  • 挙動が不安定なときはusleepの値を増やしてみるとショートカットとしての認識率が上がるかもしれません。
  • キー入力ツールとしてxteにこだわる必要はないのでxdotoolの利用も検討ください。

注意事項

結構快適なのであまりありませんが。

  • スリープした際の挙動が怪しい気がします。起こした後はlibinput-gestures-setup restartで再起動してください。
  • KDE側の問題ですが、「四本指で上」からの「四本指で下」ではうまく元の画面に戻ってくれません。ちょっとうっとうしいので対策を検討したい。

最後に

久しぶりに手足のようにトラックパッドが動いている気がする。好きなようにカスタマイズしてみなさんも楽しんでください。必要な操作を書き漏らしているようであればどうぞご指摘を。

  1. [2024/02/12] yayコマンドのパッケージ名が間違っていたので修正; [2024/03/09] KDE6に関する注意書きを追記; [2024/03/13] KDE6へのパッチ当てを追記

  2. どうしても無効化するにはKwinのソースを編集して再ビルドする必要があります。大変面倒なので推奨しませんが、ここに6.0.1向けのパッチを置いておきます。なおWaylandではlibinput-gesturesは動きますがxteが使えないので、変わりにydotoolを使いましょう。

  3. ちなみにArchでこの確認をするにはxorg-xinputの導入が必要です。

  4. この目的のツールではxdotoolも存在しますが、この環境では修飾キーをうまく押せずに失敗することが多々あったため、xteを使っています。

  5. キー入力の間で待たないと入力に失敗することがありました。この環境ではxkeysnailを併用しているのでその影響もありそうです。

  6. 個人的にはFirefox側をCtrlに修正するのが好きです。アドオン Ctrl+Number to switch tabs などが使えます。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2