Ubuntu

帶有 Ubuntu 和 VCXSRV 的 WSL2:xeyes 和 git citool 工作但無法啟動 ubuntu-desktop

  • December 10, 2021

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,發出 awsl --terminate <distroname>並重新啟動它。否則,有許多事情在此期間將無法正常工作。

同樣,要“更好”地做到這一點,請使用上面列出的腳本/項目之一。他們將嘗試在該命名空間內設置環境變數、套接字和符號連結,以使事情更正常地執行。

引用自:https://unix.stackexchange.com/questions/680927