Linux Mint MATE 20.1 の xkeysnal で Windows の AutoHotKey と同じ設定をする
Linux Mint を利用しているときに、Windows で利用している AutoHotKey で行っていたように、カーソルキー移動や Backspace キーをホームポジションを崩さすに操作したくなってきました。
Linux で AutoHotKey と同じようなことができないかと調べていると、xkeysnail という python のソフトを利用すれば実現できることが色々と紹介されていましたので、私も試してみて Windows の AutoHotKey で設定しているキー操作と同じことが実現できましたので、設定手順をまとめました。
Windows の AutoHotKey で設定している内容
基本として「無変換」キー+ ○○ といったキーバインドを設定しています。
JIS 配列のキーボードを利用しているとこの「無変換」キーがいい位置にあり気に入っています。
- カーソルキーを 無変換 + HKJL で操作する
- Home、End を無変換 + AE で操作する
- Enter を無変換 + ; で操作する
- Backspace、Delete を 無変換 + NM で操作する
- 単語単位のカーソル移動を 無変換 + UI で操作する
- カーソル位置から行末まで切り取りを 無変換 + O で操作する
Windows の AutoHotKey を利用した設定方法については以下の記事で紹介しています。
xkeysnail のインストール
xkeysnail は python で開発されたツールですので、以下のコマンドでインストールします。
Linux Mint には最初から python3 がインストールされていましたので、pip および xkeysnail をイントールします。
sudo apt install python3-pip
sudo pip3 install xkeysnail
キー設定ファイル(config.py)を作成する
キー設定ファイル(config.py)は以下のパスに作成します。
/home/[ユーザ名]/.config/xkeysnail/config.py
config.py の設定内容
import re
from xkeysnail.transform import *
# 単発押しと組み合わせ押しの設定
define_multipurpose_modmap({
# 無変換単押しで無変換、組み合わせると右コマンドキー(物理キーとしてはWindowsには無い) に設定する
Key.MUHENKAN: [Key.MUHENKAN, Key.RIGHT_META]
})
define_keymap(None, {
# 一連のホームポジション維持カーソル移動
K("RSuper-a"): K("Home"),
K("RSuper-e"): K("End"),
K("RSuper-k"): K("Up"),
K("RSuper-h"): K("Left"),
K("RSuper-l"): K("Right"),
K("RSuper-j"): K("Down"),
K("RSuper-u"): K("C-Left"),
K("RSuper-i"): K("C-Right"),
K("RSuper-Semicolon"): K("Enter"),
# 一連のホームポジション維持カーソル移動(+Shift)
K("Shift-RSuper-a"): K("Shift-Home"),
K("Shift-RSuper-e"): K("Shift-End"),
K("Shift-RSuper-k"): K("Shift-Up"),
K("Shift-RSuper-h"): K("Shift-Left"),
K("Shift-RSuper-l"): K("Shift-Right"),
K("Shift-RSuper-j"): K("Shift-Down"),
K("Shift-RSuper-u"): K("Shift-C-Left"),
K("Shift-RSuper-i"): K("Shift-C-Right"),
# カーソル位置から行末まで削除
K("RSuper-o"): [K("Shift-End"), K("Delete")],
# backspace delete
K("RSuper-n"): K("Backspace"),
K("RSuper-m"): K("Delete")
})
xkeysnail をサービス化し自動起動設定する
xkeysnail の実行方法を調べると xkeysnail の GitHub のページでは以下のように sudo で実行しています。
https://github.com/mooz/xkeysnail
sudo xkeysnail config.py
色々な方法で自動起動化がありましたが、一般ユーザで起動できるサービス化する以下記事が一番わかりやすかったため、ほとんどそのまま参考にさせていただきました。
https://ohmyenter.com/how-to-install-and-autostart-xkeysnail/
input / uinput グループに自分のユーザを追加
uinput グループを追加
念の為 uinput グループが存在していないこと確認する
何も表示されなければ OK
$ getent group uinput
uinput グループ追加
$ sudo groupadd uinput
input / uinput グループにユーザを追加
$ sudo usermod -aG input,uinput [ユーザ名]
追加されていることを確認する
$ getent group input
$ getent group uinput
rules ファイル作成
70-input.rules ファイル作成
以下のパスにファイル作成
/etc/udev/rules.d/70-input.rules
ファイルの内容
KERNEL=="event*", NAME="input/%k", MODE="660", GROUP="input"
70-uinput.rules ファイル作成
以下のパスにファイル作成
/etc/udev/rules.d/70-uinput.rules
ファイルの内容
KERNEL=="uinput", GROUP="uinput"
サービスファイル(xkeysnail.service)ファイル作成
以下のパスにファイルを作成
~/.config/systemd/user/xkeysnail.service
xkeysnail.service ファイルの内容
[Unit]
Description=xkeysnail
[Service]
KillMode=process
ExecStartPre=/usr/bin/xhost +SI:localuser:root
ExecStart=/usr/local/bin/xkeysnail /home/[ユーザ名]/.config/xkeysnail/config.py
Type=simple
Restart=always
RestartSec=10s
Environment=DISPLAY=:0
[Install]
WantedBy=default.target
サービス登録
systemctl コマンドで xkeysnail をサービス登録する
$ systemctl --user enable xkeysnail
サービスを開始
$ systemctl --user start xkeysnail
ステータスを確認する
config.py の記載間違いなどがあれば、エラーとあっているので config.py の設定内容を見直しましょう。
$ systemctl --user status xkeysnail
PC 再起動
PC 再起動後に xkeysnail が起動し、設定したキーバインドが利用できれば成功です。