Windows Terminal + WSL + GWSL で Linux : Part 3
今回の目標
- GWSL を入れて X Window を立ち上げよう!
内容:
- xterm を起動する
- Linux側シェルからWindowsアプリを起動する(GWSLがなくてもできますが)
- Windows側PowerShellからLinux側アプリを起動する
次回以降の目標
- WSL を複製して、WSL2 にコンバートしよう!
あと、番外編として
というのも計画中です。期待してお待ちいただけたらと思います。
目次:
では、本編のはじまりです。
GWSL を入れて X Window を立ち上げよう!
GWSLって何?
GWSLは、Windows ストアからインストールできるWSL用のX Window システムです。
つまり、これをインストールすると、LinuxのデスクトップアプリがWindowsのデスクトップに表示できるようになります。
もう少し具体的に何ができるかというと、ターミナル画面では、画像やPDFファイルの表示ができないのですが、X Window が立ち上がっていれば、Linux で作成した画像やPDFを表示することができるので、より活用範囲が広まります。
例えば、PythonのMatplotlibを使ってシミュレーションを行いたいとしても、X が動いていないとMatplotlibが表示できないのです。
それ以外の、Linuxで作図といえば、
- Gnuplot
- PlantUML
- Asymptote
など便利なツールがたくさんあります。こういったツールが使えるというのもLinuxを使う利点ですね(有名どころはすでにWindows版として移植されているわけですが...)。
こういったツールで作図して、LaTeX でPDF文書を作成する、な〜んて、これは憧れではないですか?
GWSLのインストール & 起動
まず、Windowsのバージョン20H2へのアップデートがまだでしたらしておきます。WSL2を使うためにも必須です。
- Windows Update(コントロールパネル/更新とセキュリティー)
- バージョン20H2へのアップデート
アップデートが済んだら「GWSL」をWindows ストアで検索して、インストール、起動します。
GWSLの使い方
まずは、タスクバーにピン留めしておきましょう。
- スタートメニュからGWSLを見つける
- 右クリックメニュー
- その他
- タスクバーにピン留め
です。
GWSLが起動すると、デスクトップ右側に、GWSLのダッシュボードが現れます。もし消えてしまったら、タスクバーのGWSLをクリックすれば現れます。
初めに
- GWSL Distro Tools
をクリックし、現れた画面の一番上
- Display Is Set To Auto-Export
をクリックします。すると再起動を促されますが、Windowsは再起動しません。
- 「はい」を押してください。
これで準備終了、X が動いて Xアプリをデスクトップに表示できるようになりました。
陰で行われたのは、「~/.profile」と「~/.bashrc」に次のようなスクリプトを書き込みました。上記の操作を繰り返すとさらに同じスクリプトが追加されてしまうので、一度だけで良いです。
#GWSL_EXPORT_DISPLAY ipconfig_exec=$(wslpath "C:\\Windows\\System32\\ipconfig.exe") if [ -x $(which ipconfig.exe) ] then ipconfig_exec=$(which ipconfig.exe) fi wsl2_d_tmp=$($ipconfig_exec | grep -n -m 1 "Default Gateway.*: [0-9a-z]" | cut -d : -f 1) if [ -n $wsl2_d_tmp ] then first_line=$(expr $wsl2_d_tmp - 4) wsl2_d_tmp=$($ipconfig_exec | sed $first_line,$wsl2_d_tmp!d | grep IPv4 | cut -d : -f 2 | sed -e "s|\s||g" -e "s|\r||g") export DISPLAY="$wsl2_d_tmp:0" else export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk "{print $2}"):0 fi
では、X初仕事です。
と入力してリターンです。「XTerm」が立ち上がったでしょうか。コマンドの最後に「&」をつけるのがポイントです。
「&」をつけないとxtermが終了するまで、シェルがxtermのタスクに縛られてしまい、ターミナルを操作できなくなってしまいます。
Windows側からLinux側を操作
Windows Terminal には、Power Shell も立ち上がっていますので、そちらで操作してみます。
Windows側からLinux側のコマンドを操作する時には先頭に「wsl」をつけます。
Windows側からLinux側のホームディレクトリをみました。
では、Windows側からxtermを操作して表示させましょう。
つけたオプションでxtermを表示するディスプレイを番号で指定しています。ディスプレイを指定しないとどこに表示して良いかわからないのです。Linux側で操作するときには自分自身のディスプレイに表示するのでオプションは必要ありません。
また、Windows側(Power Shell や CMD.exe)では「&」をつけるとエラーになります。xtermを終了させないとPower Shell で操作はできなくなります(xtermでも終了コマンドはexitです)。
ついで、Linux側からWindows側のアプリを起動させてみましょう。
Linux側からWindows側を操作
エクスプローラーを起動させます。
絶対パスでコマンドを指定しファイル名を.exeまでつけることで実行できます。
ちょっと面倒なので、こんな時はシェルスクリプトですね。「/usr/local/bin/explorer」ファイルを作って、次の内容を記述します。
#!/bin/sh /mnt/c/Windows/explorer.exe
Linux側でスーパーユーザーとしてファイルを作成します。作成したファイルに実行権限を与えます。
実行してみましょう。
X 関連インストール
パッケージマネージャ
- synaptic はパッケージマネージャです。スーパーユーザ権限でsynapticコマンドを実行します。
sudo synaptic
日本語関連インストールと設定
- もしも、libQt5Core.so.5 がなんたらとエラーが出た時の対処
libQt5Core.so.5 があるかを確認する
find /usr/lib -iname "*qt5core.so*"あるのにエラーが出ているのなら、strip で .note.ABI-tag を消す
入力メソッドを設定します。(起動してない時には)GWSLをクリックして、X windowを起動しておきます。
fcitx を選択する以外基本的に全てOK(YES)をクリックします。
設定を反映させるためにDebianのターミナルを再起動します。
次は、fcitxを設定します。
Emacsは、「~/.emacs.el」などに次を記入します。
;; Mozcの設定 (load-file "/usr/share/emacs/site-lisp/emacs-mozc/mozc.el") (require 'mozc) (setq default-input-method "japanese-mozc") (setq mozc-candidate-style 'echo-area)
Emacs上では、「Ctrl + ¥」で日本語入力ができるようになります。
コマンドラインから Mozc ツールを起動
- Mozc 設定:
/usr/lib/mozc/mozc_tool --mode=config_dialog
- Mozc 辞書ツール:
/usr/lib/mozc/mozc_tool --mode=dictionary_tool
- Mozc 単語登録:
/usr/lib/mozc/mozc_tool --mode=word_register_dialog
- Mozc 手書き文字入力:
/usr/lib/mozc/mozc_tool --mode=mode=hand_writing
- Mozc 文字パレット:
/usr/lib/mozc/mozc_tool --mode=character_palette
Windowsのフォントを利用できるようにする
Linux側のフォントの設定として、「/etc/fonts/conf.d/51-local.conf」を編集しWindowsのフォントを使えるようにします。
ファイルに次のように一行だけ書き加えます。
<!--?xml version="1.0"?--> <fontconfig> <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0"> <its:translaterule translate="no" selector="/fontconfig/*[not(self::description)]"> </its:translaterule></its:rules> <description>Load local customization file</description> <!-- Load local system customization file --> <include ignore_missing="yes">local.conf</include> <dir>/mnt/c/Windows/Fonts</dir> </fontconfig>
下から2行目の、dir タグの一行を加えるだけです。
利用できるフォントの一覧は「fc-list」コマンドで確認できます。
もし、「/mnt/c/Windows/Fonts/...」という表示がなく反映されていないような時には、「fc-cache -fv」コマンドで、一度フォントキャッシュをクリアして再ロードさせてみましょう。
いかがでしたか?
WindowsとLinuxとで上手に連携が取れたらなんかすごいことができそうな気がしませんか?
今回は、ここまでです。お疲れ様でした。