WSL 2 からグラフィカル Linux デスクトップ アプリケーションを実行する - 「エラー E233: ディスプレイを開けません」 [終了] 質問する

WSL 2 からグラフィカル Linux デスクトップ アプリケーションを実行する - 「エラー E233: ディスプレイを開けません」 [終了] 質問する

Windows Subsystem for Linux (WSL) のコマンド ラインからグラフィカル Linux デスクトップ アプリケーションを実行するにはどうすればよいですか?

まず、WSL 2をインストールしました。WSLを使用してWindowsにLinuxをインストールする手順:

  1. Windows 10 Pro Insider Preview Build 19619 をインストールしました。

  2. Ubuntu Linux ディストリビューションをインストールしました。

  3. ディストリビューションバージョンをWSL 1からWSL 2に変更しました。

次に、WSLのBashシェルからグラフィカルLinuxデスクトップアプリケーションを有効にするために、Windows 10のBashシェルからグラフィカルLinuxデスクトップアプリケーションを実行する手順:

  1. Xming という X サーバーをインストールしました。

  2. テストとして、GTK ベースのグラフィカル エディタ Vim をインストールしました。

    sudo apt-get install vim-gtk

  3. ディスプレイ環境変数を設定しました:

    export DISPLAY=:0

  4. アプリケーションを起動しようとしました:

    gvim

    しかし、アプリケーションは起動しませんでした。次のエラーが発生しました:

    E233: cannot open display
    Press ENTER or type command to continue
    E852: The child process failed to start the GUI
    Press ENTER or type command to continue
    

このエラーが発生する理由をご存知ですか?

ベストアンサー1

WSL2のネットワークサブシステムはWSL1で使用されているものとは異なります。違いを考慮するWindows および Linux 上で実行されているネットワーク アプリにアクセスするには:

  • localhostWSL1では、LinuxはWindowsホストと同じIPアドレスを使用するため、またはを使用してアプリケーションにアクセスできます。127.0.0.1
  • WSL2 では、Linux は軽量の仮想マシン上で実行され、異なる IP アドレスを持ちます。Windows ホスト上で実行されているネットワーク アプリにアクセスするには、Windows IP アドレスを使用する必要があります。

WindowsホストのIPアドレスを確認する

Windows ホストの IP アドレスを確認する方法は多数あります。WSL Linux で次のコマンドを実行できます。

  • cat /etc/resolv.confeth0WindowsのインターフェースのIPアドレスを表示します
  • ipconfig.exeWindowsホストのすべてのIP構成を表示します
  • route.exe printWindowsホストのネットワークルーティング構成を表示します

WSL2のDISPLAY変数の設定

nameserverMicrosoft のドキュメントに基づいて、ファイル内のをチェックして DISPLAY 変数を設定できます/etc/resolv.conf。(フォローそして翻訳:すでに述べたとおり)

export DISPLAY=$(grep nameserver /etc/resolv.conf | awk '{print $2}'):0.0

しかし、このソリューションを使用すると問題が発生しました。おそらく、WiFi 接続と複数の仮想ネットワークを備えたノートブックを使用しているためです。以前のソリューションの代わりに、route.exeデフォルト ゲートウェイで使用されるインターフェイスを使用して確認し、Windows IP アドレスを決定します。

export DISPLAY=$(route.exe print | grep 0.0.0.0 | head -1 | awk '{print $4}'):0.0

DISPLAY変数を設定する.profile

ファイル内で DISPLAY 変数を設定できます~/.profile。私は次のコードを使用しました:

# set DISPLAY to use X terminal in WSL
# in WSL2 the localhost and network interfaces are not the same than windows
if grep -q WSL2 /proc/version; then
    # execute route.exe in the windows to determine its IP address
    DISPLAY=$(route.exe print | grep 0.0.0.0 | head -1 | awk '{print $4}'):0.0

else
    # In WSL1 the DISPLAY can be the localhost address
    if grep -q icrosoft /proc/version; then
        DISPLAY=127.0.0.1:0.0
    fi

fi

おすすめ記事