Windows Subsystem for Linux(Bash on Ubuntu on Windows, 以下BoUoW)を使用する際に,端末エミュレータとしてTerminatorを使っています.wsl-terminalなど,他にも選択肢はあったが,Terminatorのタブ機能と画面分割機能を同時に行える点が非常に便利だったので,それを使っています.
とはいえ,通常のLinux環境と異なることもありそのままでは使用できなかったのでその際に行った対処を書いておきます.
X serverのインストール
BoUoWではデフォルトでGUI(X Window)が開けないので,Windows側にXserverを用意します.
Xmingを使用しています.他にもvcxsrvなどがあるようですが,試していないため詳しくは知りません.
Terminatorを入れる
BoUoWでTerminatorをインストールします
$ sudo apt-get install terminator
とりあえずこれでインストールできます
Xmingと合わせてTerminatorを起動する
$ terminator
と単純に実行してみると,"Could not open display"とか "$Display is properly set"とか言われると思います.
まずはXmingを起動する必要があります.Xmingには起動オプションがいくつか存在するのですが自分は以下のようにしています.(参考:Xming オプション)
"C:~~~\Xming.exe" :0 -clipboard -multiwindow -xkbmodel jp106 -xkblayout jp -dpi 100
"-clipboard"でWindowsとのクリップボードを共有します
"multiwindow"で複数のX Windowを同時に表示することができます.Terminatorから更に別のソフトなんかを起動する場合には使うかもしれません.
"xkbmodel jp106 -kblayout jp"で日本語キーボードの配置に設定します.
"-dpi 100"はdpiの設定です.適当に
Xmingのショートカットを作成して,そのリンク先に上記を設定することで,ショートカットから起動する場合はオプションありで起動できるようになります
次にBoUoW側の設定です.
$ DISPLAY=localhost:0.0
$ terminator
これでterminatorがWindows上に表示できました.
問題点
とりあえずTerminatorを起動することはできたのですが,そのままではいくつか問題点がありました.
- 日本語が文字化けする
- 日本語入力できない
- 最大化するとなんかウィンドウが縮んでいく
- 起動時になんか警告出る
というわけでこいつらを解決していきましょう
1:日本語が文字化けする
(参考: コンソールで日本語を表示する方法)
どうやら日本語フォントがインストールされていないのが原因っぽいです.unifontを追加することで表示されるようになりました.
$ sudo apt-get install unifont
2:日本語入力ができない
以前に色々調べまわってできなかったのですが,最近この記事を見つけて解決できることを知りました.感謝
bash on Ubuntu on Windowsを試してみる
日本語入力を実現するためにインプットメソッドが必要ですが,その多くはBoUoW上で動作しないようです...
uim-anthyがどうやら動作するようなので,それを使います.
$ sudo apt install uim uim-xim uim-anthy
$ export XMODIFIERS="@im=uim"
$ export GTK_IM_MODULE=uim
$ export QT_IM_MODULE=uim
exportの3行を実行した後にterminatorを起動すると,日本語入力が行えるようになりました.
3:最大化するとなんかウィンドウが縮んでいく
Windowsキー+↑キーでウィンドウを最大化できる(Windowsの機能)のですが,terminatorに対してこれを行うと何故か最大化した後にウィンドウが縮んでいきます.
はっきりと原因はわからなかったのですが,「設定」→「Window State」をデフォルトの"Normal"から"Maximised"に変更することで直りました.
4:起動時になんか警告出る
起動するときに以下のような警告(エラー?)がでてすごく邪魔です.
An error occurred while loading or saving configuration information for terminator. Some of your configuration settings may not work properly.
Details: No D-bus daemon running
BoUoWではDbusが正常に動作しないらしく,それが原因でこのエラーが表示されるようです.こちらのページを参考にしたら解決でき,他のいくつかの問題も合わせて解決できました.
[Bash on Windows] Getting dbus and X server working
$ sudo sed -i 's$<listen>.*</listen>$<listen>tcp:host=localhost,port=0</listen>$' /etc/dbus-1/session.conf
/etc/dbus-1/session.conf ファイルの15行目辺りに"unix:tmpdir=/tmp"と書かれている部分があったのですが,そこを"tcp:host=localhost,port=0 "に変更することで解決できました.
楽に起動する
ここまでで僕が遭遇した4つの問題点は全て対処できました(完全に解決できたわけではありませんが...)
ですが,起動時に毎回いくつかのコマンドを入力するのはとても面倒なので自動で実行されるようにしておきます.
"~/.profile" に必要なコマンドを書いておくと,ログイン時に実行してくれます.以下の内容を.profileに書き足しました
export DISPLAY=localhost:0.0
export XMODIFIERS="@im=uim"
export GTK_IM_MODULE=uim
export QT_IM_MODULE=uim
terminator
exit
これで,bash.exeを起動すると,terminatorが起動し,terminatorを終了すると,bash.exeも終了します.
ただし,bash.exeはそのまま起動してもログイン扱いにはならないので,起動オプションでログイン扱いに変える必要があります.
bash.exe --login
でBoUoW起動時に.profileを実行してくれます.ついでにbash.exeのウィンドウが残るのも邪魔なのでショートカットから最小化しておきました.
おわりに
こんな感じで無事にBoUoWからTerminatorを使うことができるようになりました.ですが,こんなに面倒なことするならwsl-terminalだけ使うので十分な気もしますね...
根本的に問題点が解決できたわけでもないですし