基于WSL2的Windows下Ubuntu图形化系统

前言·

WSL是微软推出的windows的linux子系统,目的就是为了在windows平台上更方便的运行 linux。相比于VMware这样的虚拟机产品,WSL有许多优势:

  1. 方便。WSL操作Linux系统像windows上的cmd、PowerShell一样,直接操作其 Terminal终端 。只需要在开始菜单,单击其图标就可以打开一个窗口运行linux命令行工具,这是VMware这样的虚拟机产品想都不敢想的。
  2. 启动速度快。基本保持在5秒内就启动了。而VMware虚拟机,要先启动虚拟机产品,然后在虚拟机产品里面选择 Linux 分发版系统,点击启动按钮,等待系统自动,这时间相比,浪费太多了。
  3. 占用少。虽然WSL2还是在虚拟机上运行的Linux内核,但是在资源占用和性能这方面,无论是在内存占用还是在CPU消耗,都甩一般虚拟机产品几条街。用微软的话说就是:
    WSL 2 使用最新、最强大的虚拟化技术在轻量级实用工具虚拟机 (VM) 中运行 Linux 内核。 但是,WSL 2 不是传统的 VM 体验。
  4. 文件互通。WSL上的Linux与宿主Windows文件系统互通,WSL可以直接访问Window系统上的文件,而Windows系统也可以直接对Linux系统进行各种文件操作。

WSL的问题·

WSL在使用上的问题大致有以下几个:

  1. 没有图形界面。WSL运行Linux命令行很方便,但是目前还不能直接打开Linux图形界面。目前可以通过远程桌面的方式访问图形界面。
  2. C盘占用。按照一般的安装方法,默认是将子系统安装在C盘,C盘占用太大,可以通过官网上介绍的方法将子系统安装在其他盘。
  3. 不支持systemd。wsl默认是没有systemd服务,需要自行安装并配置,后面会介绍如何安装。
  4. 跨OS文件操作慢。这个文件操作慢是相对于WSL1来说的,WSL由于是用了VM,操作宿主系统上的文件难免会慢。解决办法

开始安装·

微软官方文档:适用于 Linux 的 Windows 子系统安装指南 (Windows 10)

Windows开启功能支持·

需要先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发。

打开 PowerShell 命令行并输入以下命令:

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

安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。 计算机需要[BIOS虚拟化功能](bios虚拟化 - 国内版 Bing)才能使用此功能。

打开 PowerShell 命令行并输入以下命令:

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

安装Ubuntu·

在 Microsoft Store 中搜索 Ubuntu

点击并安装第一个 Ubuntu

安装GWSL·

在 Microsoft Store 中搜索 GWSL

点击并安装第一个 GWSL

启动 GWSL ,在右下角通知图标栏中找到 GWSL ,对其右键,点击设置 GWSL:

使用WSL2·

  1. 下载Linux 内核更新包

    适用于 x64 计算机的 WSL2 Linux 内核更新包

  2. 运行更新包

  3. 设置 WSL 2 为默认体系结构,打开 PowerShell 命令行并输入以下命令

    1
    wsl --set-default-version 2
  4. 可先检查分配给每个已安装的 Linux 分发版的 WSL 版本,打开 PowerShell 命令行并输入以下命令:

    1
    wsl --list --verbose
  5. 如果 Ubuntu 的WSL版本为1,则将其设置为受 WSL2 版本支持,打开 PowerShell 命令行并输入以下命令:

    1
    wsl --set-version Ubuntu 2

安装Windows Terminal(可选)·

在 Microsoft Store 中搜索并安装 Windows Terminal

点击并安装第一个 Windows Terminal

打开并使用 Ubuntu·

到目前为止就可以正常使用 Ubuntu 命令行系统了,按下 Win 键,找到刚刚安装的 Ubuntu 打开,第一次启动,稍等片刻,以后都是5秒内就可以用了。接下来,设置 Linux 用户信息。

输入用户名,然后输入并确认两遍密码。

对于 Ubuntu,请使用 命令 sudo apt update && sudo apt upgrade ,对 Ubuntu 进行初次更新。

为 Ubuntu 安装图形化界面·

为WSL2上的 Ubuntu 启用systemd支持·

参考该教程

  1. 需要安装git才能进行接下来的操作。所以先按下 Win 键,找到刚刚安装的 Ubuntu 打开

    1
    sudo apt install -y git
  2. 运行脚本和命令

    1
    2
    3
    sudo git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git
    cd ubuntu-wsl2-systemd-script/
    bash ubuntu-wsl2-systemd-script.sh
  3. 然后在 PowerShell 命令行并输入wsl --shutdown重新启动 Ubuntu应用 并尝试运行systemctl

    如果没有得到错误并看到单元列表,那么脚本就起作用了,就可以使用systemctl

安装Gnome图形界面·

  1. 在 Ubuntu 中,输入以下命令安装 Ubuntu Desktop :

    1
    sudo apt install -y ubuntu-desktop
  2. 安装完后,输入sudo vi ~/.bashrc,在文件末尾按 “i” 键添加:

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

按 “Esc” 后输入:wq保存并退出,并使用source ~/.bashrc命令应用修改。

试运行图形化界面·

之后每次启动图形化桌面的步骤为:

  1. 在 Windows 中启动 GWSL
  2. 在 Windows 中启动 Ubuntu

在Ubuntu中输入

gnome-session

稍等片刻就可以在 GWSL 打开的窗口中看到图形化界面

使用·

图形界面汉化·

网上有很多,我就不单独再做了,可以参考这个方法

基本 WSL 命令·

查看linux版本

wsl -l

停止linux系统

wsl -t Ubuntu

导出系统

wsl --export Ubuntu C:\Ubuntu.tar

删除系统

wsl --unregister Ubuntu

导入系统

wsl --import Ubuntu C:\\WSL C:\\Ubuntu.tar

通过 WSL 安装的 Linux 分发版最好使用 PowerShell 或 Windows 命令提示符 (CMD) 。 一些基本命令包括:

系统之间文件系统的相互访问·

https://docs.microsoft.com/zh-cn/windows/wsl/wsl2-mount-disk#mount-a-vhd-in-wsl

父windows系统访问子linux系统的文件:
直接在文件资源管理器输入\\wsl$就可以访问到wsl子系统的文件系统:

WIN+R输入\\wsl$

此外,还可以将其映射为网络驱动器,这样就可以像访问C盘、D盘一样访问 Ubuntu 的文件系统了

linux子系统访问父windows系统的文件:
直接cd /mnt就可以看到c/、d/两个文件夹,对应的就是电脑上的C盘、D盘,cd进去就可以访问对应windows上的文件

跨文件系统工作·

跨 Windows 和 Linux 文件系统工作

建议不要跨操作系统使用文件,除非有这么做的特定原因。 若想获得最快的性能速度,请将文件存储在 WSL 文件系统中,前提是在 Linux 命令行(Ubuntu、OpenSUSE 等)中工作。 如果使用 Windows 命令行(PowerShell、命令提示符)工作,请将文件存储在 Windows 文件系统中。

此外,许多命令在 Windows Linux 之间可互操作。 下面是几个示例:

  • 从 Windows 命令行(如 PowerShell)运行 Linux 工具(如 grep ):
    打开 PowerShell

    1
    2
    3
    // 在 C:\temp> 目录下
    wsl ls -la
    // 显示 C:\temp 目录的内容
  • 混合使用 Linux和 Windows 命令:
    若要使用 Linux 命令 ls -la 列出文件,并使用 PowerShell 命令 findstr 来筛选包含“git”的单词的结果,请组合这些命令:

    1
    wsl ls -la | findstr "git"

    若要使用 PowerShell 命令 dir 列出文件,并使用 Linux 命令 grep 来筛选包含“git”的单词的结果,请组合这些命令:

    1
    dir | wsl grep git

    若要使用 Linux 命令 ls -la 列出文件,并使用 PowerShell 命令 > out.txt 将该列表输出到名为“out.txt”的文本文件,请组合这些命令:

    1
    wsl ls -la > out.txt