2022/03/14追記
WSL2上のUbuntuで同様の設定を行った内容を別記事にしました。
前回はWSL (Windows Subsystem for Linux)上に導入したDebianでネットワークドライブを自動マウントする方法を紹介しました。
今回はWSLでGUIを使う方法を再考したいと思います。
これまで紹介した方法
WSLでGUIを使う方法としてWindows10にX server (VnXsrv)を導入して、WSLのGUIを表示させる方法を紹介してきました。
WSLで起動した各アプリのウィンドウを個別に表示させる場合はこの方法は便利なのですが、WSLのデスクトップ画面を表示させる場合は、キーボードが勝手に英語に切り替わってしまったり不満が残ります。
何よりも、Windows10にVnXsrvというアプリを導入しなければ行けません。
今回はVnXsrvを使わずにWSLのデスクトップ画面を表示させる方法を紹介します。
リモートデスクトップ
Windowsには他のPCの画面を表示するリモートデスクトップという機能があります。
この機能をつかってWSLに接続し、Linuxのデスクトップ画面を表示させようというわけです。
xrdpのインストール
WSLでxrdpの接続を受け付けるにはxrdpというパッケージを導入する必要があります。合わせてデスクトップ環境としてMATEを導入しておきます。
$ sudo apt-get install xrdp mate-desktop-environment-core
デスクトップ環境を入れるので大量のパッケージが導入されます。時間があるときにやるようにしましょう。
インストールの途中でいろいろ質問が出てくるかもしれませんが、基本的はデフォルトの設定で良いようです。TABキーで「了解」を選択して進んでいきます。
インストールが終わったらxrdp設定ファイルを修正します。
xrdpの設定ファイル/etc/xrdp/xrdp.iniにあるので、このファイルを編集して「port」で始まる行を
port=3390
に変更しておきます。
ここまで完了したらxrdpを起動しておきます。
$ sudo service xrdp restart
xrdpを起動すると次のようなセキュリティの警告が表示されるかもしれません。
WSLに接続するのがWSLを動かしていWindowsだけならばここは「キャンセル」として問題ありません。
vnc4serverのインストール
WSLのグラフィクス描画を担当するvnc4serverをインストールします。
$ sudo apt-get install vnc4server
vnc4serverの設定ファイルは/etc/vnc.confにあるのですが、試したところ特に変更が不要なようでした。
リモートデスクトップの接続
WSL側の準備ができたのでそれではリモートデスクトップで接続してみます。
Windowsのスタートメニューから「リモートデスクトップ接続」を探して実行します。
次のようなウィンドウが出るので「オプションの表示」を選択しましょう。
これでリモートデスクトップのオプションが設定できるので「画面」タブを選択します。
「画面の設定」のエリアでリモートデスクトップの画面サイズ(=WSLのデスクトップ画面のサイズ)を設定できます。
Windows画面全体をリモートデスクトップで覆われたくないときはここで画面サイズより小さい解像度を設定しておきます。
設定が終わったら「オプションの非表示」を選択してオプションの設定画面をクローズします。
次のようなウィンドウがでるので「127.0.0.1:3390」と入力して「接続」を選択します。
すると次のような警告が出るので、チェックボックスを選択してから「はい」を選択します。
これでリモートデスクトップのログイン画面が表示されるはずです。
「Session」で「XVnc」を選択したあと、WSLのユーザ名とパスワードでログインします。
Sessionの欄で「Xvnc」を毎回選ぶのが面倒な方は「/etc/xrdp/xrdp.ini」というファイルを編集して、「Session Types」というコメントがあるところで「Xvnc」のセクションが先頭に来るようにしてください。
; ; Session types ; [Xvnc] name=Xvnc lib=libvnc.so username=ask password=ask ip=127.0.0.1 port=-1 #xserverbpp=24 #delay_ms=2000 [Xorg] name=Xorg lib=libxup.so username=ask password=ask ip=127.0.0.1 port=-1 code=20
このれいでは「Xvnc」のセクションと「Xorg」のセクションを入れ替えています。
これでMATEのデスクトップが表示されればOKです。
MATEが日本語になっていない場合は 「/etc/default/locale」というファイルを下記のように変更してからxrdpを再起動してみてください。
LANG=ja_JP.UTF-8 LANGUAGE=ja LC_ALL=ja_JP.UTF-8 LC_CTYPE=ja_JP.UTF-8
デフォルトではフォントが汚く、メニューの文字がガタガタしているかもしれません。
フォントを改善するにはWindows10のフォントをWSLから参照できるようにします。
$ sudo ln -s /mnt/c/Windows/Fonts/ /usr/share/fonts/windows $ sudo fc-cache -fv
この処理をしてからxrdpを再起動してやり直してみましょう。
$ sudo service xrdp restart
もう一度リモートデスクトップで接続し直すとWindowsのフォントが使えるようになっているので、MATEのメニューから「システム」→「設定」→「ルック&フィール」→「外観の設定」でフォントを選びます。
私はフリーのMiguフォントを使ってみました。
これでかなり見やすくなります。
あとは普通にアプリを起動するだけです。Firefox等も当然使えます。
なおリモートデスクトップを終了するときは
- WSLのデスクトップも終了したい場合→「システム」→「ログアウト」でログアウトする
- WSLのデスクトップを維持したままリモートデスクトップを閉じたい→リモートデスクトップの閉じるボタンを選択
となります。後者の場合はリモートデスクトップで再接続すれば切断したときの状態で再開できます。
リモートデスクトップの設定を保存する
動作確認がOKでリモートデスクトップのサイズなどが決まったら設定を保存しておきましょう。
リモートデスクトップの接続を起動して「オプションの表示」を選択したあと「全般」タブを選び、接続設定の「名前をつけて保存」を選択しましょう。
私は「wsl.rdp」として保存しました。
今後はこのアイコンをダブルクリックするだけでリモートデスクトップに接続することができます。
まとめ
今回はWindows Subsystem for Linuxを使って導入したDebianにリモートデスクトップで接続できるようにしてみました。
リモートデスクトップを使うとWindows側に特別なソフトを入れる必要がありません。Linuxのデスクトップ画面を使いたい方は、Xサーバー(VnXsrv)を使うよりリモートデスクトップの方がお手軽だと思います。
次回はRaspberry Piを中華通販で購入したことを紹介します。
コメント
丁寧な解説、ありがとうございます。
リモートデスクトップで、Xvncで接続しようとしていますが、下記のメッセージが出てしまい、接続できません。
解決策を教えていただけませんか?
——————————————————
Connection Log
connecting to sesman ip 127.0.0.1 port 3350
sesman connect ok
sending login info to session manager, please wait…
login successful for display 10
VNC started connecting
VNC connecting to 127.0.0.1 5910
VNC error – problem connecting
some problem
——————————————————
・Windows 10 Pro 1809
・WSL Ubuntu 18.04
コメントありがとうございます。
ホームディレクトリに.xsession-errorsというエラーログはないでしょうか?
そのログファイルにヒントとなることが書いてあるかもしれません。
また私は最初はデスクトップ環境にLXDEを使おうと思ったのですが、なぜかうまくいかなかったためMATEに変更しました。
デスクトップ環境を変えるのも手だと思います。