帶有 Ubuntu 和 VCXSRV 的 WSL2:xeyes 和 git citool 工作但無法啟動 ubuntu-desktop
xeyes 和 git citool 正在工作,但我無法啟動 ubuntu-desktop。試過了
startx
或者
sudo startx
但錯誤消息顯示:未找到螢幕(EE)
是否有可能讓 ubuntu-desktop 在 Windows 10 Pro 上使用 vcxsrv 執行?在網際網路上搜尋了幾個小時,但找不到解決方案。
在我開始之前,讓我說“不要那樣做”;-)。我已經做到了,我會告訴你怎麼做,但是……只是不要。當我們進入答案時,我將說明原因。
您回答問題有一個“簡單的部分”,嗯……困難的部分。
讓我們討論兩個主要問題:
容易的部分
首先,通過發出
startx
,您正在嘗試在 Linux 中啟動 X 伺服器。您實際上已經通過執行 VcXsrv 做到了這一點。此時您真正需要的是會話管理器——即gnome-session
. 那是容易的部分。困難的部分
困難的部分是 Gnome(以及因此 Ubuntu 桌面)確實需要Systemd。WSL 不支持 Systemd,至少不是沒有很多hackery。那個hackery改變了WSL中很多事情的工作方式。您應該能夠相當深入地研究 WSL、Linux 和 Systemd 的內部結構,以便對“出錯”的事情進行故障排除。
雖然有一些項目試圖為您做這種黑客行為,但我仍然建議您了解對WSL實例進行更改的方式和原因。
所以,在一個非常高的層次上,我將在這裡介紹其中的一些內容。
一些替代品
但讓我首先提供一些在 WSL 上執行 Ubuntu Desktop 的替代方案:
- 如果您真的想要在 WSL 上獲得 Linux 桌面體驗,請選擇不需要 Systemd 的,例如 Xfce4。
- 如果你真的想要 Windows 上的 Ubuntu Desktop/Gnome,那麼在 VM 中執行它。您將放棄 WSL 提供的與 Windows 的緊密集成,但您將擁有一個具有完全支持的 Systemd 的 Ubuntu。
好的,所以現在我試圖說服你但失敗了…… ;-)
如何在 WSL2 上執行 Systemd,允許您在 VcXsrv 上執行 Ubuntu 桌面
讓我們介紹一些“幫助”您在 WSL 上執行 Systemd 的項目:
我還要指出,Genie 用於執行 Ubuntu 桌面的這些說明。
如果您想跳過其餘部分,可以直接查看這些說明。或者,我可以向您展示“快速而骯髒”的啟動和執行方式。然後,您可以決定是否要完成完整設置。
最終,所有這些都是在 WSL/Linux 中創建一個新的命名空間,其中 Systemd 可以作為 PID1 執行。
您可以通過執行以下命令看到這一點(並讓 Ubuntu Desktop 快速執行):
sudo -b unshare --pid --fork --mount-proc /lib/systemd/systemd --system-unit=multi-user.target
這會在具有自己的 PID 映射的新命名空間中啟動 Systemd。在該命名空間內,Systemd 將是 PID1(它必須執行)並擁有所有其他程序。但是,“真正的”PID 映射仍然存在於該命名空間之外。
請注意,這是啟動 Systemd 的“最低限度”命令行。它至少不支持:
- Windows 互操作(執行 Windows .exe 的能力)
- Windows PATH(無論如何,如果沒有 Windows 互操作,這不是必需的)
上面列出的腳本和項目做了額外的工作以使這些東西也能正常工作。
等待幾秒鐘讓 Systemd 啟動,然後:
sudo -E nsenter --all -t $(pgrep -xo systemd) runuser -P -l $USER -c "exec $SHELL"
這進入了命名空間,您現在可以使用它
ps -efH
來查看它systemd
在該命名空間中作為 PID 1 執行。到那時, Systemd 已經足夠執行並配置為執行
gnome-session
並連接到 VcXsrv。不過,啟動可能需要幾分鐘。請注意,嘗試此操作後,您確實應該退出 WSL,發出 a
wsl --terminate <distroname>
並重新啟動它。否則,有許多事情在此期間將無法正常工作。同樣,要“更好”地做到這一點,請使用上面列出的腳本/項目之一。他們將嘗試在該命名空間內設置環境變數、套接字和符號連結,以使事情更正常地執行。