WSL上のGUIアプリケーションの設定いろいろ、SandSとかキーリピート加速とか

X410というX Window Serverがかなり便利。X WindowをVNCみたいにまるっと表示するのではなくて、アプリケーション毎にWindowを分けて表示してくれるモードがあり[1]、LinuxのGUIアプリを普通のWindowsアプリと同じように扱える。

Run Linux GUI app as normal windows application
ReactNative開発の図。左のDebuggerはLinux版

ただあくまでLinux上で動いているものなので、フォントとか日本語入力とか、キーボード周りの設定とかはもちろんLinux側で設定する必要がある。

日本語入力に関しては、それが必要なアプリは自分の使うアプリではいまのところEmacsしかないが、Emacsはそれ自体で日本語入力が可能なので特に設定する必要がない。

自分がEmacsのためにインストールしたのは以下:

# Emacsで使ってるメインフォント
yay -S otf-source-han-code-jp

# 英数日本語以外&絵文字用
yay -S noto-fonts noto-fonts-cjk noto-fonts-emoji

# skkserv
yay -S yaskkserv

# for SandS
yay -S xcape

skkservは使わずでローカルの辞書だけでもskkはうごくのだが、 yaskkservはここにも書いたけど、入力した単語がローカル辞書に見つからなかった場合にGoogle検索を利用してくれるので、新語や人名の入力に便利なので使っている。 一度入力したものは個人辞書のほうに追加されるので、毎回Googleにアクセスがいくわけではないので安心して良い。

またyaskkservはArchLinuxパッケージ付属のsystemd unitファイルはbindアドレスが指定されていなくフルオープンになってしまうので、

# ~/.config/systemd/user/yaskkserv.service
[Unit]
Description=Yet another SKK Japanese input method dictionary server

[Service]
ExecStart=/usr/bin/yaskkserv_hairy --no-daemonize --address 127.0.0.1 --google-japanese-input=notfound /usr/share/skk/SKK-JISYO.L.yaskkserv

[Install]
WantedBy=default.target

みたいな127.0.0.1にバインドするuser unitを自分で作って起動してる(WSL2の場合)。WSL1では使う時に毎回手動で起動しているw

あと個人的に必須といえるのがSandSおよびキーリピート加速だが、これはLinuxの時に使っていたものがそのまま使える。

# SandS
xmodmap -e 'keycode 255=space'
xmodmap -e 'keycode 65=Shift_L'
xcape -e '#65=space'

# キーリピート
xset r rate 200 100

みたいな感じ。

あと、Windows側のSKKFEPとかでSandSの設定をしていると、そのままだとX Windowアプリのほうのスペースの挙動がおかしくなるので、入力ソースを別のもの(Englishとか)にしてあげる必要がある。 その時に全体の入力ソースが変わってしまうとアプリ切り替えるたびにソースを変更しなおす必要があってかなり面倒なので、Windows側の設定でアプリ毎に別の入力ソースを使える設定にしておくと良い。

Input source setting

↑のチェックボックスのところ。

こんなかんじでいろいろやると、Windows上でも違和感なくLinuxアプリが使える。いろいろやっていることが(当たり前だが)完全にLinuxでやってたことと同じなので、Linuxデスクトップを使っている人は自然に使えるはず。

あとやっぱウィンドウマネージャさえなんとかなればな〜〜という感じがいなめない。bug.nにはだいぶなれてサクサクつかえるようになってきたものの、やはりawesomeとちがって、

  • Emacs + Chrome
  • Emacs + Terminal
  • Terminal + Chrome
  • Terminal + Emacs

みたいな組み合せを瞬時に変えられないのがめんどくさい。いや、できることはできるのだが、そのためにはそのように設定したwindow(tag)を作っておく必要がある。 awesomeの場合はTerminalをtag0で、Emacsをtag1で、Chromeをtag2で出すようにしておいて、side-by-side表示したいときにはtag0&1を表示する、みたいにtagをくみあわせて画面をつくれるのが良いのだ。

ここさえなんとかなればWindows上でもかなり快適にすごせそうなので、がんばって自作してみるのも手かもなぁと考えはじめている。

あとは、ArchWSL/ArchWSL2の作者には足を向けて寝られない。どちらもとてもよくカスタマイズされていて、Archをこういう環境[2]にいれて使うときにハマるポイントがほぼつぶされていて、とても快適に使える。ありがたい。