xkeysnail:柔軟なカスタマイズが魅力の高機能キーマップツール

xkeysnail

xkeysnail(エックスキー・スネイル)についての概要と詳細

xkeysnailとは

xkeysnailは、LinuxのX11環境でキーボード入力を柔軟にリマッピングするためのPython製のキーカスタマイズツールです。Emacs風のキーバインド、キーの置き換え、アプリケーション別のキー設定などが可能で、WindowsのAutoHotkeyやmacOSのKarabiner-Elementsのような機能をLinuxで実現できます。

主な用途

  • Emacsライクなキーバインドを全アプリに適用
  • CapsLockや無変換キーをControlやEscに割り当て
  • アプリケーション別に異なるキー挙動を設定
  • キーの連打禁止や同時押しの条件付き割り当て

特徴

  • X11で動作(Wayland未対応)
  • Pythonで設定: 柔軟なロジックを記述できる
  • キーストローク単位で細かな制御
  • ユーザー空間で動作: root権限で実行が必要

インストール方法

  • 依存パッケージのインストール: sudo apt install python3-pip uinput x11-utils x11-xkb-utils xserver-xephyr
  • xkeysnailのインストール: pip3 install --user xkeysnail もしくはソースから: git clone https://github.com/mooz/xkeysnail.git cd xkeysnail sudo python3 setup.py install

権限設定(/dev/uinput)

/dev/uinputへのアクセスが必要です。以下のようにモジュールを有効にし、権限を設定します:

$ sudo modprobe uinput
$ sudo chmod 666 /dev/uinput

設定ファイルの記述

設定ファイル(例:xkeysnail_config.py)はPython形式で記述します。

基本的な設定例

from xkeysnail.transform import *

define_modmap({
    Key.CAPSLOCK: Key.LEFTCTRL,  # CapsLock を Ctrl に
})

define_keymap(re.compile(".*"), {
    K("C-b"): with_mark(K("left")),     # Ctrl-b で ←
    K("C-f"): with_mark(K("right")),    # Ctrl-f で →
    K("C-p"): with_mark(K("up")),       # Ctrl-p で ↑
    K("C-n"): with_mark(K("down")),     # Ctrl-n で ↓
})

アプリごとの切り替え例

define_keymap(re.compile("Firefox"), {
    K("C-y"): "C-v",  # Firefoxでは Ctrl-y を Ctrl-v に
})

起動方法

以下のコマンドで設定ファイルを指定して起動します:

$ sudo xkeysnail ~/.config/xkeysnail/config.py

常駐させたい場合は、デーモン化や systemd に登録するのがおすすめです。

systemdサービス登録(例)

[Unit]
Description=xkeysnail

[Service]
ExecStart=/usr/local/bin/xkeysnail /home/youruser/.config/xkeysnail/config.py
Restart=on-failure

[Install]
WantedBy=default.target

注意点

  • Waylandでは使えない(X11専用)
  • root権限で起動する必要がある
  • 入力方式エンジン(fcitxやibus)と干渉する場合あり
  • ターミナルでは動作するが、ChromeやFirefoxで一部キーバインドが効かないことがある

主な使用例まとめ

目的設定内容
CapsLock → CtrlKey.CAPSLOCK: Key.LEFTCTRL
Ctrl+Y → 貼り付けK("C-y"): "C-v"
Ctrl+HJKL → ←↓↑→K("C-h"): K("left") など
アプリごとに分岐re.compile("AppName")

まとめ

xkeysnailは、Linux上で高度なキーボードカスタマイズを行うための最も柔軟なツールの一つです。Pythonスクリプトによる記述により、細かい制御やアプリ別対応が可能です。X11専用ではあるものの、開発者・プログラマ・Emacsユーザーにとって非常に有用なツールです。