Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

SandSをLinuxでやってる人はxremapを導入してxmodmapとxcapeを捨ててください

自分は日本語入力効率化のためにずっと昔からSandSを利用している。SandSとはSpace and Shiftの略で、以下のようなキー入力のカスタマイズのこと。

  • スペースキーの役割をシフトキーにする
  • ただし、スペースキーを単発で押して離したときはスペースキーとして扱う

これが日本語入力システムのSKKと非常に相性が良いので、SKKerはだいたいこの拡張を使っている。

この記事では、SandSを実現するxremapを紹介し、インストール方法や他ツールとの比較を行います。

SandSを実現する方法

さて、このSandSはWindowsやLinux、macOSでは標準で提供されていないので、なんらかのユーティリティをインストールして実現するのが一般的な手法になる。

とりわけLinuxにおけるこの分野はxmodmapxcapeのコンビネーションが長らく使われてきたし、これを利用している人も多いことと思う。

wiki.archlinux.jp

github.com

blog.3qe.us

Waylandに対応していない

さて、LinuxデスクトップのディスプレイサーバにX11が使われていた時代は少しずつ終わりはじめ、Waylandの時代になりつつある。最近のディストリビューションでは Ubuntu 22.04 LTSからWaylandが採用されていたりと、新規にX11が使われることはあまり無さそう。

しかしながらxmodmapはもともとX11のツールだし、xcapeもX11のAPIを呼び出すツールなので、Waylandに切り替えるとぜんぜんこのへんのツールが動かなくなってしまうのだ。これでは困る。

xremapとは

そんな中、同僚がxremapというのを使っていると教えてくれた。これはキーカスタマイズツールで、キーボードの入力をいい感じに組替えるツールだ(CapslockをCtrlにしたりもできる)。

github.com

なんと嬉しいことに、xremapはWaylandにも対応しており、しかもアプリケーションごとの設定が可能とのこと。記述言語はRustで、ビルドするとバイナリが1つだけ出てくるというシンプルさも良い。設定をYAMLに書いて渡すだけ、という潔い仕様も魅力だ。

調べてみるとSandSにもちゃんと対応しているとのことなので、早速インストールしてみることにした。

xremapのビルド

xremapはRust製であり、cargoを使ってビルドする。(昔はRubyだったがRustで書き直されたようだ)

% git clone git@github.com:k0kubun/xremap.git
% cd xremap
% cargo build --release
# パスが通る場所に移動する
% cp target/release/xremap ~/bin/

ちなみにバイナリリリースもあるので、こちらを使っても良い。

github.com

設定と起動

xremapはYAMLで記述された設定ファイルを引数に渡すだけでフォアグラウンド起動し続けてくれる、というごくシンプルなセマンティクスで動作する。

SandSを設定するためのYAMLは以下の通り。これを適当な場所に保存しておく:

modmap:
  - name: SandS
    remap:
      Space: [Shift_L, Space]

入力デバイスを触る権限が必要なので、sudodoasなどで起動する。

% sudo xremap config.yaml

これだけでSandSが有効化される。非常にシンプルだし、一切つまづく場所はなかった。

systemdに設定する

毎回手動で起動するのは大変なので、xmodmapでやっていたときと同様にsystemdで自動起動するようにする。

設定ファイルを/etc/systemd/system/sands.serviceに作成する:

% sudo vim /etc/systemd/system/sands.service
[Unit]
Description=Sands service

[Service]
# restart periodically
Restart=always
ExecStart=/home/windymelt/bin/xremap /home/windymelt/src/github.com/windymelt/dotfiles/xremap.yaml
User=root
Group=root

[Install]
WantedBy=default.target

より厳密に権限を制御したい場合は、以下の記事を参考にしよう:

seppuku.club

次にSystemdの設定を反映させる:

% sudo systemctl daemon-reload

あとはサービスを起動するだけでSandSを利用可能になる。

% sudo systemctl start sands

これ以外にもxremapは様々な機能を持っているので気になる人は公式ページを調べてみると良いだろう。

他ツールとの比較

xremapは他のツールと比べても優位な点が多い良いソフトウェアだ。

  • xmodmap + xcapeの場合、同時に2プロセスを扱うので整合性が失われて奇妙な動作をするという問題点があったが、xremapは単一のプロセスが入力を監視し続けるので非常に扱いやすい。そしてWayland環境ではxmodmapなどは使えない。
  • xkeysnailという類似ソフトウェアがあるが、Pythonで記述されておりインストールに多少不安がある。また現在のところWayland環境では動作しない様子。設定をPythonで書かされるのも大変そうと思う。

Cons for xremap

今のところ自分は欠点に思っている部分はないが、firefoxでうまく動作しないケースがある?という話をネットで軽く見た。FFを使っている人は少し調べる必要があるかもしれない。

xremapはRustでいちど書き直されているので、古い記事は過去の実装の欠点を上げているケースがあるかもしれないことに注意。

k0kubun.hatenablog.com

また、このツールは管理者権限を要求する(udevなどを使って縮小することもできる)。

古代の格闘の歴史

blog.3qe.us

blog.3qe.us

blog.3qe.us

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?