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-session
VcXsrv を実行して接続するように構成されています。しかし、起動には数分かかることがあります。
これを試した後は、実際にWSLを終了してawsl --terminate <distroname>
を実行して再起動する必要があります。そうでなければ同時にできないことが多いです。
繰り返しますが、これを「よりよく」実行するには、上記のスクリプト/プロジェクトのいずれかを使用してください。彼らは、タスクがより適切に実行されるように、その名前空間内に環境変数、ソケット、およびシンボリックリンクを設定しようとします。