WSL2:Windows 親生的 Linux 子系統

IOT物聯網小鎮 發表於 2021-07-22
Linux

WSL2:Windows 親生的 Linux 子系統

作 者:道哥,10+年的嵌入式開發老兵。

公眾號:【IOT物聯網小鎮】,專注於:C/C++、Linux作業系統、應用程式設計、物聯網、微控制器和嵌入式開發等領域。 公眾號回覆【書籍】,獲取 Linux、嵌入式領域經典書籍。

轉 載:歡迎轉載文章,轉載需註明出處。

在上一篇文章中,我們主要聊了一下:在 Windows 系統中,安裝 WSL 子系統

文章在此:WSL:在 Windows 系統中開發 Linux 程式的又一神器

但是 WSL 只是長得像 Linux 而已,雖然在這個子系統中,我們可以執行 Linux 程式,但是到了底層,WSL 呼叫的還是 win32 API

也就是說:WSL 只是一個適配層

後來,微軟終於放出了 WSL2 這個真正的 Linux 子系統,這是一個真正的 Linux 完整核心,與傳統的虛擬機器 VitualBoxVMWare 一樣,但是它與宿主機的互操作性更好。

為了完整性,我們就繼續把這個流程給走完。

在這個過程中遇到的問題、需要的安裝軟體等資源,已經上傳到網盤,在文末有下載地址。

安裝 WSL2 的前提條件

在開始之前,我們先來看一下目前電腦中的 WSL 的版本。

Windows 命令列視窗,輸入指令: wsl --list --verbose(或者輸入簡化版本: wsl -l -v),得到結果:

WSL2:Windows 親生的 Linux 子系統

可以看到我們上一篇文章中安裝的 Ubuntu-18.04,而且 WSL 的版本是 1

如果要升級到 WSL2Windows 作業系統的核心版本必須滿足一定的要求,如下:

WSL2:Windows 親生的 Linux 子系統

我們就按照官方的要求,檢查一下自己的電腦是否滿足需求:選擇 Windows 徽標鍵 Win + R,然後鍵入 winver,選擇 “確定”。

WSL2:Windows 親生的 Linux 子系統

看來我的系統能滿足要求,那就繼續下一個步驟!

如果你的核心版本不滿足這個需求,可以搜尋關鍵字 “WIN10 獲取內部預覽版本”,就可以找到解決方案。

安裝 WSL2

繼續以管理員身份啟動 PowerShell,然後執行指令:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

WSL2:Windows 親生的 Linux 子系統

此時,又到了重啟電腦的時候!

重啟之後,繼續在 PowserShell 中,把 Ubuntu-18.04 設定為 WSL2 版本。

輸入的指令是:

wsl --set-version Ubuntu-18.04 2

這個步驟可能會遇到這樣的問題:

WSL2:Windows 親生的 Linux 子系統

解決方法:從微軟的官網下載 WSL2 Linux 核心升級包,下載地址是:

WSL2 Linux 核心升級包

WSL2:Windows 親生的 Linux 子系統

也可以從文末的網盤中下載

下載之後,一路 Next 安裝即可。

此時,在 PowerShell 中重新執行 wsl --set-version Ubuntu-18.04 2 指令(需要等待一段時間,大概 1 分鐘左右吧):

WSL2:Windows 親生的 Linux 子系統

同時,把 WSL 的預設版本改為 2wsl --set-default version 2

此時,我們再執行指令 wsl -l -v 來檢視一下,就變成 WSL2 版本了:

WSL2:Windows 親生的 Linux 子系統

現在,重新啟動一下 Ubuntu-18.04 系統,雖然還是黑乎乎的視窗,但是它可是一個完整、純正的 Linux 作業系統

WSL2:Windows 親生的 Linux 子系統

安裝桌面環境

這部分的操作,參考:https://autoize.com/xfce4-desktop-environment-and-x-server-for-ubuntu-on-wsl-2/。

關於 Linux 的桌面環境,它與 Windows 桌面環境的理念有一些不一樣。

Linux 系統中,桌面環境是一個獨立的應用程式,不屬於作業系統的一部分。

換句換說,即使沒有桌面環境,也可以很愉快的玩 Linux 系統,比如那些伺服器之類的裝置。

Linux 中的桌面由客戶端服務端組成,它們之間通過一個協議來通訊,俗稱:X11

服務端:負責圖形的顯示;

客戶端:根據系統設定的 DISPLAY 環境變數,把顯示圖形的請求傳送給服務端;

因此,為了讓我們的 Ubuntu 顯示圖形介面,我們就需要安裝一個服務端軟體和客戶端軟體。

注意:這裡的服務端軟體是安裝在 Windows 系統中的,客戶端是安裝在 Ubuntu-18.04 系統中的。

安裝客戶端

Ubuntu-18.04 的終端視窗中,執行如下指令安裝客戶端軟體 xfce4

sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install xfce4

配置 DISPLAY 環境變數

因為 Ubuntu 中的客戶端 xfce4 需要把顯示請求,通過網路傳送給 Windows 上的服務端,因此需要知道 Windows 系統的 IP 地址,在 Windows 系統中的命令列視窗中檢視:ipconfig

WSL2:Windows 親生的 Linux 子系統

然後在 Ubuntu-18.04 中把這個 IP 地址,配置到家目錄下的 .bashrc 檔案中:

$ cd
$ vi .bashrc

在檔案末尾新增:

export DISPLAY=192.168.192.1:0

儲存、關閉檔案之後,執行:source ~/.bashrc 更新即可。

安裝服務端

圖形介面有 VcXsrvXming 兩款軟體,我們選擇前面的 VcXsrv

同樣的,我已經把 vcxsrv-64.1.20.9.0.installer.exe 放在網盤裡,下載後一路 Next 安裝。

安裝之後,啟動 Windows 桌面上的 XLaunch 程式:

WSL2:Windows 親生的 Linux 子系統

然後,按照參考文件中的配置,如下:

WSL2:Windows 親生的 Linux 子系統

WSL2:Windows 親生的 Linux 子系統

WSL2:Windows 親生的 Linux 子系統

WSL2:Windows 親生的 Linux 子系統

在最後一個步驟,可以把配置資訊儲存在桌面上。

啟動客戶端

Ubuntu-18.04 系統中的命令列視窗,執行指令:startxfce4

此刻,神器的事情就發生了:你的 Windows 系統中是不是就跳出了下面這個視窗

WSL2:Windows 親生的 Linux 子系統

可以開啟桌面上 File System,是不是看到了很多熟悉的身影?

在開啟 mnt 目錄,是不是看到了 Windows 系統中的碟符

WSL2:Windows 親生的 Linux 子系統

WSL2:Windows 親生的 Linux 子系統

但是,中文資訊顯示的都是亂碼!那我們就來安裝中文語言支援包。

中文支援

Ubuntu-18.04 系統命令列視窗,設定 locale:

此時,我們可以使用桌面環境中的終端視窗,如下圖所示:

WSL2:Windows 親生的 Linux 子系統

sudo vi /etc/locale.gen

把下圖中的藍色這一行復制,然後去掉前面的 #空格,然後儲存、退出。

WSL2:Windows 親生的 Linux 子系統

然後在終端中執行指令: sudo locale-gen

WSL2:Windows 親生的 Linux 子系統

單機右上角的使用者名稱,選擇 【Log Out..】

WSL2:Windows 親生的 Linux 子系統

此時,Ubuntu 虛擬機器的 WSL 視窗中的 xfce4 客戶端會退出,再次執行 startxfce4 啟動客戶端:

WSL2:Windows 親生的 Linux 子系統

再次,在桌面中的終端視窗中,把 locale 改為中文:

sudo vi /etc/default/locale

LANG=C.UTF-8 改為 LANG=zh_CN.UTF-8

然後,把下面這個幾個中文語言包給它安裝進去:

sudo apt install language-pack-zh-hans
sudo apt install language-pack-gnome-zh-hans
sudo apt install language-pack-kde-zh-hans

此刻,你再看一下剛才的那些亂碼,是不是已經正確顯示中文了?

WSL2:Windows 親生的 Linux 子系統


------ End ------

接下來,你還可以安裝各種 IDE,探索它們是如何共享檔案的...

文中需要安裝的軟體,已經上傳到網盤中了。

請在公眾號後臺回覆721(不是留言區啊),即可收到下載地址,謝謝!

推薦閱讀

【1】C語言指標-從底層原理到花式技巧,用圖文和程式碼幫你講解透徹
【2】一步步分析-如何用C實現物件導向程式設計
【3】原來gdb的底層除錯原理這麼簡單
【4】內聯彙編很可怕嗎?看完這篇文章,終結它!

其他系列專輯精選文章C語言Linux作業系統應用程式設計物聯網

WSL2:Windows 親生的 Linux 子系統

星標公眾號,能更快找到我!

WSL2:Windows 親生的 Linux 子系統