「WSLg」を使ってWindows上でLinuxのGUIアプリを動かしてみよう

2025年1月8日(水)
水野 源
第5回の今回は、WSLに実装されている「Windows Subsystem for Linux GUI(WSLg)」という機能を使用して、Windowsのデスクトップ上でGUIアプリを動かす方法を解説します。

はじめに

第3回第4回では、WSLのUbuntuへのパッケージのインストール方法を紹介しました。APT/snapを使って、Ubuntu向けに用意された膨大なパッケージの中から、好きなアプリをインストールできるようになったのではないでしょうか。

ここまで紹介してきたように、WSLは基本的にWindows Terminal(や、その他のターミナルエミュレーター)を経由したコマンドラインインターフェイス(CLI)で操作しますが、Ubuntuにもグラフィカルなデスクトップ環境や、その上で動作するGUIアプリが数多く存在します。そうしたアプリはCLIしか持たないWSL上では利用できないのでしょうか。

いいえ、実は動かせるのです。現在のWSLには「Windows Subsystem for Linux GUI(WSLg)」と呼ばれる機能が実装されています。これはLinuxのGUIアプリをWindows上でシームレスに動かす機能です。今回はWSLgを使って、Windowsのデスクトップ上でWSL上のGUIアプリを動かしてみましょう。

GUIアプリのインストールと起動

2024年12月現在、Windows 11上にインストールしたWSL2環境であれば、特に設定などは必要ありません。GUIアプリのパッケージをインストールし、ターミナルから実行するだけで動かすことができます。試してみましょう。以下のコマンドを実行してください。Ubuntuの標準ファイルマネージャーである「ファイル(旧名Nautilus)」をインストールします*1

*1: Ubuntuの標準デスクトップ環境でもあるGNOMEでは、アプリケーション名に「ファイル」や「ビデオ」といった、シンプルすぎて逆にまぎらわしい名称が採用されています。データとしてのファイルとアプリ名の「ファイル」の区別がつきにくいため、本記事では旧名である「Nautilus」と表記します。
$ sudo apt install -U -y nautilus

依存関係により、かなり大量のパッケージがインストールされます。インストール完了までしばらく待ちましょう。インストールが完了してプロンプトに復帰したら「nautilus」コマンドを実行してください。

$ nautilus

Windowsのデスクトップ上にNautilusのウィンドウが表示されます。WSL内で起動しているアプリケーションですが、Windowsのデスクトップとシームレスに統合されているため、Windowsのネイティブアプリと区別ができないほどです。

WSLgで起動したNautilus。これでWSL内のファイルをGUIから操作できる

WSL内でのファイル操作は、基本的にcpやmvといったLinuxコマンドを用いて行いますが、複数のファイルをコピーしたり、移動したりする場合は複数のウィンドウを開いてドラッグ&ドロップした方が直感的に操作できるでしょう。特にLinuxのコマンドラインに慣れていない初心者であれば、なおさらです。そういう場合は、GUIのファイルマネージャーをWSL内で動かすのもお勧めです*2

*2: ちなみに、Windowsのエクスプローラーを使ってもWSL内のファイルを操作できます。Windows上のファイルをWSL内へ持ち込みたい場合に便利です。

実際に起動してみると分かりますが、WSL内のNautilusは環境に起因する問題によって起動に時間がかかります。そのため、もっと高速に動作する別のファイルマネージャーを使うのもよい考えです。Ubuntuには様々なファイルマネージャーのパッケージが用意されているので、色々試して好みのアプリケーションを見つけてみてください。軽量なLinux用ファイルマネージャーとしては「PCManFM」などが有名です。PCManFMは、以下のコマンドでインストールと起動ができます。

$ sudo apt install -U -y pcmanfm
$ pcmanfm

PCManFMの画面

CLIでコマンドを実行すると、そのコマンドが終了してプロンプトに復帰するまで、次のコマンドを入力することはできません。これはGUIのアプリを起動した場合も同様です。Nautilusのウィンドウを閉じるまで次のプロンプトは表示されず、そのターミナル上では別のコマンドを実行できなくなってしまいます。GUIアプリはCLIとは独立して動作するので、アプリを起動しただけでCLIがブロックされてしまうのは少々不便です。

そこで、以下のようにコマンドを実行してみてください。詳しいコマンドの解説は省略しますが、「nohup」はハングアップシグナルを無視する、「>/dev/null 2>&1」はターミナルに出力を行わない、最後の「&」はバックグラウンドでアプリを起動することを意味しています。

これで実行したGUIアプリ(ここではnautilus)を起動したターミナルから切り離せます。コマンドを実行したターミナルはすぐにプロンプトに復帰し、起動したGUIアプリは独立して動作するようになります。

$ nohup nautilus > /dev/null 2>&1 &

また、インストールしたGUIアプリはWindowsのスタートメニューから直接起動もできます。いちいち複雑なコマンドを入力することなくWindowsアプリと同様に使えるため、こちらの方が便利かもしれません。

スタートメニューからUbuntuのアプリを起動できる

同一のデスクトップ上でWindowsのアプリとUbuntuのアプリを違和感なく併用できる

日本語フォントのインストール

先ほどの画面を見て、フォルダ名が文字化けし、いわゆる「豆腐」になっていたことに気づいたでしょう。これはWSL版のUbuntuではデフォルトで日本語フォントが使われていないためです。というわけで、日本語フォントを追加しましょう。当然ですが、フォントもAPTで簡単にインストールできます。フォントは好みのものを使用して構いませんが、ここでは「Notoフォント」をインストールします。以下のコマンドを実行してください。

$ sudo apt install -U -y fonts-noto-cjk

フォントをインストールするだけで、日本語ファイル名が正しく表示されるようになります。

NotoフォントをインストールしてからNautilusを再起動した状態。正しくフォルダ名が日本語で表示されている

アプリケーションの日本語化

これで日本語は表示されるようになりましたが、アプリケーションそのものが英語のままでは、少し使いづらいでしょう。特に使い慣れていないアプリであれば、メニューなどは日本語化されているのが望ましいです。そこで、以下のコマンドを実行して、翻訳データが含まれている日本語の言語パックをインストールします。

$ sudo apt install -U -y language-pack-ja language-pack-gnome-ja

インストールが完了したら、以下のコマンドで「ロケール」を日本語に切り替えます。

$ sudo update-locale LANG=ja_JP.UTF-8

ここまでできたら、一度Windows Terminalのタブを閉じて新しくシェルを起動し直し、新しいシェル上で「locale」コマンドを実行してみましょう。各種変数が「ja_JP.UTF-8」になっていることを確認してください。

$ locale

ロケールが日本語になっていることを確認する

この状態で、再度ファイルマネージャーを起動してみましょう。メニューや各種メッセージが日本語に翻訳されているはずです。

日本語化されたNautilus

PCManFMも問題なく日本語化される

WSLで日本語を入力するには

ここまでの作業で日本語を表示できるようにはなりましたが、まだ日本語の入力ができません。「WSLgのアプリはWindowsのデスクトップ上でシームレスに動作する」と述べましたが、実は現時点でWindowsのIMEではWSLgのアプリに直接日本語を入力できないのです。WSLgのアプリに日本語を入力するには、WSLの中でLinux向けの日本語入力システムを動かす必要があります。

まず、以下のコマンドを実行して、インプットメソッドの「Fcitx5」と変換エンジンの「Mozc」をインストールします。

$ sudo apt install -U -y fcitx5-mozc

続いて、環境変数とインプットメソッドの自動起動を設定します。以下のコマンドを実行して「/etc/profile.d/99-local.sh」というファイルを作成してください。

$ cat <<EOF | sudo tee /etc/profile.d/99-local.sh 
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx
fcitx5 >/dev/null 2>&1 &
EOF

設定ファイルが作成できたら、続いて以下のコマンドを実行してファイルの内容を読み込みます。あるいはWindows Terminalを一度終了して、再起動しても構いません。

$ source /etc/profile.d/99-local.sh

日本語配列のキーボードを使っている場合は、以下のようにfcitx5-configtoolコマンドを実行してキーボードの設定を変更してください。なお、英語配列のキーボードを使っている場合には、この手順を省略できます。

$ fcitx5-configtool

すると、インプットメソッドの設定ウィンドウが開きます。

Fcitxの設定ウィンドウ

左側の「現在の入力メソッド」にある「キーボード - 英語(US)」をダブルクリックして削除します。そして右側の「有効な入力メソッド」にある「キーボード - 日本語」をダブルクリックし、入力メソッドとして追加してください。最後に「OK」をクリックしてウィンドウを閉じます。

以後、WSLgのGUIアプリ上で[Ctrl]+[Space]キーか、[半角/全角]キーを押すと日本語入力がONになります。

WSLg上でGUIアプリに日本語入力をする

おわりに

実際のところ「WSLでLinux用のGUIアプリを動かしたい」というシーンはそれほど多くはありません。というのも、FirefoxやLibreOfficeに代表されるようなLinux向けのGUIアプリのほとんどはマルチプラットフォームに対応しており、Windows向けのビルドが存在するからです。そのため「Linuxにしか存在しないアプリを、WSLを使ってWindows上で動かす」というシチュエーションそのものが、ほぼないのです。しかし、今回紹介したファイルマネージャーのように「WSLの管理運用そのものをGUIを使って行いたい」という需要は、それなりにあるのではないでしょうか。

WSLだけでなく、開発作業にLinuxを使うのであればCLIの習熟は必須と言えますが、初心者のうちはすべての作業をCLIで行うのも難しいでしょう。そこでWSLgを使ってGUIと併用してみるのもお勧めです。

次回は、Linux環境に標準的にインストールされている基本コマンド群である「Coreutils」の使いこなしについて解説します。

日本仮想化技術株式会社
Ubuntu Japanese Teamメンバー。理想のフリーデスクトップ環境を求めて東へ西へ……のはずが,気がついたら北の大地で就職していたインフラ寄りのエンジニア。最近レンズ沼にハマる。日本仮想化技術株式会社所属。

連載バックナンバー

開発ツール技術解説
第5回

「WSLg」を使ってWindows上でLinuxのGUIアプリを動かしてみよう

2025/1/8
第5回の今回は、WSLに実装されている「Windows Subsystem for Linux GUI(WSLg)」という機能を使用して、Windowsのデスクトップ上でGUIアプリを動かす方法を解説します。
開発ツール技術解説
第4回

WSLでUbuntuのユニバーサルパッケージシステム「snap」を使う

2024/12/18
第4回の今回は、Ubuntuのパッケージ管理システムである「snap」の基礎知識と使い方について解説します。
開発ツール技術解説
第3回

「Ubuntu」のパッケージ管理を学ぼう

2024/12/4
第3回の今回は、WSL上のUbuntuを活用する上で必須となる、パッケージの管理方法について解説します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています