2022/03/14追記
WSL2上のUbuntuで同様の設定を行った内容を別記事にしました。
2019/04/13 更新
Windows10 バージョン1809 (October 2018 Update)で再インストールしたので、それに合わせて記事を見直しました。
前回はWindows Subsystem for Linux上にインストールしたDebian GNU/Linuxと、ネットワーク上のファイルサーバとのファイル共有について紹介しました。
今回はWSL上でGUIをを使ってみたいと思います。
WSLでのGUIの実現方法
WSLをインストールするとわかりますが、基本的にはCUI(コマンドラインの操作)を前提としています。
もちろんGUIでもLinuxのコマンドが使えれば、python等のインタープリタやgcc等のコンパイラを使った開発を行うことができます。
しかし、やはりGUIでの操作をしたいという場合もあると思います。
ところがWSLはあくまでもLinuxカーネル相当のWindows上で実現しているだけなので、WSLにはビデオカードのようなグラフィクス機能がありません。
そこで登場するのがX Window Systemです。
X Window Systemは「プログラムを実行するシステム (クライアント)」と「画面を描写するシステム(サーバ)」を独立して動作させることができます。
従って、WSLをX Window Systemのクライアント、WSLを動かしているWindows10をX Window Systemのサーバとして設定すれば、WSLのGUIをWindows 10上に表示できることになります。
Windows10用のXサーバ
Windows用のXサーバとしてはAstec-Xという商用ソフトが定番といえば定番です。
しかし、価格は78,000円となかなか個人で手が出せる物ではありません。
フリーの物としてはXmingがあります。
Xmingはフリーといえばフリーなのですが、フリーになっている(Public Domain)のは2007年の物です。一応動作はするようですが、さすがに10年前となると不安になります。
10ポンド以上の寄付をすると最新版のXmingを入手することができます。
そこで最近目にしたのがVcXsrvです。
こちらは非常に活発に開発されているようです。
私がダウンロードしたときには「vcxsrv-64.1.20.1.4.installer.exe」でした。
インストールはこのダウンロードしたファイルを実行してNextを選んでおけばOKです。
VcXsrvのインストールが完了するとデスクトップにXLaunch(スタートメニューにもあります)というアイコンができます。これがVcXsrvの設定を行うためのアプリとなります。
VcXsrvは表示の仕方としていくつかのモードを持っています。ここでは代表的な2パターン(ここでは「マルチウィンドウ表示」と「デスクトップ表示」とします)を紹介します。
VcXsrvの設定を完了して、初回に起動するときにファイアウォール警告が出ます。
WSLから接続するだけでしたらファイアウォールの通過を許可しなくてかまいません。
マルチウィンドウ表示での利用
WSLの各アプリをWidnows10上でも一つのウィンドウで表示する方式です。
WSLのアプリとWindowsのアプリを混在して表示させたいときに便利ですが、WSLのアプリを起動させるときにはWSLのシェルでコマンドを入力する必要があります。
基本的にWSLをコマンドラインで利用して、ときどきGUIアプリを使うという方におすすめの方法です。
VcXsrvの設定
まずVcXsrvの設定を行います。
マルチウィンドウ表示を行うためには、XLaunchを起動して表示された設定画面で「Multiple windows」を選択します。
次の画面では「Start no client」を選んだ状態で「次へ」を選択します。
次の画面ではそのまま「次へ」を選択します。
最後の画面では「Save configuration」を選択して、現在の設定を「multi-windows.xlaunch」として保存したあと「完了」を選択します。
起動に成功するとタスクトレイに次のようなアイコンが表示されます。
WSL側の設定
次はWSL側の設定をしていきます。
まずは画面をX ServerとしてのWindows10に表示するための設定を行います。
$ export DISPLAY=127.0.0.1:0.0
づいてテスト用にGUIアプリをインストールします。
$ sudo apt-get install x11-apps
インストールに成功したらxeyesというアプリを起動してみます。
$ xeyes &
これでWindows10画面に目玉が出ればまずは成功です。
画面に目玉が見当たらない場合は、タスクバーにないかどうか確認してください。
もう少し実用的なアプリケーションとしてターミナルソフトlxterminalを導入してみましょう。
$ sudo apt-get install lxterminal
これで次のようなコマンドを実行するとターミナル画面が立ち上がります。
$ lxterminal &
ただ、フォントがイマイチかと思います。
フォントを改善するにはWindows10のフォントをWSLから参照できるようにします。
$ sudo ln -s /mnt/c/Windows/Fonts/ /usr/share/fonts/windows $ sudo fc-cache -fv
この処理をしたあとにもう一度をlxterminaiを立ち上げてみましょう。
lxterminalのメニューで「編集」→「設定」と選ぶとスタイルタブで選ぶフォントにWindowsのフォントが表示されるようになります。
フォントとしてMiguフォントを選択してみました。
多少見やすくなったでしょうか。
もちろんlxterminalだけでなくemacs等のアプリケーションもGUIで動作させることができます。
動作に問題がなければ下記のコマンドを実行して、次回からもGUIが使えるようにしておきましょう。
$ echo 'export DISPLAY=127.0.0.1:0.0' >> ~/.bashrc
日常での利用
一度設定が終われば、下記の手順でWSLのGUIアプリを実行することができます。
- Windows10でVcXsrv(セーブした「multi-windows.xlaunch」を起動する
- WSLを起動する
- WSLでGUIアプリを起動する
ちょっと手順が面倒ですが、1については「multi-windows.xlaunch」をWindowsのスタートアップに登録すれば自動化できます。
Windowsアイコンを右クリックして「ファイル名を指定して実行」を選んだら「shell:startup」を入力します。
これでスタートアップ用のフォルダができるので、そこに保存しておいた「multi-windows.xlaunch」をコピーしておきましょう。
デスクトップ表示での利用
2019/04/17 追記
デスクトップ表示をする場合はリモートデスクトップの利用がお勧めです。
WSLのデスクトップ画面をWidnows10上に大きなウィンドウで表示する方式です。起動するアプリはウィンドウ内のデスクトップ画面で選択します。
Windowsの子画面としてWSLを使う感じになります。Windowsでリモートデスクトップを利用している方はそれを想像すれば良いかもしれません。
普段LinuxでGUIを使っている方はこちらの方が使いやすいと思います。
WSLの設定
この方法では先にWSLの設定をしておきます。
やることはデスクトップ環境をインストールすることと、リモートでのGUIログインを受け付けるディスプレイマネージャを設定することです。
次のコマンドでまとめて入れてしまいましょう。今回はデスクトップ環境に軽量といわれているLXDEをディスプレイマネージャにLightDMを利用します。
$ sudo apt-get install lxde lightdm
デスクトップ環境を入れるので大量のパッケージが導入されます。私の場合は650個のパッケージが追加され、約1.3GBのディスクが消費されると表示されました。
時間があるときにやるようにしましょう。
インストールの途中でいろいろ質問が出てくるかもしれませんが、基本的はデフォルトの設定で良いようです。TABキーで「了解」を選択して進んでいきます。
インストールが終わったら余計なパッケージをアンインストールしておきます。私が試したところ、「wicd」というパッケージが入っていると調子が悪くなるようなので削除します。
$ sudo apt-get remove --purge wicd $ sudo apt-get autoremove --purge
ここまでの作業が終わったらlightdmの設定を行います。
WSLに「/etc/lightdm/lightdm.conf」というファイルがあるはずです。インストール後の状態では全てがコメントアウトされているので、下記の内容に編集します。
[LightDM] start-default-seat=false [XDMCPServer] enabled=true port=177
また、Windows10のフォントを使えるようにするために下記の設定を行います。
$ sudo ln -s /mnt/c/Windows/Fonts/ /usr/share/fonts/windows $ sudo fc-cache -fv
以上が完了したらlightdmを起動しておきます。dbusをあらかじめ動かす必要があるのでdbus→lightdmと起動します。
$ sudo service dbus start $ sudo service lightdm start Starting Light Display Manager: lightdm.
正常にlightdmが起動するとWindows10のファイアウォールの警告が出ます。WSLに接続するのがWSLを動かしているWindows10のみならキャンセルでOKです。
ここまできたらとりあえずOKなのでVcXsrvの設定に移ります。
VcXsrvの設定
次にVcXsrvの設定をしていきます。
マルチウィンドウ表示を行うためには、XLaunchを起動して表示された設定画面で「One large window」を選択します。WSLのデスクトップ画面でWindows画面を占有して良い場合は「Fullscreen」を選択します。
次の選択肢が悩ましいのですが、私は「Open session via XDMCP」を選択しました。これはWindows側からリモートデスクトップで接続するためです。
次はXDMCPの設定画面になりますので「Connect to host」の欄に「127.0.0.1」を入力して次へ進みます。
次の画面ではそのまま「次へ」を選択します。
最後の画面では「Save configuration」を選択して、現在の設定を「xdmcp.xlaunch」として保存したあと「完了」を選択します。
これでVcXsrvのウィンドウが開き次のような画面が表示されたら成功です。最初はWindowsの画面全体に表示されるので好きなサイズに調整しましょう。
あとはWSLのログイン名とパスワードでログインすることができます。
ログインに成功するとLXDEのデスクトップ画面が表示されます。あとはLXDEのメニューなどでアプリを起動できます。
微調整
上記の設定でWSLのデスクトップ画面が使えるようになりますが、いくつか調整しておいた方が良いことがあります。
一つ目は言語の設定です。デフォルトではLXDEのメニューが英語になっているのでこれを日本語にします。
いろいろ調べた結果、重要だったのは「/etc/default/locale」というファイルでした。このファイルの中身を次のようにしておきます。
LANG=ja_JP.UTF-8 LANGUAGE=ja LC_ALL=ja_JP.UTF-8 LC_CTYPE=ja_JP.UTF-8
LightDMを再起動します。
$ sudo service lightdm restart
これでLXDEのメニューが日本語になるはずです。
二番目はフォントの設定です。
LXDEのメニューの「設定」→「ルーックアンドフィールの設定」でデフォルトのフォントを設定しておきます。
私はフリーにMiguフォントを指定しました。
フォントについてアンチエイリアシングの設定をWindowsのアプリ毎の設定で変更した方が良いという情報も見かけましたが、私はそれを行わなくても問題なさそうなのでいじっていません。
デスクトップ表示での課題
WSLのデスクトップが表示されるようになったらあとは、使用したいアプリを入れていくことになります。
私はそこまで試していませんが、WSLに日本語入力ソフトを入れれば、日本語も入力できるようです。
ただ、私が試してストレスに感じたのは、Windowsのキーボード設定が勝手に英語に切り替わってしまうことです。
これはWindowsキー+スペースキーで元に戻せますが、結構ストレスを感じます。
自分の中ではWSLはSSHで接続して使いつつ、必要があるときにだけVnXsrvでGUIを表示すれば良いかな、という感じです。
まとめ
今回はWindows Subsystem for Linuxを使って導入したDebianでGUIを使えるようにしてみました。
WindowsにフリーのXサーバであるVcXsrvを導入することで、GUIアプリも簡単に使うことができます。GUIアプリが必要な方は試してみてください。
次回はWSLによるDebian GNU/Linuxをしばらく使った感想を紹介します。
コメント