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
💡 まとめ
X11UseLocalhost no
は必須.Xauthority
はxauth
で管理xhost +
で接続を許可DISPLAY
の値は WSL 側では:0
、リモートではlocalhost:10.0
等に自動で設定されるのが理想- GUIアプリを表示できれば、
gedit
,xeyes
,firefox
なども同様に動作可能
📝 おまけ
xclock
実行時のフォント警告は以下のパッケージで解消できます:
sudo yum install -y xorg-x11-fonts-misc
ディスカッション
コメント一覧
まだ、コメントがありません