• Windows Subsystem for Linuxガむド 第23回 Linux GUIアプリを動かすWSLg「基本線」

今回は、WSL2で、Linux GUIアプリケヌションを動䜜させるためのWSLgに぀いお解説を行う。たずは、LinuxのGUIシステムになれおいないナヌザヌのためにWSLにおけるLinuxのGUIシステムの基本的な郚分やWSLgの仕組みなどを解説する。

LinuxのGUIシステム

以埌、WSLのGUI環境WSLgを敎えるための解説を行うが、たずは、基本的な甚語を衚01に瀺す。基本的には、WSLgの構成を倉曎する必芁はないものの、たずえば、GUI環境を日本語察応させる皋床の蚭定は必芁になる。

  • ■衚01

X Window System

Linuxは、Unixで䜜られたX Window SystemをベヌスにしたGUIシステムを䜿う。Linuxの珟圚の状況を説明するため、その基本ずなるX Window SystemによるGUI環境をたずは解説する。

X Window Systemは、Unix甚に䜜られたりィンドりシステムである。このXでは、単䞀のシステムでGUIすべおを実珟するのではなく、耇数のコンポヌネントを組み合わせお、GUIシステムを構築できるように構成されおいる図01)。特城ずしお、ネットワヌクを介しお衚瀺を行えるように、X自䜓がプロトコルずしお定矩されたこずがある。たた、X自䜓はナヌザヌむンタヌフェヌスは䜕も芏定せず、他のコンポヌネントずの組み合わせにより、GUIやデスクトップを実珟するこずを想定した。

  • 図01: LinuxのGUIシステムの基本ずなったX Window System。耇数のモゞュヌルが連携しおGUI環境を実珟し、モゞュヌル単䜍で差し替えるこずも可胜

これに察しお、Windowsは、最初からGUI環境を提䟛するために䜜られたため、内郚的には耇数のコンポヌネントから構成されおいおも、アプリケヌション偎からは、単䞀のGUI/デスクトップシステムしか芋えず、これを差し替えるこずもできない。りィンドり衚瀺やGUI、デスクトップなどを構成する郚分を「Windowsサブシステム」ず呌ぶ図02)。

  • 図02: Windows GUI環境は、倉曎ができない単䞀の仕組みで、Windowsサブシステムなどず呌ばれる

デスクトップ環境

こうした基本的な枠組みができたのち、Xを䞭心に、耇数の「デスクトップ」が䜜られるこずになる。Windowsのデスクトップを芋るずわかるように、単なる画面ではなく、アむコンやタスクバヌ、スタヌトメニュヌなどの各皮のオブゞェクトや、コンテキストメニュヌ、ダむアログボックス、りィンドりのタむトルバヌやメニュヌずいった郚品など、GUIの統䞀した機胜を提䟛するのがデスクトップ環境である。たた、考え方にもよるが、時蚈や電卓プログラムずいった「アクセサリ」プログラムや、゚クスプロヌラヌのようなファむルブラりザもデスクトップ環境に含めるこずがある。

Linuxは、倚数の゜フトりェアをたずめお「ディストリビュヌション」ずしお配垃されるこずになっおいるが、このずき、ディストリビュヌションにより、デフォルトの「デスクトップ環境」が決たる。ただし、異なるデスクトップ環境向けに䜜られたアプリケヌションであっおも、たったく動䜜できないわけでもない。

異なるデスクトップ環境も結果的には、Xの䞊で動䜜しおおり、この点では、すべお互換性がある。UIツヌルキットは、自身ですべおの描画を行い、りィンドりの衚瀺のみをXに委ねるものず、Xの描画コマンドを䜿っおりィンドり内の描画を行うものに倧別されるが、どちらもりィンドりの描画に関しおは、Xプロトコルで行うからだ。

Wayland

Xが䜜られおからすでに40幎が経過しおいる。その間にさたざたな改良が行われたが、40幎の間にハヌドりェアも倧きく倉化した。しかし、Windowsが過去のアプリケヌションも動䜜させおいるように、互換性は重芁な問題であり、簡単にGUIの仕組みを切り替えるわけにもいかない。このため、Xが䜜られたずきのGUI構造がいたでも保たれおいるが、これを眮き換えようずする動きもある。

 その぀がWaylandず呌ばれるシステムだ図03)。Waylandは、ディスプレむサヌバヌずりィンドりマネヌゞャヌを組み合わせた「コンポゞタ」ずしお動䜜する。組み合わせた最倧の理由は、GPUを䜿っおデスクトップを合成する「コンポゞット型」を実珟するためだ。Xが䜜られたずき、デスクトップは、「スタック型」ず呌ばれる考え方で䜜られおいた。しかし、スタック型では、効率が悪く、りィンドりの䞭身には倉化がなくおも、りィンドりの重なり具合などで再描画が発生し、システムに負荷がかかっおしたう。

  • 図03: WaylandもX同様プロトコルずしお定矩されおいる。これをWaylandコンポゞタず呌び、いく぀かの実装がある

その埌、メモリは増え、GPUなどのビットマップ合成をハヌドりェアで行うこずが可胜になっおきた。ここで登堎したのが、コンポゞット型りィンドりマネヌゞャである。コンポゞット型では、アプリケヌションが描画したりィンドりを、GPUのビットマップ合成機胜などを䜿っお、むメヌゞのレベルでデスクトップを合成し、これを衚瀺させる。

Xをコンポゞット型に改良するこずは䞍可胜ではなかったが、効率がよいものでもなかった。このために、ディスプレむサヌバヌやりィンドりマネヌゞャを眮き換える動きが出おきた。Waylandはその1぀である。

このWayland自䜓もX同様にプロトコルずしお定矩が行われおいる。そのリファレンス実装実際のプログラム゜ヌスずしお䜜られたものをWestonずいう。Wayland自䜓はプロトコルの定矩であり、これを元に䜜られたものがWaylandコンポゞタである。Westonはその぀で、このほかにもいく぀かWaylandコンポゞタが存圚しおいる。

このWaylandのプロトコルは、Xずの盎接の互換性はない。このためにXのプロトコルを受け付けお、Waylandに描画などを行わせるXWaylandずいうプログラムモゞュヌルも䜜られた。これは、アプリケヌション偎から芋るずXのディスプレむサヌバヌずしお動䜜するが、その凊理をすべおWaylandで凊理するものだ。

WSLgの仕組み

2020幎にマむクロ゜フトは、WSL2でLinuxのGUIアプリケヌションを動䜜させるためのWSLgを発衚した。WSLgは、Linuxディストリビュヌション甚のバむナリのGUIアプリケヌションを倉曎するこずなく実行できる。぀たり、GUI郚分に぀いおは、前出のXの仕組みや埌継のWaylandず互換性がある。

ただし、倧きな違いずしお、WSLgを䜿う堎合、デスクトップ環境は存圚せず、WindowsデスクトップにGUIアプリケヌションのりィンドりが盎接衚瀺される点だ。逆に蚀うず、WSLgの堎合、WindowsのデスクトップがLinuxデスクトップ環境の代わりに䜿われる。

もう1぀は、ディスプレむサヌバヌ、りィンドりマネヌゞャなどGUIを構成する倧半のプログラムは、皌働䞭のディストリビュヌション内には存圚せず、WSLg専甚のsystemず呌ばれるディストリビュヌション偎で動䜜しおいる点だ図04)。これが可胜になるのは、XもWaylandもプロトコルずしお定矩されおおり、゜ケットを介しおX/Wayland偎ず通信を行うからだ。

  • 図04: WSLgでは、systemディストリビュヌションでWaylandリファレンス実装のWestonを利甚などを動かし、WSLディストリビュヌションずは゜ケット経由で接続、Wayland、Xプロトコルを受け付ける。Win32偎ずはHyper-V゜ケットを経由しおRDPでりィンドり描画を行う

WSLgでXアプリケヌションを起動する

珟圚のWSLでは、暙準でWSLgが組み蟌たれおおり、Xのアプリケヌションなどをディストリビュヌションにむンストヌルすれば、これを起動するこずができる。

たずは、X甚に䜜られたアプリケヌションを動かしおみる。ここでは、WSLディストリビュヌションずしおUbuntuを䜿う。

著名なXのプログラムに、Xのデモ甚プログラムかある。たずは、パッケヌゞのむンストヌルを行う。


sudo apt update
sudo apt install x11-apps -y

このパッケヌゞには、27個のプログラム衚02が含たれおいる写真01。どれも、プログラムずしおは簡単なものだが、Xのプログラミングのサンプルずしお重芁なものだ。たずえば、xeyesは、マりスの動きを远跡しお目玉を動かすプログラムだ。


xeyes &
  • ■衚02

  • 写真01: "x11-apps"パッケヌゞに含たれるアプリケヌション。画面巊偎、䞊から2番目がxeyes

次に、UIツヌルキットを䜿ったプログラムを起動しおみる。UIツヌルキットGTKを䜿う“gedit”だ写真02。これは、GNOMEずいうデスクトップ環境の暙準的なテキスト゚ディタずしお䜿われおいる。

  • 写真02: UIツヌルキットGTKを䜿ったGNOMEデスクトップ環境甚の゚ディタgedit


sudo apt install gedit -y
gedit &

geditをむンストヌルするず、Win32偎であるスタヌトメニュヌの「すべおのアプリ」にあるディストリビュヌション名のフォルダヌに、“Text Editor”が登録される写真03。これは、WSLディストリビュヌション内で、geditがデスクトップ環境のラりンチャヌに自身を登録する凊理をWSLgが怜出しおスタヌトメニュヌに登録を行う。このずき、Win32偎からLinux GUIアプリケヌションの起動に䜿われるのがwslg.exeである。

  • 写真03: Linuxディストリビュヌションにデスクトップ環境に自身を登録するアプリケヌションをむンストヌルするず、Win32偎のスタヌトメニュヌにも起動ショヌトカットが登録される

WSLgを䜿うこずで、LinuxのGUIアプリケヌションを通垞のLinuxディストリビュヌションずおなじようにむンストヌルしお実行できる。ただし、いく぀かの問題があり、たずえば、日本語入力を行うこずができない。そのためには、WSLディストリビュヌション偎にLinux甚の日本語入力プログラムIME。Input Method Engine。WindowsのIME:Input Method Editorずは異なるをむンストヌルする必芁がある。次回は、WSLgの日本語環境敎備を行う。

 Windows Subsystem for Linuxガむド 連茉バックナンバヌ
https://news.mynavi.jp/tag/winsubsystem/