追記 2020.3.23
/etc/modules-load.d
へ uinput をロードする設定を追記する必要があるのを失念していたため追記.
参考にした記事
- mooz/xkeysnail: Yet another keyboard remapping tool for X environment
- xkeysnailをsystemdでデーモン化 - Qiita
ExecStartPreを削らないとdebianでは動作しなかった.ということに気付くのに結構時間がかかったという話.
目標
ノートPCに入れた debian buster で xkeysnail を使って CAPS LOCK を 左Ctrl として使いたい.
手順
1. install xkeysnail
xkeysnail をインストールする.
python2 では importerror を吐くので,諦めて公式(mooz/xkeysnail: Yet another keyboard remapping tool for X environment)に従い python3 で導入する.
sudo apt install python3-pip
pip3 install -U
pip3 install xkeysnail
2. input/uinput を write mode で開けるよう設定
基本的には,この記事に従って設定する.
xkeysnailをsystemdでデーモン化 - Qiita
group を作って,自分を groupに所属させる.
sudo groupadd uinput
sudo gpasswd -a hadacchi input
sudo gpasswd -a hadacchi uinput
次に /dev/input/* や /dev/uinput の設定.
KERNEL=="event*", NAME="input/%k", MODE="660", GROUP="input"
KERNEL=="uinput", GROUP="uinput"
kernel moduleのロードを設定.
uinput
設定ファイルをコピーし,記事のコマンドでは,やはりうまいくかないので再起動する.
sudo cp input.rules uinput.rules /etc/udev/rules.d/
sudo reboot
3. xkeysnailの設定
今回はCAPS LOCKを左Ctrlに変換するだけなので,マッピングの設定はここまで減らせる.
from xkeysnail.transform import *
define_modmap({
Key.CAPSLOCK: Key.LEFT_CTRL
})
次にxkeysnailを自動起動させる設定を行なう.
ここが一番ハマった.
systemd の service ファイルはこう.
xhostにrootで接続するための設定は,今回の方法ではいらない.DISPLAY変数は,リモートアクセスする場合に必要となる可能性はあるけど,ノートPCなのでリモートアクセスの予定もないし,試していないのであしからず.
# 1. Copy this from ~/.config/systemd/user/xkeysnail.service
# 2. systemctl --user enable xkeysnail
[Unit]
Description=xkeysnail
[Service]
KillMode=process
ExecStart=/usr/local/bin/xkeysnail /home/hada/.xkeysnail/config.py
# ExecStartPre=/usr/bin/xhost +SI:localuser:root
# ↑input/uinputグループの権限で実行するのでrootでxhostに接続する必要なし.
# むしろ,こいつがエラーを引き起こす
Type=simple
Restart=always
# Update DISPLAY to be the same as `echo $DISPLAY` on your graphical terminal.
# Environment=DISPLAY=:0
# ↑sudoでxkeysnailを起動する時は,上のxhostのコマンドとセットで必要となるが,今回はいらない.
[Install]
WantedBy=default.target
xkeysnail.service を動作させる.
systemctl --user enable xkeysnail
CAPS LOCKでCtrlとして動作するか確認.
次にリブートして最初から動作するか確認.
完了.
hadacchiの設定
ノートPCで日本語キーボードのため変換キーとか無変換キーとか無駄なキーが多い.
今はこうなっている.
from xkeysnail.transform import *
define_modmap({
Key.CAPSLOCK: Key.LEFT_CTRL,
Key.MUHENKAN: Key.LEFT_ALT,
Key.HENKAN: Key.RIGHT_ALT,
Key.KATAKANAHIRAGANA: Key.RIGHT_ALT,
Key.LEFT_ALT: Key.LEFT_META,
})