Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )

Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )

前言:最近刚换一台新的电脑,在准备安装 Win10 / Linux 双系统时,了解到 Win10 推出了 WSL 功能,于是决定体验一下。

1. WSL 简介

1.1 什么是 WSL ?

要想使用 Linux 系统,以前通常有两种方式:(1)使用虚拟机,(2)直接使用 Linux 系统。使用虚拟机时开销较大;直接使用 Linux 系统虽然可以带来最流畅的体验,但是与 Windows 系统之间进行切换时比较麻烦,一次只能使用一个系统。

为此,微软开发了适用于 Linux 的 Windows 子系统,称为 WSL,可让开发人员按原样运行 GNU/Linux 环境 – 包括大多数命令行工具、实用工具和应用程序 – 且不会产生传统虚拟机或双启动设置开销。简单点来说,有了 WSL,就可以在 Windows 系统中像运行软件一样运行 Linux 系统。

1.2 WSL1 与 WSL2

《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》
将适用于 Linux 的 Windows 子系统从 WSL 1 升级到 WSL 2 的主要区别和优势是:

  • 提高文件系统性能,
  • 支持完全的系统调用兼容性。

WSL 2 使用最新、最强大的虚拟化技术在轻量级实用工具虚拟机 (VM) 中运行 Linux 内核。 但是,WSL 2 不是传统的 VM 体验。

2. 安装 WSL

2.1 安装 WSL1

(1)启用“适用于 Linux 的 Windows 子系统”可选功能

需要先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发。可以使用命令行的方式,也可以使用图形界面的方式。

图形界面方式

在【设置 -> 更新与安全->开发者选项】中开启【开发人员模式】
《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》
在【程序和功能 -> 启用或关闭 Windows 功能】中勾选【适用于 Linux 的 Windows 子系统】
《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》

命令行方式

以管理员身份打开 PowerShell 并运行:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

(2)重启电脑

(3)安装 Linux 发行版,如 Ubuntu

在 Microsoft Store 中下载并安装需要的 Linux 发行版
《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》

(4)启动 Linux 子系统

至此,Linux 子系统就相当于 Windows 系统上安装的一个软件,可以在开始菜单子启动。

首次启动新安装的 Linux 分发版时,将打开一个控制台窗口,系统会要求你等待一分钟或两分钟,以便文件解压缩并存储到电脑上。 未来的所有启动时间应不到一秒。

然后,需要为新的 Linux 分发版创建用户帐户和密码。
《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》
至此,已成功安装并设置了与 Windows 操作系统完全集成的 Linux 分发!

可打开 PowerShell 命令行并输入以下命令(仅在 Windows 内部版本 18362 或更高版本中可用),检查分配给每个已安装的 Linux 分发版的 WSL 版本:wsl -l -v

PS C:\Users\user-name> wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         1

2.2 升级到 WSL2

(1)开启“虚拟机平台”可选功能

同样地,可以采用图形界面的操作方式,也可以采用命令行的方式。

图形界面方式
在之前的基础上,勾选【虚拟机平台】。
《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》
命令行方式

以管理员身份打开 PowerShell 并运行:

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

(2)重启电脑

(3)下载 Linux 内核更新包

下载最新包:适用于 x64 计算机的 WSL Linux 内核更新包

然后双击运行,安装
《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》

(4)设置 WSL 版本

PS C:\Users\user-name> wsl --set-version Ubuntu-20.04 2
正在进行转换,这可能需要几分钟时间...
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
转换完成。

说明:

  • 若要将分发版设置为受某一 WSL 版本支持,请运行:
wsl --set-version <distribution name> <versionNumber>

请确保将 <distribution name> 替换为你的分发版的实际名称,并将 <versionNumber> 替换为数字“1”或“2”。 可以随时更改回 WSL 1,方法是运行与上面相同的命令,但将“2”替换为“1”。

  • 如果要使 WSL 2 成为你的默认体系结构,可以通过此命令执行该操作:
wsl --set-default-version 2

从 WSL 1 更新到 WSL 2 可能需要几分钟才能完成,具体取决于目标分发版的大小。如果--set-default-version 未列出,则表示你的 OS 不支持它,你需要更新到版本 1903(内部版本 18362)或更高版本。

3. 使用 WSL

3.1 启动和退出 Linux 子系统

进入 Linux 子系统有以下几种方式:
(1)和正常软件一样启动,如在开始菜单中点击其图标、双击桌面快捷方式
(2)在 Windows 中打开一个终端,如 PowerShell,输入命令wsl
(3)在终端中输入命令Linux 发行版名称.exe,如ubuntu20.04.exe

退出 Linux 子系统的方式:
(1)直接关闭终端
(2)在终端中输入命令exit,此时退出了 WSL,然后输入命令 wsl -t Ubuntu-20.04,关闭 ubuntu 子系统。

  1. 使用 wsl命令进入 Linux 子系统时,进入的目录是当前打开终端的位置,使用 PowerShell 终端时,所在位置为/mnt/c/Users/windows-login-name。使用 ubuntu2004.exe命令进入 Linux 子系统时,进入的目录是所在位置为/home/linux-login-name

  2. 常用的 wsl 命令:

# 列出所有分发的名称、运行状态、对应的 WSL 版本
wsl -l -v
# 终止指定的 Linux 分发
wsl -t <distro>
# 注销分发
wsl --unregister <distro>
# 终止所有正在运行的分发和 WSL2 轻型工具虚拟机
wsl --shutdown

3.2 文件系统

如何在 Linux 应用中使用 Windows 文件?

WSL 的优势之一是可以通过 Windows 和 Linux 应用或工具访问文件。

WSL 将计算机的固定驱动器装载到 Linux 分发版中的 /mnt/<drive> 文件夹下。 例如,你的 C: 驱动器装载在/mnt/c/

例如,使用装载的驱动器,可以使用 Visual Studio 或 VS Code 编辑 C:\dev\myproj\ 中的代码,并通过 /mnt/c/dev/myproj 访问相同的文件,在 Linux 中生成/测试该代码。

重要说明: 使用 WSL 的主要限制之一是不支持使用 Windows 应用或工具直接访问/更改 Linux 发行版文件系统中的文件。

不要使用 Windows 应用和工具更改 Linux 文件!

C:\Users\windows-login-name\AppData\Local\Packages\目录下有一个以CanonicalGroupLimited开头的文件夹,Linux 子系统相关的文件都存储在该文件夹里面。需要特别注意的是:任何情况下都不要使用 Windows 应用和工具更改该目录里面的 Linux 文件!
《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》
正确的做法:
将工作文件存放在 Windows 文件系统中,这样不仅能够在 Windows 中直接进行访问,还能在 Linux 中通过 /mnt/<drive>/<path> (例如 /mnt/c/dev/project/...) 进行访问,从而避免了在 Windows 和 Linux 系统中来回拷贝文件。

总之,为了避免丢失文件或污染文件数据,需要遵循下面三条准则:

  • 如果想要使用 Windows 和 Linux 工具访问、创建、修改文件,请将文件存储在Windows 文件系统中。
  • 通过 Windows 应用、工具、脚本、终端来访问、创建、修改 Linux 子系统中的文件时,请使用 \\wsl$\<DistroName>\
  • 千万不要使用寻找 AppData目录中的文件的方式,通过 Windows 应用、工具、脚本、终端来访问、创建、修改 Linux 子系统中的文件。

计算机的存储设备上存储了与每个文件、目录相关的文件元数据(例如:权限、拥有者、时间戳等),Windows 和 Linux 中文件元数据的表示方式是不同的。因此,通过 Windows 应用、工具、脚本、终端来访问、创建、修改位于AppData目录中的 Linux 子系统中的文件时,会造成数据污染或损坏 Linux 环境,导致需要卸载和重新安装 Linux 子系统。

3.3 换源

使用 Linux 子系统时,为了提高软件的安装速度,需要将软件源换成国内的镜像源。

(1)备份原来的数据源配置文件

sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup

(2)修改数据源配置文件

sudo vi /etc/apt/sources.list

这里使用中科大的源 (此处是 20.04 版本的源,对应版本名称为focal,如果是其他版本则替换为对应的版本名即可)。

# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

i键进入编辑模式,修改后,按 ESC 键退出编辑模式,输入:wq保存并退出。

(3)更新源,升级软件(可选):

sudo apt-get update
sudo apt-get upgrade

4. 安装图形界面

WSL 工具的目的是使用户能够视需要在 Windows 上运行 Bash 和核心 Linux 命令行工具。WSL 尚不支持 GUI 桌面或应用程序 (例如 Gnome、KDE 等) 。

对于 Linux 技术使用得还不太熟练的可以自行安装图形界面,以方便使用。

安装图形界面有多种方案可供选择,下面介绍其中使用最多的两种。

取决于使用的是 WSL1 还是 WSL2、Ubuntu 18.04 及以下版本还是 Ubuntu 20.04 版本,图形界面的安装方法有所不同。

4.1 Xfce4 + VcXsrv

安装 xfce4 桌面,然后设置 xrdp 远程连接,再使用 VcXsrv 进行显示(也可以用 VNC 软件进行显示)。

(1)安装 VcXsrv

X-Windows 显示服务器程序有多种:VcXsrv Windows X Server、Xming、Cygwin X Server。这里选择 VcXsrv,免费开源,在 SourceForget 上评价不错,下载地址为 https://sourceforge.net/projects/vcxsrv/

下载后安装,打开XLaunch,选择:“one large window”,Display number 设置成0,
《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》
选择【start no client】
《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》
勾选 【Disable access control】
《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》

可以点击 【save configuration】,将配置保存为文件,下次直接打开配置文件就可以了。
《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》
点击完成后,将会弹出一个黑色窗口,开始监听 Linux 的显示服务请求。

(2)安装 Xfce4 桌面

Xfce 是一种轻量级的桌面,基于GTK2.0,和旧版 Gnome 界面类似,可以运行在很多 Linux 发行版上,包括 Ubuntu 。

sudo apt-get install xfce4

(3)设置与启动桌面

设置显示器的地址。

sudo vim ~/.bashrc
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
source ~/.bashrc

实际上,上面的做法等价于:
在 Windows 中打开 PowerShell,输入 ipconfig 命令,可以查看到 Windows 与 Ubuntu 虚拟机进行通信的网络地址。
《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》
然后,通过 export DISPLAY=192.168.104.97:0命令告诉桌面程序应该去哪里寻找在本地运行的 X 服务器。

然后启动桌面

startxfce4

此时,在 XLaunch 中就可以看到 Ubuntu 系统的 xfce4 桌面。
《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》

该方法适用于 WSL2 的各种 Ubuntu 版本。

4.2 Gnome + VcXsrv

给 WLS2 的 Ubuntu 20.04 系统安装 Gnome 桌面的麻烦之处在于:Ubuntu 20.04 默认安装的 gnome 版本是高于 3.34 的,gnome 从这一版本开始就完全依赖 systemd 了,而 WSL 2 默认不是以 systemd 作为初始化进程,因此无法直接运行 gnome 桌面。

(1)安装 VcXsrv

同 4.1 节。

(2)安装 Gnome 图形界面

安装 gnome 桌面:

sudo apt install ubuntu-desktop

(3)设置 systemd

WSL2 默认不是以 systemd作为初始化进程,所以无法使用systemctl,使用systemctl时会出现以下提示:

System has not been booted with systemd as init system (PID 1). Can't operate.

为了使 WSL2 支持 systemd ,有人写了一个脚本 ubuntu-wsl2-systemd-script 。从 github 上下载该脚本并运行,

git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git
cd ubuntu-wsl2-systemd-script/
bash ubuntu-wsl2-systemd-script.sh

然后重启 Ubuntu 系统。此时再次运行systemctl命令,发现能正常运行。

user-name:~$ systemctl 
  UNIT                                                                         >
  sys-devices-LNXSYSTM:00-LNXSYBUS:00-ACPI0004:00-VMBUS:00-fc785225\x2d9131\x2d>
  sys-devices-LNXSYSTM:00-LNXSYBUS:00-ACPI0004:00-VMBUS:00-fd1d2cbd\x2dce7c\x2d>
  sys-devices-LNXSYSTM:00-LNXSYBUS:00-ACPI0004:00-VMBUS:00-fd1d2cbd\x2dce7c\x2d>
  sys-devices-platform-serial8250-tty-ttyS0.device                             >
  sys-devices-platform-serial8250-tty-ttyS1.device                             >
  sys-devices-platform-serial8250-tty-ttyS2.device                             >
  sys-devices-platform-serial8250-tty-ttyS3.device                             >
  sys-devices-virtual-block-ram0.device                                        >
  sys-devices-virtual-block-ram1.device                                        >
  sys-devices-virtual-block-ram10.device                                       >
  sys-devices-virtual-block-ram11.device                                       >
  sys-devices-virtual-block-ram12.device                                       >
  sys-devices-virtual-block-ram13.device                                       >
  sys-devices-virtual-block-ram14.device                                       >
  sys-devices-virtual-block-ram15.device                                       >
  sys-devices-virtual-block-ram2.device                                        >
  sys-devices-virtual-block-ram3.device                                        >
  sys-devices-virtual-block-ram4.device                                        >
  sys-devices-virtual-block-ram5.device                                        >
  sys-devices-virtual-block-ram6.device                                        >
  sys-devices-virtual-block-ram7.device                                        >
  sys-devices-virtual-block-ram8.device                                        >
lines 1-23

Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。systemctl是 Systemd 的主命令,用于管理系统。

(4)设置与启动桌面

输入sudo vi ~/.bashrc,在文件末尾添加:

export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0
export XDG_SESSION_TYPE=x11

保存后退出,并使用source ~/.bashrc使修改生效。

然后启动桌面,

gnome-session

此时,在 XLaunch 中就可以看到 Ubuntu 系统的 gnome 桌面。
《Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )》

  1. Ubuntu 18.04 默认安装的 gnome 版本是 3.28.1,不依赖于systemd,因此不需要设置systemd就可以运行 gnome 桌面。
  2. 对于Ubuntu 20.04,也可以选择 Cinnamon 桌面,因为 Cinnamon 是基于 gnome 的老版本改的,不依赖于 systemd 。
sudo apt install cinnamon-desktop-environment lightdm
export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0
cinnamon-session &

参考链接

  1. Microsoft 官方文档
  2. Win10安装Ubuntu子系统及图形化界面详细教程
  3. wsl2(win10 Linux子系统)图形界面的安装,wsl同理
  4. win10创建Ubuntu16.04子系统,安装常用软件以及图形界面(包括win10远程桌面连接Ubuntu)
  5. WSL2 Ubuntu图形界面使用指南
  6. wsl2 ubuntu Gnome 桌面
  7. WSL2中的Ubuntu上运行GNOME的问题
  8. WSL启用systemd
  9. Systemd 入门教程:命令篇
    原文作者:凌云飞鸿
    原文地址: https://blog.csdn.net/FSKEps/article/details/118493578
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞