WSL2でLinuxサーバのXアプリを転送表示するまでの試行錯誤

WSL2でLinuxサーバのXアプリを転送表示するまでの試行錯誤

Windows上で動作するWSL2(Windows Subsystem for Linux)から、Linuxサーバ(今回はCentOS7)にSSH接続し、GUIアプリを転送表示(X11フォワーディング)したいと思い、ssh -Yを試してみたのですが、これがなかなか一筋縄ではいきませんでした。
この記事では、最終的に xclock を表示できるまでにたどった試行錯誤の道のりと、正しく動かすための設定ポイントをまとめます。


環境

  • ローカル:Windows 11 + WSL2(Ubuntu 22.04)

  • リモート:CentOS 7

  • 目標ssh -YでGUIアプリ(例:xclock)をWSL側に表示する


最初に遭遇したエラー

$ ssh -X <centos7>
Warning: No xauth data; using fake authentication data for X11 forwarding.
X11 forwarding request failed on channel 0

このメッセージで検索して出てくる情報をいろいろ試しても、xclock が表示されません。


WSL 側の確認

まず、WSL側のXサーバが動作しているかを確認しました。

$ echo $DISPLAY
:0
$ xclock

これで xclock が表示されれば、WSLのXサーバ(WSLgまたはVcXsrvなど)は動いている証拠です。ただし、以下の警告が出ることもあります。

Warning: Missing charsets in String to FontSet conversion

これはフォント関連なので無視しても動作には支障ありません。

追記: 別のマシンで試したところ、WSL(wslg)のバージョンが古いと使えませんでした。その場合は、WSLのバージョンアップをしてください。

wsl —update

※管理者権限のコマンドプロンプトやPowerShellで実行してください。

アップデート後にWSLを再起動し、再び確認してください


.Xauthority の整理

次に、xauth を使って .Xauthority を初期化・整理しました。

cp ~/.Xauthority ~/.Xauthority.bak
xauth remove $(xauth list | awk '{print $1}')
xauth add localhost:10.0 . $(mcookie)

リモート(CentOS7)側の重要設定

これが最も重要なポイントです。

sudo vi /etc/ssh/sshd_config

次の設定を必ず確認・修正します:

X11Forwarding yes
X11UseLocalhost no

ここで

X11UseLocalhost yes

のままだと、WSLからの転送が失敗し続けます。実際、ログにも以下のようなエラーが大量に出ていました:

error: Failed to allocate internet-domain X11 display socket.

設定後、sshd を再起動:

sudo systemctl restart sshd

✅ DISPLAY の許可

WSL 側で接続を受け入れる設定:

export DISPLAY=:0
xhost +

これで、外部(CentOS7)からの接続も許可されます。


🔄 最終接続と動作確認

ssh -Y <centos7>
echo $DISPLAY
xclock

xclock

ついに xclock が表示されました! 🎉


💡 まとめ

  • X11UseLocalhost no は必須

  • .Xauthorityxauth で管理

  • xhost + で接続を許可

  • DISPLAY の値は WSL 側では :0、リモートでは localhost:10.0 等に自動で設定されるのが理想

  • GUIアプリを表示できれば、gedit, xeyes, firefox なども同様に動作可能


📝 おまけ

xclock 実行時のフォント警告は以下のパッケージで解消できます:

sudo yum install -y xorg-x11-fonts-misc

2025-07-11サーバ&テクノロジ

Posted by 納戸 工房