WSLを使ってWindowsでmikutterを動かす。
愛機MacBook Air(Mid 2012)の調子が悪くなったので、メインマシンを買い置きしていたThinkpad X1 Carbon(2016)に変更しました。*1
画面が広い!重量も軽い!Windows10も結構使いやすくなってきてる!と概ね満足だったのですが、唯一の懸念事項がmikutter。
mikutterはバージョンアップを重ねるごとにWindowsで動かすのが難しくなってきてるんで、これからWindowsで暮らしていく上で、伴侶であるみくったーちゃんと添い遂げることは出来るのかしらと。
そういえば、最近流行りのWSLでmikutterの動作報告があったなぁ。試してみるかと設定してみました。
結論としてはすごくいい感じ。macOS(X11版)と同等の使い勝手が得られました。
WSLのインストール
ここはいろんなサイトで手順が公開されているので端折ります。
(1)コルタナたんに「更新」と伝え「更新プログラムのチェック」を起動する。
「開発者向け」にある「開発者モード」を有効にする
(2)コルタナたんに「コントロール」と伝え「コントロールパネル」を起動する。
「プログラムと機能」の「Windowsの機能の有効化または無効化」から
「Windows Subsystem for Linux(Beta)」をインストールする。
(3)コルタナたんに「bash」と伝え「Bash on Windows on Windows」を起動する。
(Ubuntuのインストールが始まる。)
コルタナたんは仕事のできる子。
(4)bashが起動したら、環境を最新化しておく。
sudo apt-get update sudo apt-get dist-upgrade
mikutterのインストール
今回は手抜きでUbuntuのリポジトリにいるmikutterを使います。腕に覚えがある人はgitで最新版を取ってきてインストールしてください。なんだかんだでUbuntuなので、ハマり要素はかなり少ないと思います。
sudo apt-get install mikutter
日本語フォントのインストール
こちらを参考にしてGoogle謹製のnotoフォントをインストールします。
ぽぬぽぬ: Bash on Ubuntu on Windows + XサーバでLXDEを起動
ついでに絵文字(ttf-ancient-fonts)も入れておきましょう。
sudo apt-get install noto-fonts-hinted noto-fonts-cjk ttf-ancient-fonts
日本語入力システムのインストール
ここではちょっと懐かしいuimとanthyをインストールします。*2
あれやこれやZakki: bash on ubuntu on windows(WSL)でGUIを立ち上げて日本語入力までやる
sudo apt-get install uim uim-xim uim-anthy
ブラウザ起動シェルスクリプトの作成
mikutterには、アカウントの認証時やURLをクリックしたときに起動するWebブラウザが必要です。
WSL側にfirefoxとかをインストールしてもいいのですが、せっかくのWindowsなのでEdgeとかIEを使いたいなと。
WSLでは、Windows用のプログラムを拡張子.exeまで含めて指定すると、そのプログラムが起動できるので、それでサクッと解決・・・と思ったのですが、EdgeもIEも実は.exeファイルは存在せずシェルエクステンションみたいな概念に昇華されてしまっているので、この方法はとれません。
なので、コマンドプロンプト(cmd.exe)を経由して、Windowsの既定のブラウザを起動するようにします。
/opt/mikutter-wsl/bin/start
#!/bin/sh ESCAPED_URI=`echo "$1" | sed s/\&/^\&/g` cmd.exe /C start "$ESCAPED_URI"
実行権限を付けておきましょう。
chmod 755 /opt/mikutter-wsl/bin/start
Xサーバのインストール
Windows用のXサーバはけっこう豊富に存在しますが、ここではVcXsrvを選択しました。理由はたまたま目についたからです。
この子どうやら高速なことで有名みたいです。実際サクサク動きます。
VcXsrvの起動スクリプトの作成
VcXsrvには起動時に任意のコマンドを実行する機能があるので、mikutterをダイレクトに起動するようにします。
下記のXMLファイルを作成します。LocalProgramがキモの部分です。
mikutter.xlaunch
<?xml version="1.0" encoding="UTF-8"?> <XLaunch WindowMode="MultiWindow" ClientMode="StartProgram" LocalClient="True" Display="0" LocalProgram="bash -c "DISPLAY=:0 GTK_IM_MODULE=uim mikutter" > /dev/null 2>&1" RemoteProgram="xterm" RemotePassword="" PrivateKey="" RemoteHost="" RemoteUser="" XDMCPHost="" XDMCPBroadcast="False" XDMCPIndirect="False" Clipboard="True" ClipboardPrimary="True" ExtraParams="" Wgl="True" DisableAC="False" XDMCPTerminate="False"/>
実体参照が入ってて分かりにくいですが、デコードするとこんな感じになります。
bash -c "DISPLAY=:0 GTK_IM_MODULE_uim mikutter" > /dev/null 2>&1
標準出力、標準エラー出力を/dev/nullに捨てるのがポイントです。
そうしないとmikutterがコンソールにwarningとか出力するたびに、VcXsrvが「大丈夫?コマンド打つ?」ってダイアログを出してくるので。