WSL2(Windows Subsystem for Linux 2)では、LinuxのGUIアプリケーションへの対応であるWSLGを開発中というところまでが前回の記事だ(「LinuxのGUIアプリケーションに対応するWSL2」)。今回は、具体的にどうやって仮想マシン内部のGUIアプリケーションが、Windowsのデスクトップにウィンドウを表示するのかについて解説する。
ただし、WSLGについては、Microsoftが公開した情報に基づいてはいるものの、正式版が公開されたわけではないため、実際にプレビューなどが開始されたときに答え合わせをしたい。とりあえずは、あくまでも現時点での内容として受け止めてほしい。
WSL2からRDPでLinux GUIアプリケーションのウィンドウを表示
WSL2は仮想マシンの中で動作する。そこで専用の仮想マシン環境(軽量ユーティリティVM)が作られた。Win32側とWSL2側は分離されており、お互いに簡単にアクセスすることはできない。Windows 10に含まれるHyper-Vでは、仮想マシンのデスクトップ表示にRDP(Remote Desktop Protocol)を使う。
WSLGも基本的に同じで、RDPを使ってWSL2ディストリビューション内からの表示をWin32側で描写する。しかし、Hyper-VのVMではゲストOSのデスクトップをウィンドウとしてホスト側のデスクトップに表示するのに対して、WSLGではLinux GUIアプリケーションのウィンドウをホスト側のデスクトップに表示する。
この仕組みはどちらかというと、WDAG(Windows Defender Application Guard)に近い。WDAGは、EdgeやOfficeをホストWindows側とは分離された仮想マシン内で動作させる。しかし、その表示はウィンドウとしてされるため、ユーザーには通常実行されているEdgeやOfficeと見た目では区別がつかない。
RDPには、アプリケーション仮想化のために、リモートサーバー側で実行されるアプリケーションのウィンドウをデスクトップに表示するための機能を持っている。ということはすでに「Desktop」ではないし、「Protocol」だけでもないのだが、名称はいまだに「RDP」なのである(NT4.0から使われているので、名前を変えるのはもう難しいのではないかと思う)。
リモートのデスクトップを表示するのとウィンドウを表示するのは同じように思えるが、実際には大きく違う。デスクトップを表示させる場合、表示自体はサーバー側で管理するので、クライアント側では送られてくるデスクトップの描画をすればいいだけだ。しかし、ウィンドウを表示するとなると、クライアント側のデスクトップに関する情報をサーバー側に送り、サーバー側アプリケーションは、クライアントのデスクトップにいるのと同じ情報を得られるようにしなければならない。たとえば、クライアント側に複数のモニターがあるとする。その場合は、それぞれの解像度や位置などをサーバー側に送らねばならない。アプリケーションはデスクトップ内での表示位置を自分で制御するかもしれないし、クライアント側のモニターだって、ユーザーが解像度を変更したり、突然デスクトップの構成が変化することもある。
RDPは、アプリケーション仮想化やWDAGなどのために、こうした「リモートウィンドウ」のための仕組みを整えてきた。現在利用できない仮想GPUを使って、GPUアプリケーションなどを動作させるRemoteFXもこのRDPの一部として開発された。ある意味、Windowsの仮想化機能(Hyper-Vやコンテナ、WSLやWDAGなど)と歩調を合わせてずっと改良され続けてきたのがRDPなのである。WSLGでRDPを使うというのは自然なやり方なのである。RDPが持つリモートウィンドウの表示機構は、「RAIL」(Remote Application Integrated Locally)と呼ばれる。
Westonをどこで実行するのか?
WSL2では、Microsoftストアなどから入手できる「WSLディストリビューション」とWSL2側のLinuxカーネルの組み合わせで動作する。WSLディストリビューション側は、WSL2への対応は必要だが、基本的には、通常のLinuxディストリビューションに準じたものだ。
では、WSLG用のWayland(Weston)をどうやって組み込むのか? WSLGでは、WSL側にSystemディストリビューション(System Distro)が用意され、WSLディストリビューションと組み合わさってLinux環境を実現するようだ。
このSystem Distroはコンテナーのように働き、WSLディストリビューションとは分離された状態で動作し、影響を受けない。WSLディストリビューション側は、別のWaylandなどを導入し、従来どおりに外部のXサーバーに表示するといったことも可能になるようだ。また、WSLGの導入に対して、ディストリビューション自体を作り替える必要もないようだ。

この連載の記事
-
第472回
PC
WindowsのエラーをMicrosoftに送信するテレメトリ機能を理解する -
第471回
PC
Windowsのコマンドラインでエイリアスを使う -
第470回
PC
Windows用のパッケージマネージャー「Winget」 プレビュー版で機能が充実してきた -
第469回
PC
Windows Updateの27年 悪役だった頃から改良が進んで、徐々に目立たない存在に -
第468回
PC
2025年のWindowsどうなる!? Windows Insider Programの状況をあらためて見る -
第467回
PC
Copilot+ PCのNPUでカメラを処理する「Windows Studio Effects」 その内容や効果は? -
第466回
PC
PowerToysの最近の新機能には、複数アプリを指定位置に起動する「ワークスペース」や新規作成のカスタマイズがある -
第465回
PC
WindowsのPowerShellからBluetoothデバイスを調べる -
第464回
PC
Windows 10のサポート切れまで1年を切った さてWindows 10マシンをどうする? -
第463回
PC
Windows Terminal Preview版でSixelグラフィックスを実際に表示させてみる -
第462回
PC
Windows Terminal Preview版でSixelグラフィックスを扱う - この連載の一覧へ