UbuntuとVCXSRVを含むWSL2:xeyesとgit citoolは機能しますが、ubuntu-desktopを起動できません。

UbuntuとVCXSRVを含むWSL2:xeyesとgit citoolは機能しますが、ubuntu-desktopを起動できません。

xeyesとgit citoolは動作しますが、ubuntu-desktopを起動できません。試験を終えた

startx

または

sudo startx

しかし、エラーメッセージは次のとおりです。画面が見つかりません(EE)

Windows 10 Proでvcxsrvを使用してubuntu-desktopを実行できますか?数時間インターネットを検索しましたが、解決策が見つかりませんでした。

答え1

始める前に「これをしないでください」と申し上げます;-)。私はやって、どうするか教えてくれますが…しないでください。その理由は回答を受け取る際に説明します。

質問に答えるには「簡単な部分」がありますが…難しい部分もあります。

2つの主な質問について議論しましょう。

簡単な部分

まずstartx。実際にVcXsrvを実行してこれを実行しました。この時点で本当に必要なのはセッションマネージャですgnome-session。これがまさに簡単な部分です。

難しい部分

難しい部分は、Gnome(およびUbuntuデスクトップ)が行うことです。必要システムd。 WSLは、少なくとも多くのハッキングがなければSystemdをサポートしません。このハッキングにより、WSLで多くのことが行われる方法が変わりました。 WSL、Linux、およびSystemdの内部を簡単に掘り下げ、「間違った」問題を解決できる必要があります。

このハッキングを試みるプロジェクトがありますが、それでもお勧めします。どうですか?そしてなぜWSLインスタンスが変更されました。

したがって、非常に高いレベルでここでそれらのいくつかをカバーします。

いくつかの選択肢

しかし、まずWSLでUbuntuデスクトップを実行するためのいくつかの選択肢を提供します。

  • WSLでLinuxデスクトップ環境が本当に必要な場合は、Xfce4などのSystemdを必要としないデスクトップ環境を選択してください。
  • WindowsでUbuntu Desktop / Gnomeを実際に実行するには、仮想マシンで実行してください。 WSLが提供するWindowsとの緊密な統合を放棄しますが、完全なSystemdサポートを備えたUbuntuを持っています。

まあ、今はあなたを説得しようとしましたが、失敗しました...;-)

WSL2でSystemdを実行してVcXsrvでUbuntuデスクトップを実行する方法

WSLでSystemdを実行するのに役立ついくつかのプロジェクトを紹介します。

また、Genieが次の用途に使用されることを指摘したいと思います。このガイドラインUbuntuデスクトップを実行するとき。

残りの部分をスキップするには、このガイドに直接移動できます。あるいは、起動して実行する「高速で簡単な」方法を紹介します。その後、設定全体を進めるかどうかを決定できます。

最終的に、これはすべて、SystemdがPID1で実行できるWSL / Linuxに新しい名前空間を作成することです。

次のコマンドを実行してこれを確認し、Ubuntuデスクトップをすばやく実行できます。

sudo -b unshare --pid --fork --mount-proc /lib/systemd/systemd --system-unit=multi-user.target

これにより、独自のPIDマッピングを持つ新しい名前空間でSystemdが起動します。その名前空間内で、SystemdはPID1になり(実行中でなければならないため)、他のすべてのプロセスを所有します。ただし、「実際の」PID マッピングは、この名前空間の外側にまだ存在します。

これはSystemdを起動するための「最小」コマンドラインです。少なくとも、以下はサポートしていません。

  • Windows Interop(Windows .exeを実行する機能)
  • Windowsパス(Windows Interopがない場合は不要)

上記のスクリプトとプロジェクトが機能するには、追加の作業が必要です。

Systemd が起動するまで数秒待ってから、次の手順を実行します。

sudo -E nsenter --all -t $(pgrep -xo systemd) runuser -P -l $USER -c "exec $SHELL"

これはネームスペースに移動し、そのネームスペースからPID 1として実行されていることをps -efH確認するために使用できるようになりました。systemd

それまではあるだろう。十分Systemd が実行中で、gnome-sessionVcXsrv を実行して接続するように構成されています。しかし、起動には数分かかることがあります。

これを試した後は、実際にWSLを終了してawsl --terminate <distroname>を実行して再起動する必要があります。そうでなければ同時にできないことが多いです。

繰り返しますが、これを「よりよく」実行するには、上記のスクリプト/プロジェクトのいずれかを使用してください。彼らは、タスクがより適切に実行されるように、その名前空間内に環境変数、ソケット、およびシンボリックリンクを設定しようとします。

関連情報