切腹のイラスト

xremapでSandS

{
  date: "",
  update: "",
  category: "/unix-like",
  tags: ["キーボード", "SandS"]
}

ちょっと前にSandSという記事を書いたが,Linux系のシステム用にもうちょっと良い感じの方法を見つけたのでメモしておく。

𝑋𝑟𝑒𝑚𝑎𝑝 ⌨️ - https://github.com/k0kubun/xremap

まずはxremapを手元のPCにインストールするところから。 GentooはGURUgui-apps/xremapを使うとよい。 ArchならAUR。 それ以外はREADMEを参照されたい。

現状,xremapにはウィンドウ関連の情報源を指定する排他的なビルドオプションがある。 GURUではUSEフラグでこれを管理しているが,AURではオプションごとに別名のパッケージを用意しているようだ。

また,xremapではYAMLが設定を記述する!

modmap:
  - remap:
      CapsLock: Ctrl_L
  - name: SandS
    remap:
      Space: { held: Shift_L, alone: Space, free_hold: true }
    application:
      not: '/^Minecraft 1/'

上記の設定によりSandSを実現できる。 適当なファイルに保存した後,下記のコマンドにより起動する。

xremap --watch=config,device /path/to/config.yml

権限で怒られたときは,自身をinputグループに追加した後,以下のようにする。

echo uinput | sudo tee /etc/modules-load.d/uinput.conf
echo 'KERNEL=="uinput", GROUP="input", TAG+="uaccess"' | sudo tee /etc/udev/rules.d/99-input.rules
sudo modprobe uinput

これだけ。

あとはお好みで自動起動を設定する。 ここではOpenRC (User Services)を用いる場合の例を示す。

~/.config/rc/init.d/xremap

#!/sbin/openrc-run

command="/usr/bin/xremap"
command_args="--watch=device,config ~/.config/xremap.yml"
command_background="true"
pidfile="${XDG_RUNTIME_DIR}/${RC_SVCNAME}.pid"

こんな感じにRCスクリプトを書いて,以下のコマンドで起動する。

rc-update -U add xremap
rc-service -U xremap start

総括

それでは良いSandSライフを!