wsl使用可视化界面_通过 VcXsrv 在 WSL2 上使用图形化界面(xfce4)
當(dāng)然網(wǎng)絡(luò)上已經(jīng)有很多相關(guān)教程了,但是對(duì)于我的情況那些方法都不完全正確以至于我不能使用圖形化界面。所以如果你查了很多方法也不能使用的話可以看看這篇。
這是我的系統(tǒng)參數(shù)。
開門見山
啟動(dòng) VcXsrv
在 Windows 上下載 VcXsrv 并安裝。
運(yùn)行,第一步的設(shè)置窗口狀態(tài)怎么選關(guān)系不大,我一般是用 One large window ,默認(rèn)的 Multiple windows 在多屏情況下顯示會(huì)有一些問題。然后 Display number 可以用默認(rèn)的 -1 ,或者設(shè)置成 0 (當(dāng)然也可以是其他的數(shù)字,具體內(nèi)容后面解釋)。
下一步,選擇 Start no client 。
下一步,選項(xiàng)全部勾上,Additional parameters 不用管。
點(diǎn)下一步,點(diǎn)完成,這時(shí)候會(huì)出現(xiàn)一個(gè)黑色的窗口,這樣 VcXsrv 就啟動(dòng)好了。
WSL 啟動(dòng)桌面程序
首先下載 xfce4 ,sudo apt install xfce4 。
然后在 .bashrc 文件末尾中添加一句 export DISPLAY=xx.xx.xx.xx:0 ,其中的 xx.xx.xx.xx 是 VcXsrv 所在主機(jī)的 IP 地址,即在 Windows 的 cmd 或 powershell 中執(zhí)行 ipconfig 里的以太網(wǎng)適配器的 IPv4 地址。
比如我的是 10.32.223.175 ,所以我要在 .bashrc 中添加 export DISPLAY=10.32.223.175:0 。
然后 source .bashrc 或者重新進(jìn)入 wsl 終端。
然后執(zhí)行 startxfce4 ,如果正常的話,之前 VcXsrv 的黑色窗口就會(huì)顯示 xfce4 的桌面了,并且 wsl 終端會(huì)輸出 xfce4 的日志。
發(fā)生了什么
整個(gè)過程中比較重要的概念是 Display number 和環(huán)境變量 $DISPLAY 。在 VcXsrv 中設(shè)置的 Display number 就是 $DISPLAY 中的分號(hào)后面的那個(gè)數(shù)字。當(dāng)然,如果 VcXsrv 使用默認(rèn)的 Display number (-1)就是讓 VcXsrv 自動(dòng)設(shè)置這個(gè)數(shù)字,在當(dāng)前情況下用默認(rèn)設(shè)置也是可以的。
當(dāng)啟動(dòng)好 VcXsrv 后就相當(dāng)于在 Windows 上啟動(dòng)了一個(gè)虛擬顯示器,然后 WSL 的桌面程序需要連接上這個(gè)虛擬顯示器才能正常顯示。Linux 就是通過 $DISPLAY 這個(gè)環(huán)境變量來尋找目標(biāo)顯示器。網(wǎng)絡(luò)上有很多 wsl 連接 VcXsrv 的教程的方法是將 $DISPLAY 設(shè)置成 :0.0 ,這貌似在 WSL1 上是可行的,但是在 WSL2 上就行不通了。(但是如果用 xrdp 來使用圖形界面使用這個(gè)設(shè)置就是可以的,因?yàn)?xrdp 是運(yùn)行在 wsl 的 Linux 上的,而且 :0.0 的意思其實(shí)就是 localhost:0.0 。至于為什么是 0.0 ,是因?yàn)檫@兩個(gè)數(shù)字分別代表 Display 和 Screen,即 D.S 。 0.0 的意思是 0 號(hào) Display 的 0 號(hào) Screen 。至于更詳細(xì)的解釋可以在 Linux 中執(zhí)行 man X 來查看。)
網(wǎng)絡(luò)上另外還有一個(gè)方法是將 $DISPLAY 設(shè)置成 $(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0 ,這個(gè)值是 /etc/resolv.conf 中的 nameserver 的 IP 。不知道為什么這個(gè)方法在我的機(jī)子上也行不通(可能是因?yàn)閯e人的 wsl2 的 nameserver 的 IP 和 Windows 的 IP 是一樣的?)。
而 $DISPLAY 的本質(zhì)是為了告訴 Linux 的圖形程序 X server 的地址和 Display number。所以將地址設(shè)置成 VcXsrv 所在主機(jī)的 IP 地址那應(yīng)該是沒問題的。如果執(zhí)行 startxfce4 還是連接不上,并顯示 xrdb: Connection timed out 那么檢查下 IP 能否 ping 通,以及可能要設(shè)置下 WIndows 的防火墻規(guī)則。
其他
為什么設(shè)置的最后一步要全點(diǎn)上勾。
最后一個(gè)勾是 Disable access control ,這是允許所有客戶程序都能連接這個(gè) VcXsrv。有的教程說要在最后一步的 Additional parameters fo VcXsrv 中加上 -ac 這個(gè)參數(shù),但其實(shí)這個(gè)參數(shù)應(yīng)該和勾上 Disable access control 的作用是一樣的。因?yàn)?-ac 的解釋就是 disable access control restrictions 。
如果不把 export 寫在 .bashrc 中會(huì)怎么樣
如果只在終端里設(shè)置 $DISPLAY 的值其實(shí)也能運(yùn)行,但是這樣在圖形界面中運(yùn)行一些圖形程序的時(shí)候可能就會(huì)出問題了。因?yàn)橹辉诮K端執(zhí)行 export ... 那么環(huán)境變量只會(huì)在這個(gè)終端有用,如果退出終端或者打開新的終端 $DISPLAY 的值就沒了,所以要放在 .bashrc 中。當(dāng)然用其他永久設(shè)置環(huán)境的方法也是可以的。
總結(jié)
以上是生活随笔為你收集整理的wsl使用可视化界面_通过 VcXsrv 在 WSL2 上使用图形化界面(xfce4)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么叫缺位_一位父亲能够给予孩子的最好礼
- 下一篇: c++二进制文件java读取int_吃透