xremap の代わりに xkeysnail を使ってみる

前にこんな記事を書きましたが、

tmtms.hatenablog.com

たしかにCtrl-Nで新しいウィンドウが開くことはなくなったんですけど、Webページによっては Ctrl-N を押しても何も反応がないことがあります。原因は調べてません。まあウィンドウが開くことがないだけでもいいかと思ってたんですけど、xkeysnail というのがあると教えてもらいました。

qiita.com

Python製のツールみたいです。Pythonは全然わかんないんですけど、書かれてる通りにインストールしました。 pip3 は Ruby の gem コマンドみたいなもんなのかしら。

% sudo apt install python3-pip
% sudo pip3 install xkeysnail

example/config.py はたくさん設定されててなんかこわいので Ctrl-N と Ctrl-K だけにしてみました。Pythonわからないんでテキトーです。

# -*- mode: python, coding: utf-8 -*-

import re
from xkeysnail.transform import *

# [Global modemap] Change modifier keys as in xmodmap
define_modmap({
    Key.CAPSLOCK: Key.LEFT_CTRL
})

define_keymap(lambda wm_class: wm_class in ("Firefox"), {
    K("C-k"): [K("Shift-end"), K("C-x"), set_mark(False)],
    K("C-n"): with_mark(K("down")),
}, "Firefox")

/dev/uinput とかを使うので root で実行する必要があるんですけど、常に root で動かしとくのもアレなので、この記事を参考に専用ユーザーを作って見ました。

qiita.com

自動起動はこういうスクリプトを作って、デスクトップの設定の「自動起動するアプリ」で起動するようにしました。バックグラウンド実行するようにしとかないとログイン処理が止まってキー入力が一切効かなくなって電源切るしかなくなっちゃったので注意。

~/bin/xkeysnail.sh:

#!/bin/sh
exec >> $HOME/tmp/xkeysnal.log 2>&1
xhost +SI:localuser:xkeysnail
sudo -u xkeysnail DISPLAY=$DISPLAY /usr/local/bin/xkeysnail $HOME/etc/xkeysnail.conf

今のところ期待通りに動いているようです。