![头图](./images/WSL1.png)

* * *

## 0x01 引言

众所周知，尽管现在大部分学校的竞赛练习环境都是构建 XP 等 Windows 系操作系统，但是在 NOI 系列赛中，早已用上了 NOI Linux 这个 Ubuntu 操作系统的阉割版。  
![NOI 竞赛的环境要求](./images/WSL2.png)           

<div align='center'> NOI 竞赛的环境要求 </div>

或许大家对自己 Windows 环境下的 Dev-C++ 等都已熟识，但是当场景突然切换到 Linux 的时候，你会不会不知所措？

> 「想用 <kbd>Ctrl</kbd>+<kbd>C</kbd> 复制，结果退出了程序」  
> 「平时 AC 的程序模板到了 Linux 上就 WA」……

![平台差异（转自百度文库”NOIP 标准评测系统及相关问题 “）](./images/WSL3.png)

<div align='center'> 平台差异（转自百度文库“NOIP 标准评测系统及相关问题”） </div>
    
为了防止考场上出现此类尴尬情况，我们必须要提前熟悉下 Linux 系统的操作方法。

虽然在 NOI 的官网已经放出了 NOI Linux 的 ISO 镜像，但是如果跑虚拟机的话，配置也相当麻烦，包括激活 VMware，用 VMware 装系统开虚拟机等步骤，且 NOI Linux 默认自带图形界面，两个系统一起运行是低配党的噩梦。

Windows 10 作为微软的新一代操作系统，紧跟时代潮流，在一周年更新时推出了 Linux 子系统（WSL），可以供装不起 VMware 等虚拟机的同学食用。  
缺点是没有 NOI 评测用的 **Arbiter**，但是在各大 OJ 背书的情况下谁在乎呢……
???+ note "补充资料：何为 Linux 子系统（WSL）？(via 百度百科)"
     Windows Subsystem for Linux（简称 WSL）是一个为在 Windows 10 上能够原生运行 Linux 二进制可执行文件（ELF 格式）的兼容层。它是由微软与 Canonical 公司合作开发，目标是使纯正的 Ubuntu, OpenSUSE, Kali Linux 和 Debian 映像能下载和解压到用户的本地计算机，并且映像内的工具和实用工具能在此子系统上原生运行。  
     WSL 提供了一个微软开发的 Linux 兼容内核接口（不包含 Linux 代码），来自 Linux 的用户模式二进制文件在其上运行。  
     此子系统起源于命运多舛的 Astoria 项目，其目的是允许 Android 应用运行在 Windows 10 Mobile 上。此功能组件从 Windows 10 Insider Preview build 14316 开始可用。

* * *

## 0x02 准备

首先，你需要一个最新的 Windows 10 操作系统，这点不必多说。  
其次，你需要配置一下开发人员模式环境。

1.  设置 -> 更新与安全 -> 开发人员模式框选 -> 是
    ![来，跟着箭头走](./images/WSL4.png)     

<div align='center'> 来，跟着箭头走 </div>
 
2. 控制面板 ->程序 ->启用和关闭 Windows 功能 ->框选 “适用于 Linux 的 Windows 子系统”-> 确定 ->重启
![自行忽略乱码](./images/WSL5.png)
 给系统盘留下足够的空间，毕竟装好的 Linux 没法迁移。
这次演示我们会安装 Ubuntu，因为 NOI Linux 正是 Ubuntu 的修改版。
只要学会了方法，你也可照葫芦画瓢，安装 Windows 应用商店中的其他子系统。
## 0x03 开搞
去 Windows 自带的应用商店，搜索 "Ubuntu"，然后选第一个安装。  
亦可打开 <https://www.microsoft.com/zh-cn/p/ubuntu/9nblggh4msv6>      
???+ warning
    Windows 10 商店的第一个 Ubuntu 随着 Ubuntu 的更新而更新，因此内容可能会有所改变。
    可使用 `sudo lsb_release -a` 查看自己的 Ubuntu 版本。
    也可安装带有版本号的旧 Windows。
安装完后，打开 Ubuntu，等待一段时间，让其自己配置，不久就会提示你设置用户名和密码。   
（这里看你喜好，推荐设置短点，毕竟 ** 本地环境不怕攻击 **）     

**Linux 区分大小写！**

![](./images/WSL6.png)
 这样之后，一个纯净的 Ubuntu 系统安装完成了！

## 0x04 基础配置

 ** 以下命令均可直接右键复制粘贴进窗口哦！**

![](./images/WSL7.png)
 正如图片所示，这个系统纯净到连个编译器都没有，所以这一节来看看基础的环境配置。

### 更换为国内软件源

Ubuntu 默认的软件源在国外，我们可以换为国内的加快速度，如 [清华 TUNA 的软件源](https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/)。  

可以访问 [TUNA 的页面](https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/) 来获得国内源的信息。

???+ warning  
    ** 请在页面中寻找与自己系统版本相配的源（可使用 `sudo lsb_release -a` 查看，具体详见 `0x03` ）  
    ** 除非你知道你在做什么，否则不要使用与自己的系统版本不匹配的源！\*\*     

使用的命令

```bash
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list
# （按 i 之后将上文的源右键粘贴进去，编辑完后按 Esc，再输入 :wq 和回车）
sudo apt update
sudo apt upgrade -y
```

![](./images/WSL9.png)

### 安装中文环境

```bash
sudo apt install  language-pack-zh-han* -y
sudo locale-gen zh_CN.GB18030 && sudo locale-gen zh_CN.GB2312 && sudo locale-gen zh_CN.UTF8
# 中文字体，别忘了同意 EULA
sudo apt install fontconfig -y
sudo apt install ttf-mscorefonts-installer -y
# 下面的再执行一遍以防万一
sudo apt install -y --force-yes --no-install-recommends fonts-wqy-microhei
sudo apt install -y --force-yes --no-install-recommends ttf-wqy-zenhei
sudo dpkg-reconfigure locales
```

使用 `sudo dpkg-reconfigure locales` 进入菜单，选择 `zh_CN.UTF-8` 回车，下一个菜单中也是选它打回车。

![](./images/WSL10.png)
![](./images/WSL11.png)
 之后关上 Ubuntu 重开一遍登录，是不是变中文了？
再依次输入下列命令，把 `man` 帮助页替换为中文：[via](https://blog.csdn.net/qq_14989227/article/details/72954523)

```bash
sudo apt install manpages-zh
sudo vi /etc/manpath.config
:1,$s#/usr/share/man#/usr/share/man/zh_CN#g
:wq
```

 可以用 `man help` 测试下。

### 安装编译环境

```bash
sudo apt install build-essential vim ddd gdb fpc emacs gedit anjuta lazarus -y
wget http://download.noi.cn/T/noi/GUIDE-1.0.2-ubuntu.tar
tar -xvf GUIDE-1.0.2-ubuntu.tar
cd GUIDE-1.0.2-ubuntu
chmod +x install.sh && ./install.sh
```

这是基础的 + NOI 官方要求环境，如有需要可以用 `apt install 程序名` 来安装别的。
若想安装其他版本可以参考下 [这个](https://www.cnblogs.com/EasonJim/p/7144017.html)

来个程序玩玩：

```bash
$ vim cpuid.cpp
$ g++ -Wall cpuid.cpp -o cpuid
$ ./cpuid
AMD Ryzen 5 1400 Quad-Core Processor
```

**Tips：Linux 环境下可执行文件可不带扩展名，实现方式看上方命令行 **

## 0x05 进阶操作

### 安装图形环境，并使用远程桌面连接

推荐图形环境用 xfce4，不臃肿。

```bash
sudo apt install xfce4 tightvncserver -y
# 或使用 sudo apt install xubuntu-desktop -y
# xubuntu 安装的软件多，基础环境可用第一种
```

图形环境是个大头，因此要多等会，静静等待下载解包。
下面配置 xrdp：

```bash
sudo apt install xrdp -y
echo "xfce4-session" >~/.xsession
sudo service xrdp restart
```

 为了防止和你计算机本来带的远程桌面冲突，最好换一下端口。
![](./images/WSL12.png)

<div align='center'> 不换端口的结果 </div>
 运行命令 `vim /etc/xrdp/xrdp.ini`，把 `port=3389` 改为别的（如 `port=3390`），然后保存即可。
![](./images/WSL13.png)
 运行 `sudo service xrdp restart`，然后去开始菜单，用 `localhost: 你配置的端口 ` 来访问。
![](./images/WSL14.png)
![](./images/WSL15.png)
#### 补充：使用 Xming 连接
有网友说，这个可以用 Xming 连接，那我们就来研究一下。
##### 客户端：安装 Xterm
 我们进入 Ubuntu 环境，安装 xterm：
```bash
sudo apt-get install xterm -y
```
##### 服务端：下载 Xming Server
 去 <https://sourceforge.net/projects/xming/> 下载最新的 Xming Server，然后一路安装：    
![](./images/WSL16.png)     
 如果你把 Launch Xming 框点掉了，记得去开始菜单再打开：     
![别忘了！](./images/WSL17.png)     
 之后再回到 Ubuntu，键入如下指令：     
```bash    
DISPLAY=:0 xterm
```  
**Duang！**     
![](./images/WSL18.png)  
~~ 不过貌似只支持命令行……这时上一种方法的优势就显而易见了~~     
 如果你和我一样使用了 xfce4，在弹出的窗口中使用如下命令激活 xfce4：     
```bash   
xfce4-session
```
![](./images/WSL19.png)    
 不过这是什么效果......**（在 Xming 中使用 ** <kbd>Ctrl</kbd> + <kbd>C</kbd> ** 就可以退出这个鬼畜界面）**    
![](./images/WSL20.png)
<div align='center'> 达成成就：Windows+Linux 二合一 </div>
 感受一下两个版本融合的感觉：
![](./images/WSL21.png)
#### 与 Windows 内原硬盘分区交互
硬盘分区作为文件夹在 `/mnt/` 里放着，因此可以直接交互，比如说直接编译个二进制文件，或者往 Ubuntu 里传文件什么的......      
 具体演示：    
![](./images/WSL22.png)       
![](./images/WSL23.png)    
<div align='center'> 这里也可以建立一些 Windows（一般情况下）建不了的文件，例如带点文件夹 </div>
** 乱码是因为我用的预览体验系统……不过用正式版也可以了！**
## 0x07 FAQ
-   如何在子系统下进行 xxx？
    该怎么用怎么用，可以用自带命令行，实在不行参考教程唤醒图形界面。
    比如说 vim，在命令行中键入 `man vim`，会给出一份详尽的使用方法。
    亦可使用 `vim --help`。
-   占用量大？
    Sorry，这个系统和 Windows 10 共用 Host，所以理论上是比虚拟机占用小的。
    而且只要别装太多应用，应该还是可以带动的。
-   汉语化时提示不存在？
    玄学问题，可以忽略。修了个疏忽导致的错误，可以重上一下试试。
## 0x08 参考资料
这里列举了文中提到的链接，以便查阅。

1. [NOIP 标准评测系统及相关问题, smart0326, 2014-05-19, 百度文库](https://wenku.baidu.com/view/8246d96cdd36a32d72758143.html)         
2. [WSL, 百度百科](https://baike.baidu.com/item/wsl/20359185)        
3. [Run Bash on Ubuntu on Windows, Mike Harsh, 2016-05-30, Windows Blog](https://blogs.windows.com/buildingapps/2016/03/30/run-bash-on-ubuntu-on-windows/#cie8WdR3uSjgR5Ru.97)         
4. [Windows Subsystem for Linux Documentation, MSDN](https://docs.microsoft.com/zh-cn/windows/wsl/about)      
5. [NOI 系列活动标准竞赛环境, 2016-11-08, NOI 官网](http://www.noi.cn/2016-11-08-03-42-01)      
6. [购买 Ubuntu, Microsoft Store](https://www.microsoft.com/zh-cn/p/ubuntu/9nblggh4msv6)      
7. [Ubuntu 镜像使用帮助, 清华 TUNA](https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/)      
8. [Ubuntu 的 man 命令帮助如何设置中文版, Frank 看庐山, 2017-06-09](https://blog.csdn.net/qq_14989227/article/details/72954523)      
9. [Xming X Server for Windows, SourceForge](https://sourceforge.net/projects/xming/)       
10. [Sudo, Wikipedia](https://zh.wikipedia.org/wiki/Sudo)       

### 后记

本文最初发布于 [洛谷日报 #6](https://www.luogu.org/discuss/show/48491)，现由原作者搬运至此，有删改。      
