学習したこと倉庫〜Linux関連を中心に

忘れてしまうことが多くなってきたので、学んだことを整理して記録しておかないと!と自らを戒めるためのブログです

Windows Terminal + WSL + GWSL で Linux : Part 3

X Window 起動

X window 起動

今回の目標

  • GWSL を入れて X Window を立ち上げよう!
    内容:
    1. xterm を起動する
    2. Linux側シェルからWindowsアプリを起動する(GWSLがなくてもできますが)
    3. WindowsPowerShellからLinux側アプリを起動する

次回以降の目標

  • WSL を複製して、WSL2 にコンバートしよう!

あと、番外編として

というのも計画中です。期待してお待ちいただけたらと思います。

 

目次:

 

では、本編のはじまりです。

 

GWSL を入れて X Window を立ち上げよう!

GWSLって何?

GWSLは、Windows ストアからインストールできるWSL用のX Window システムです。

つまり、これをインストールすると、LinuxのデスクトップアプリがWindowsのデスクトップに表示できるようになります。

 

もう少し具体的に何ができるかというと、ターミナル画面では、画像やPDFファイルの表示ができないのですが、X Window が立ち上がっていれば、Linux で作成した画像やPDFを表示することができるので、より活用範囲が広まります。

 

例えば、PythonのMatplotlibを使ってシミュレーションを行いたいとしても、X が動いていないとMatplotlibが表示できないのです。

それ以外の、Linuxで作図といえば、

など便利なツールがたくさんあります。こういったツールが使えるというのもLinuxを使う利点ですね(有名どころはすでにWindows版として移植されているわけですが...)。

こういったツールで作図して、LaTeX でPDF文書を作成する、な〜んて、これは憧れではないですか?

 

GWSLのインストール & 起動

まず、Windowsのバージョン20H2へのアップデートがまだでしたらしておきます。WSL2を使うためにも必須です。

  1. Windows Update(コントロールパネル/更新とセキュリティー
  2. バージョン20H2へのアップデート

アップデートが済んだら「GWSL」をWindows ストアで検索して、インストール、起動します。

 

GWSLの使い方

まずは、タスクバーにピン留めしておきましょう。

  1. スタートメニュからGWSLを見つける
  2. 右クリックメニュー
  3. その他
  4. タスクバーにピン留め

です。

GWSLが起動すると、デスクトップ右側に、GWSLのダッシュボードが現れます。もし消えてしまったら、タスクバーのGWSLをクリックすれば現れます。

GWSL ダッシュボード

GWSL ダッシュボード

初めに

をクリックし、現れた画面の一番上

  • Display Is Set To Auto-Export

をクリックします。すると再起動を促されますが、Windowsは再起動しません。

Debian リスタート

Debian リスタート
  • 「はい」を押してください。

これで準備終了、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が終了するまで、シェルがxtermのタスクに縛られてしまい、ターミナルを操作できなくなってしまいます。

 

Windows側からLinux側を操作

Windows Terminal には、Power Shell も立ち上がっていますので、そちらで操作してみます。

Windows側からLinux側のコマンドを操作する時には先頭に「wsl」をつけます。

wsl ls -l ~

wsl コマンド

wsl ls -l ~

Windows側からLinux側のホームディレクトリをみました。

では、Windows側からxtermを操作して表示させましょう。

wsl xterm -d 0:0

Windows側からxterm起動

Windows側からxterm起動

 

つけたオプションでxtermを表示するディスプレイを番号で指定しています。ディスプレイを指定しないとどこに表示して良いかわからないのです。Linux側で操作するときには自分自身のディスプレイに表示するのでオプションは必要ありません。

また、Windows側(Power Shell や CMD.exe)では「&」をつけるとエラーになります。xtermを終了させないとPower Shell で操作はできなくなります(xtermでも終了コマンドはexitです)。 

 

ついで、Linux側からWindows側のアプリを起動させてみましょう。

Linux側からWindows側を操作

エクスプローラーを起動させます。

/mnt/c/Windows/explorer.exe

エクスプローラー + xterm

エクスプローラー + xterm

絶対パスでコマンドを指定しファイル名を.exeまでつけることで実行できます。

ちょっと面倒なので、こんな時はシェルスクリプトですね。「/usr/local/bin/explorer」ファイルを作って、次の内容を記述します。

#!/bin/sh
/mnt/c/Windows/explorer.exe
sudo emacs /usr/local/bin/explorer &

Linux側でスーパーユーザーとしてファイルを作成します。作成したファイルに実行権限を与えます。

sudo chmod +x /usr/local/bin/explorer

実行してみましょう。

Linuxのシェルでの実行なので「&」をつけます。

 

X 関連インストール

パッケージマネージャ
sudo apt install synaptic
  • synaptic はパッケージマネージャです。スーパーユーザ権限でsynapticコマンドを実行します。
    sudo synaptic

    スーパーユーザでパッケージマネージャ起動

    スーパーユーザでパッケージマネージャ起動

 

 

 

日本語関連インストールと設定
  • もしも、libQt5Core.so.5 がなんたらとエラーが出た時の対処

    libQt5Core.so.5 があるかを確認する

    find /usr/lib -iname "*qt5core.so*"

    あるのにエラーが出ているのなら、strip で .note.ABI-tag を消す

    sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
入力メソッドにfcitxをインストールし、日本語変換にmozcを使います。Emacsでもmozcを使います。
sudo apt install im-config fcitx-mozc emacs-mozc

入力メソッドを設定します。(起動してない時には)GWSLをクリックして、X windowを起動しておきます。

im-config &

fcitx を選択する以外基本的に全てOK(YES)をクリックします。

設定を反映させるためにDebianのターミナルを再起動します。

次は、fcitxを設定します。

fcitx-configtool &

 

 

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のフォントを使えるようにします。

sudo emacs /etc/fonts/conf.d/51-local.conf &

ファイルに次のように一行だけ書き加えます。

<!--?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」コマンドで、一度フォントキャッシュをクリアして再ロードさせてみましょう。

 

 

 

いかがでしたか?

WindowsLinuxとで上手に連携が取れたらなんかすごいことができそうな気がしませんか?

 

今回は、ここまでです。お疲れ様でした。