背景
10年前までMacを使っていて、トラックパッドをスワイプしてウィンドウ一覧を出すExposeや、仮想デスクトップをスライドで切り替えるSpacesなどがとてつもなく便利でした(老人の感想)。
LinuxでもKDE5環境でなら近い使用感にできたので、細かい点を忘れないようメモしておきます1。Qiitaにはすでに他の方の記事もたくさんあるので、そちらもご参考ください。
検証環境
- ディストリビューションは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
で修飾キーをkeydown
で押した後は必ずkeyup
で引き上げてください。引き上げないと押されっぱなしになり、キーボード操作がほぼ不可能になります(二敗)。
KDE側の設定
-
KDE システム設定
を開く。 -
ワークスペース
カテゴリのワークスペースの挙動
から仮想デスクトップ
を開き、適当にデスクトップを追加してください。 -
ワークスペース
カテゴリのショートカット
からショートカット
→Kwin
を選択します。 -
デスクトップ1に切り替え
をAlt + 1
にアサインし、デスクトップ2から4も同様にアサインする。もっと使う人は適宜増やしてください。 -
次のデスクトップに切り替え
を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
動作テスト
-
Alt + 数字キー
で所定のデスクトップに移動できることを確認 -
Ctrl + Alt + →および←
でデスクトップ間をスライド移動できることを確認 - ターミナルで
libinput-gestures-setup start
を実行し、立ち上がることを確認 (libinput-gestures-setup status
で、動作状況が確認できます。) - 上記で設定したトラックパッドジェスチャを実行し、動くことを確認
- 問題がなければ、
libinput-gestures-setup autostart
でスタートアップに登録する。
ハマった際は以下を確認してください。
- 操作不能になった際は、おとなしく再起動しましょう。
- どのジェスチャも実行できないときは
xte
が動作するかを確認してください。 - 挙動が不安定なときは
usleep
の値を増やしてみるとショートカットとしての認識率が上がるかもしれません。 - キー入力ツールとして
xte
にこだわる必要はないのでxdotool
の利用も検討ください。
注意事項
結構快適なのであまりありませんが。
- スリープした際の挙動が怪しい気がします。起こした後は
libinput-gestures-setup restart
で再起動してください。 - KDE側の問題ですが、「四本指で上」からの「四本指で下」ではうまく元の画面に戻ってくれません。ちょっとうっとうしいので対策を検討したい。
最後に
久しぶりに手足のようにトラックパッドが動いている気がする。好きなようにカスタマイズしてみなさんも楽しんでください。必要な操作を書き漏らしているようであればどうぞご指摘を。
-
[2024/02/12] yayコマンドのパッケージ名が間違っていたので修正; [2024/03/09] KDE6に関する注意書きを追記; [2024/03/13] KDE6へのパッチ当てを追記 ↩
-
どうしても無効化するにはKwinのソースを編集して再ビルドする必要があります。大変面倒なので推奨しませんが、ここに6.0.1向けのパッチを置いておきます。なおWaylandでは
libinput-gestures
は動きますがxte
が使えないので、変わりにydotool
を使いましょう。 ↩ -
ちなみにArchでこの確認をするには
xorg-xinput
の導入が必要です。 ↩ -
この目的のツールでは
xdotool
も存在しますが、この環境では修飾キーをうまく押せずに失敗することが多々あったため、xte
を使っています。 ↩ -
キー入力の間で待たないと入力に失敗することがありました。この環境では
xkeysnail
を併用しているのでその影響もありそうです。 ↩ -
個人的にはFirefox側をCtrlに修正するのが好きです。アドオン Ctrl+Number to switch tabs などが使えます。 ↩