WSL (Windows 10)

本章主要介紹了在 Windows 系統下使用 Windows Subsystem for Linux 運行 Linux 環境的方法。
引言1
現在大部分學校的競賽練習環境都是構建在 Windows 系操作系統上,但是在 NOI 系列賽中,已經用上了 NOI Linux 這個 Ubuntu 操作系統的修改版。
NOI 競賽(自 2021 年 9 月 1 日)的環境要求如下。2
| 類別 | 軟件或模塊 | 版本 | 備註説明 |
|---|---|---|---|
| 系統 | Linux 內核 | 5.4.0-42-generic |
64 位 x86 (AMD64) |
| 語言環境 | GCC(gcc 和 g++) |
9.3.0 |
C 和 C++ 編譯器 |
| FPC | 3.0.4 |
Pascal 編譯器(注:自 2022 年起,NOI 系列競賽不再支持 Pascal 語言) | |
| Python 2 | 2.7 |
非競賽語言 | |
| Python 3 | 3.8 |
非競賽語言 | |
| 調試工具 | GDB | 9.1 |
|
| DDD | 3.3.12 |
GDB 的 GUI 前端 | |
| 集成開發環境(IDE) | Code::Blocks | 20.03 |
C/C++ IDE |
| Lazarus | 2.0.6 |
Pascal IDE | |
| Geany | 1.36 |
C/C++/Pascal(輕量級)IDE | |
| 文本編輯工具 | Visual Studio Code | 1.54.3 |
|
| GNU Emacs | 26.3 |
||
| gedit | 3.36.2 |
||
| Vim | 8.1 |
||
| Joe | 4.6 |
||
| nano | 4.8 |
||
| Sublime Text | 3.2.2 |
||
| 其它軟件 | Firefox | 79.0 |
瀏覽器 |
Midnight Commander (mc) |
4.8.24 |
文件管理器 | |
| xterm (uxterm) | 3.5.3 |
終端 | |
| Arbiter-local | 1.02 |
程序評測工具單機版 |
考場環境與一般環境會有一系列差異:
- 命令行上的操作和圖形界面上的操作會有差異。
- Linux 和 Windows 的差異,如對於大小寫的敏感性差異。
- 不同編譯器的行為(MSVC 和 GCC)和不同版本的編譯器(Windows 上和 Linux 上的 GCC,32 位和 64 位的 Linux GCC,GCC 7 和 GCC 8 等)的行為,如對變量初始化和對數組下標越界的處理會有差異。
- 不同評測系統(洛谷和 Arbiter)的超時檢查和內存限制檢查會有差異。
這有可能導致一系列的尷尬情況:
- 想用Ctrl+C複製,結果退出了程序。
- 平時 AC 的程序模板到了 Linux 上就 WA。
為了防止考場上出現此類尷尬情況,我們必須要提前熟悉 Linux 系統的操作方法。
雖然 NOI 的官網已經放出了 NOI Linux 的 ISO 鏡像,虛擬機的配置較為麻煩。且由於 NOI Linux 默認自帶圖形界面,無法保證在低配系統上流暢運行。
Windows 10 在一週年更新時推出了 Linux 子系統(WSL),在 2020 年 5 月更新中升級到了 WSL 2。截至 2020 年 6 月 1 日,WSL 已支持安裝 Ubuntu、openSUSE Leap、Kali、Debian 等主流 Linux 分發版。但 WSL 並不支持 NOI 評測用的 Arbiter。
什麼是 Linux 子系統(WSL)
適用於 Linux 的 Windows 子系統(英語:Windows Subsystem for Linux,簡稱 WSL)是一個為在 Windows 10、Windows 11 與 Windows Server 2019 上能夠原生運行 Linux 二進制可執行文件(ELF 格式)的兼容層。
WSL 可讓開發人員按原樣運行 GNU/Linux 環境 - 包括大多數命令行工具、實用工具和應用程序 - 且不會產生虛擬機開銷。
WSL 僅在 64 位 Windows 10 版本 1607 及以上、Windows 11 和 Windows Server 2019/2022 中可用。
啓用 WSL3
自動安裝
Warning
本部分適用於 Windows 10 版本 2004 及更高版本(內部版本 19041 及更高版本)或 Windows 11。
如果你正在使用 2004 以下版本或你的電腦不支持虛擬化,請閲讀下面的手動安裝一節。
如果你正在使用 1607 以下版本的 Windows 10,你的系統不支持 WSL。
-
以管理員身份打開 Windows PowerShell(右擊「開始」按鈕,選擇 Windows PowerShell(管理員)或 Windows 終端(管理員))
-
輸入
wsl --install,並等待所有組件自動安裝完成。期間你可能需要重啓你的計算機來啓用必要的 Windows 功能。 -
安裝完成後,你可以在「開始」菜單或 Windows 終端的標籤頁中找到你安裝的發行版。
-
接下來,請轉到下面「配置分發版」一節完成其他設置。
手動安裝4
Warning
下面介紹手動安裝 WSL 的步驟。如果你已經完成了自動安裝,請跳過此部分。
啓用適用於 Linux 的 Windows 子系統
在安裝適用於 WSL 的任何 Linux 分發版之前,必須在下述兩種方法中選擇一種,以確保啓用「適用於 Linux 的 Windows 子系統」可選功能:
使用命令行:
-
以管理員身份打開 PowerShell 並運行:
1 2 3
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux # 如果你只想要使用 WSL 1 請跳過此步驟 Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -
出現提示時,重啓計算機。
使用圖形界面:

-
打開「控制面板」
-
訪問「程序和功能」子菜單「打開或關閉 Windows 功能」
-
選擇「適用於 Linux 的 Windows 子系統」與「虛擬機平台」
-
點擊確定
-
重啓
安裝內核更新包
如果你想要使用 WSL 1, 請跳過此步驟。
下載 適用於 x64 計算機的 WSL2 Linux 內核更新包 並安裝。
設置 WSL 默認版本
絕大部分情況下,建議使用 WSL 2。 WSL 1 與 WSL 2 的區別,請見 比較 WSL 2 和 WSL 1
關於 systemd
WSL 1 完全不支持 systemd(這意味着一些需要 systemd 的功能無法實現或需要其他替代方案)。WSL 2 已經內建對 systemd 的支持。如果需要使用 systemd,而當前運行的發行版沒有配置為啓用 systemd,可參考 WSL 中的高級設置配置。
1 2 | |
安裝 WSL 分發版

進入 Microsoft Store,搜索「Ubuntu」,然後選擇「Ubuntu」,點擊「安裝」進行安裝。也可打開 Ubuntu 的商店頁面。
Warning
Microsoft Store 的 Ubuntu 隨着 Ubuntu 的更新而更新,因此內容可能會有所改變。如果想獲取穩定的 Ubuntu 長期支持版,可以在 Microsoft Store 安裝 Ubuntu 的 LTS 版本。
配置分發版5
本章以 Windows 自動安裝的 Ubuntu 為例。
運行 Ubuntu
打開「開始」菜單找到 Ubuntu 並啓動,或使用 wsl 命令從 Windows 命令行啓動。
可以為 Ubuntu 創建應用程序磁貼或固定至任務欄,以在下次方便地打開。
初始化
第一次運行 Ubuntu,需要完成初始化。
1 | |
等待一兩分鐘時間,系統會提示創建新的用户帳户。
1 2 3 | |
輸入完用户名以後會提示輸入密碼。在 Linux 中,輸入密碼時屏幕上不顯示文字屬於正常現象。
1 | |
設置好帳户名和密碼後,WSL 就安裝完成了。
1 2 3 4 5 | |
基礎配置
初次安裝好的系統不附帶任何 C/C++ 編譯器,需要手動配置環境。
1 2 3 4 5 6 | |
更換為國內軟件源
Ubuntu 默認的軟件源在國外。可以換成國內的軟件源以加快速度,如 清華 TUNA 的軟件源。
使用與自己系統版本匹配的軟件源
請在頁面中尋找與自己系統版本相配的源(可使用 sudo lsb_release -a 查看 Ubuntu 版本)。
除非你知道你在做什麼,否則不要使用與自己的系統版本不匹配的源!
使用以下命令更新軟件和軟件源:
1 2 3 4 5 6 7 8 9 10 | |
安裝中文環境
1 2 3 4 | |
此時會進入一個設置菜單,不用管,直接回車。
下一個菜單中選擇 zh_CN.UTF-8 回車。
1 2 3 4 5 6 7 8 | |
之後關閉 WSL 並重啓,系統就會變成中文。
再依次輸入下列命令,把 man 幫助頁替換為中文。6
1 2 | |
可以用 man help 測試。
安裝編譯環境7
1 | |
GUIDE 的安裝請參考 Debian 或 Ubuntu 下 GUIDE 的安裝。
這裏安裝的是基礎 + NOI 官方要求的環境,如有需要可以用 sudo apt install <程序名> 來安裝其它軟件包。
若想安裝其他版本可以參考 Debian 官方的 包管理手冊。
以下為一個示例程序:
1 2 3 4 5 | |
Note
Linux 環境下可執行文件可不帶擴展名,運行方式參見上方命令。
進階操作
使用 WSLg 運行 GUI 程序
如果你使用 Windows 10 19044 及以上版本或 Windows 11,則可以使用 WSL 2 提供的集成的桌面體驗。該功能允許你直接安裝並啓動 Linux 桌面程序而無須其他配置。
參見 在適用於 Linux 的 Windows 子系統上運行 Linux GUI 應用
安裝圖形環境,並使用遠程桌面連接
如果你使用的版本尚不支持 WSLg, 可以嘗試使用以下指南開啓圖形界面功能。
以下以 Xfce 為例。
如果只想安裝 Xfce,可以執行以下命令:
1 | |
如果除 Xfce 外想要更多的軟件,可以執行以下命令:
1 | |
圖形環境文件較大,下載解包需要一定時間。
配置 xrdp:
1 2 3 | |
為了防止和計算機原有的遠程桌面衝突,需要更換默認端口。

運行命令 sudo sed 's/port=[0-9]{1,5}/port=otherport/' /etc/xrdp/xrdp.ini,其中 otherport 為其他端口(如 3390)。
1 2 3 | |
運行 sudo service xrdp restart,然後去開始菜單,用 localhost:otherport 來訪問。


使用 Xming 連接
進入 Ubuntu 環境,安裝 xterm:
1 | |
退出 Ubuntu。
從 Xming X Server 下載地址 下載最新的 Xming Server,然後安裝:

如果安裝完後忘記勾選 Launch Xming,需在開始菜單裏打開 Xming:

之後再回到 Ubuntu,鍵入如下指令:
1 | |

如果使用了 xfce4,可以在彈出的窗口中使用如下命令激活 xfce4:
1 | |

運行結果如圖。(在 Xming 中使用Ctrl+C就可以退出該界面。)

WSL 與 Windows 文件的互訪問
Windows 下的硬盤被自動掛載至 Linux 環境下的 /mnt 文件夾下。
如 C 盤在 WSL 下的路徑為 /mnt/c
1 2 3 4 5 6 7 8 9 | |
另外,也可以從文件管理器訪問 WSL 目錄。在安裝 WSL 後,可以在資源管理器的側邊欄中發現 Linux 項,在其中可以訪問所有安裝的發行版中的文件。
同樣,也可以在資源管理器的路徑或運行(Win+R)中直接輸入 \\wsl$ 來轉到 WSL 的目錄。
也可以直接使用諸如 \\wsl$\Ubuntu\home\ 的路徑訪問其子文件夾。
配合 Visual Sudio Code 進行編輯
如果習慣在 Windows 環境下使用 Visual Studio Code 進行代碼編輯,可以安裝 VS Code 中的 Remote - WSL 插件,更方便地對 WSL 系統中的文件進行編輯。
通過 Remote - WSL,可以在 Windows 下的 VS Code 界面中直接對 WSL 子系統進行操作,更加方便地編輯子系統目錄下的文件、更方便地使用終端進行調試。
通過在 WSL 中直接鍵入 code .,可以在該目錄下直接喚出 Visual Studio Code,對於該目錄下的文件進行編輯。
同時,可以通過類似 code filename 的命令,對於指定文件進行編輯。
在插件 Remote - WSL 的 Getting Started 頁面,包含對於編輯操作的詳細簡介。
同時,也可以參考 Visual Studio Code 的官方文檔中關於 WSL 的內容(Remote development in WSL),這篇文章包含從 WSL 安裝到配合插件使用的全流程的更詳細的介紹。
WSL1 升級為 WSL2
Warning
請確認已經完成前面 WSL1 的安裝步驟。
執行命令 wsl -l -v 可以看到 WSL 版本號是 1,需要執行升級,才能到 2。
-
啓用「虛擬機平台」功能
使用 PowerShell 以管理員身份運行:
1dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart然後 重啓電腦。
-
下載 Linux 內核更新包
- x64 的內核更新包。
- ARM64/AArch64 的內核更新包。
-
設置分發版版本
執行命令:
wsl --set-version <分發版名稱> <版本號>如:將 Ubuntu 18.04 設置為 WSL 2 的命令為
wsl --set-version Ubuntu-18.04 2這一步比較耗時,執行完成後通過命令
wsl -l -v來檢查升級是否成功。
FAQ
參見:常見問題,WSL 2 常見問題解答
-
如何在子系統下進行 xxx?
可以用自帶命令行,或者使用圖形界面。 比如説 vim,在命令行中鍵入
man vim,會給出一份詳盡的使用方法。 亦可使用vim --help。關於命令行,可閲讀 命令行
-
對系統資源的佔用量?
這個系統和 Windows 10 共用 Host,所以理論上是比虛擬機佔用小的。
外部鏈接
- 關於適用於 Linux 的 Windows 子系統
- Ubuntu 鏡像使用幫助,清華 TUNA
- Dev on Windows with WSL(在 Windows 上用 WSL 優雅開發)
- GitHub 上的 Awesome-WSL
- 排查適用於 Linux 的 Windows 子系統問題
- WSL1 升級為 WSL2
參考資料與註釋
本页面最近更新:,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:GoodCoder666, Ir1d, H-J-Granger, NachtgeistW, StudyingFather, Enter-tainer, abc1763613206, Anti-Li, shenyouran, Chrogeek, SukkaW, Henry-ZHR, Early0v0, andylizf, tootal, Marcythm, CoelacanthusHex, indevn, qinyihao, peasoft
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用