在 Windows 上使用 WSL2 和 VcXsrv 啟動具有多個顯示器的圖形應用程式的有效方法

在 Windows 上使用 WSL2 和 VcXsrv 啟動具有多個顯示器的圖形應用程式的有效方法

我在 Windows 上使用 WSL2,目前主要只是為了啟動我自訂的 emacs。我啟動 emacs 的工作流程有點麻煩。每次啟動後,我必須啟動具有多個顯示器設定的 Xsrv 應用程式。然後開啟新的windows終端,開啟Ubuntu 18.04,啟動Xfce4圖形環境。然後,在這個圖形環境中啟動一個終端,最後使用emacs指令啟動 emacs。

正如您所注意到的,這些步驟只是為了獲得可在多個顯示器上使用的圖形版本的 emacs。我的問題是如何加速這個進程。現在我的想法是創建一些自動熱鍵腳本並檢查是否可以預設使用 WSL2 啟動圖形會話。如果您能給我一些建議,我將非常感激。這些想法是否已經是我能做的最好的事情了,或者還有其他一些技巧可以讓我只需很少的操作就可以運行圖形版本的 emacs 嗎?

答案1

您可以根據您的設定自動啟動 VcXsrv。這就是我所做的。

第 1 部分:自動啟動 VcXsrv

當您執行 vcxsrv 時,每次都會彈出一個設定畫面。
當您到達最後一個配置畫面時,有一個選項可以保存它。然後,您將建立一個指向已儲存配置的捷徑並將其放入啟動中。 這是一個超級用戶帖子討論自動啟動 vcxsrv 的不同方法。

第 2 部分:匯出您的顯示

x11 支援「轉送」視窗命令到不同的 IP 位址(和桌面),以允許類似 Windows 遠端桌面之類的功能.. 在許多/大多數方面更好.. 但不是全部。此功能從一開始就包含在 x11 中。

要匯出顯示,您需要在啟動 x11 應用程式之前設定 DISPLAY 環境變數。通常,完成此操作的最佳方法是將匯出命令放入 ~/.bashrc 檔案中(假設您使用的是 bash),這樣就不需要每次都執行此操作。該行看起來像export DISPLAY=<ip_address>:0.0 0.0 指的是您要定位的桌面,但為了避免混淆,只需使用 0.0。

完成此操作的快速方法是在 bash 終端機執行以下命令。

  1. echo "export DISPLAY=localhost:0.0" >> ~/.bashrc
  2. source ~/.bashrc(或者您可以在此處重新啟動終端)

現在您應該準備好啟動任何您想要的 x11 應用程式並將其顯示在 Windows 中。

我要指出的是,如果您在使用任何特定應用程式時遇到故障,請嘗試停用 VcXsrv 中的 open gl 支援。在停用此設定之前,我無法啟動 VisualStudio Code。

第 3 部分:運行 Linux x11 的 Windows 快捷方式!

  1. 建立 bash.exe(或 wsl.exe)的 Windows 捷徑。
  2. 在 Target: 方塊中的「.exe」之後,新增「-c [x11_thing_to_run]」(對於 wsl.exe,它是 --exec,而不是 -c)
  3. 如果它無法以圖形模式啟動,請將您的顯示環境重新添加到該行..像這樣bash.exe -c "DISPLAY=127.0.0.1:0.0 xemacs"
  4. 將您的捷徑重新命名為 x11 並為其指定一個 super-spiffo 圖示。 在此輸入影像描述

成品 在此輸入影像描述

答案2

來自Señor CMasMas的回答一切都是正確的。但如果你使用 WSL 2localhost將不起作用。至少,在撰寫本文時它不起作用。 (有傳言稱 WSL 團隊正在研究解決這個問題。)

原因是 WSL 2 將您的 Ubuntu(或其他裝置)放在單獨的(虛擬)電腦中,而不是作為 Windows 電腦的一部分(就像 WSL 1 所做的那樣)。

要解決這個問題,您需要進行以下計算DISPLAY

export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0

執行此操作的一個好方法是將其放入文件中,然後忘記它~/.bashrc。但是 WSL 的登入需要是登入 shell,否則將無法運作。

如果您使用連結到bash.exe,這是更簡單的路線,我認為,您的命令應該如下所示

 bash.exe -i -c emacs

-i意味著 shell 應該是互動的,這意味著它應該執行完整的登入腳本。

但是,只要命令 (emacs) 正在運行,bash 視窗就會打開。當我安裝了 Cygwin 時,我利用了它的run命令,該命令啟動然後消失。所以這是我的命令

C:\cygwin64\bin\run.exe bash -i -c emacs

相關內容