WSL2 + Docker + xfce4安装及使用

WSL官方指南:适用于 Linux 的 Windows 子系统安装指南 (Windows 10)

文档比较详细,而且会持续更新,欢迎大家指错。

文章目录

  • WSL2 + Docker + xfce4安装及使用
    • 一、前言
      • 1.1 什么是WSL?
      • 1.2 比较 WSL 1 和 WSL 2
      • 1.3 WSL可以做什么?
    • 二、便捷自动安装(本人未测试)
    • 三、手动安装 WSL 2
      • 3.1 启用适用于 Linux 的 Windows 子系统*
      • 3.2 更新到 WSL 2
        • 3.2.1 检查运行 WSL 2 的要求
        • 3.2.2 启用“虚拟机平台”可选组件*
        • 3.2.3 将 WSL 2 设置为默认版本
        • 3.2.4 下载 Linux 内核更新包
      • 3.3 安装所选的 Linux 分发版
        • 3.3.1 下载 Linux 分发版
        • 3.3.2 设置新分发版
        • 3.3.3 修改ubuntu的apt安装源
        • 3.3.4 重置 Linux 密码(可选)
        • 3.3.5 忘记密码(可选)
        • 3.3.6 修改root用户密码(可选)
        • 3.3.7 修改默认用户root(可选)
      • 3.4 自定义分发版安装目录(可选,推荐)
        • 3.4.1 如果未安装分发版
        • 3.4.2 如果已经安装分发版(未测试)
      • 3.5 安装 Windows Terminal终端(可选,推荐安装)
        • 3.5.1 微软商店自动安装
        • 3.5.2 手动离线安装
      • 3.6 查询WSL状态、设置分发版版本
      • 3.7 安装WSL的systemd命令(可选)
      • 3.8 可能出现的问题
        • 3.8.1 参考的对象类型不支持尝试的操作
        • 3.8.2 关于Hyper-V是否需要开启
        • 3.8.3 关于Windows 10 家庭版能否安装WSL2的问题
        • 3.8.4 WSL 转换到版本 2 失败
        • 3.8.5 WslRegisterDistribution failed with error: 0x800701bc
        • 3.8.6 其他错误
    • 四、WSL2使用帮助
      • 4.1 网络访问方式(IP)
      • 4.2 文件系统
        • 4.2.1 设置软连接快捷访问(可选)
    • 五、安装Docker
      • 5.1 原生linux安装docker
      • 5.2 Docker Desktop for Windows(推荐)
        • 5.2.1 准备修改Docker Desktop软件默认安装路径(可选)
        • 5.2.2 开始安装
        • 5.2.3 在 WSL2 运行 Docker
        • 5.2.4 修改镜像和容器等数据存储位置(可选)
        • 5.2.5 Docker + WSL 2使用手册
      • 5.3 两种安装方式总结
      • 5.4 检查 WSL 模式
      • 5.5 配置镜像加速器(阿里云)
        • 5.5.1 Docker Desktop for Windows
        • 5.5.2 Docker ce
      • 5.6 可能出现的问题
    • 六、安装桌面环境(可选)
      • 6.1 介绍
      • 6.2 开始
      • 6.3 源更新与升级依赖
      • 6.4 安装桌面环境
        • 6.4.1 安装xfce4
      • 6.5 为当前用户指定登录session类型
      • 6.6 安装远程桌面服务
        • 6.6.1 安装xrdp
        • 6.6.2 修改xrdp配置
        • 6.6.3 重启一下电脑
        • 6.6.4 启动xrdp
        • 6.6.5 查看IP地址
      • 6.7 远程连接
        • 6.7.1 配置防火墙
      • 6.8 设置中文以及安装输入法(坑)
        • 6.8.1安装中文语言包
        • 6.8.2 修改默认语言环境为中文
        • 6.8.3 安装完整的语言支持
        • 6.8.4 安装中文输入法
      • 6.9 可能出现的问题
        • 6.9.1 xrdp远程桌面黑屏处理
        • 6.9.2 进入图形界面一段时间后黑屏
        • 6.9.3 运行一段时间后,出现xrdp_mm_process_login_response: login failed
      • 6.10 安装软件
        • 6.11 安装Chrome
    • 七、WSl 命令参考
    • 参考链接
    • 文章更新日志

本文内容:主要记录WSL2下安装与使用ubuntu,WSL中ubuntu的图形界面的安装,以及对图形界面的调教,还有 Docker 安装。

一、前言

1.1 什么是WSL?

wsl 是适用于 Linux 的 Windows 子系统(英语:Windows Subsystem for Linux,简称WSL)。是一个为在Windows 10和Windows Server 2019上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层,可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销

简单来说,以前想在windows中使用linux,需要安装vmware虚拟机,现在则不比这么麻烦了,直接安装linux子系统,秒开

1.2 比较 WSL 1 和 WSL 2

WSL 2 是WSL 1的一个新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的主要目标是提高文件系统性能,以及支持完全的系统调用兼容性

相对于WSL采用API转换的方式, WSL 2 则完全不同,win10 开始内置了一个轻量级虚拟机,经过不断的优化,这个虚拟机实现了与 windows 的高度集成,实现了虚拟机的高性能运行,WSL2 便是运行在虚拟机上的一个完整的 linux 内核,比如Docker、cgroup、iptables、GPU、图形界面这些功能都能正常工作。。因此 WSL 2 给了在 windows 更接近原生linux的体验,同时WSL 2 的开启速度有了非常明显的提升,几乎不需要再等待。

这一新的体系结构改变了这些 Linux 二进制文件与Windows 和计算机硬件进行交互的方式,但仍然提供与 WSL 1(当前广泛可用的版本)中相同的用户体验。

单个 Linux 分发版可以在 WSL 1 或 WSL 2 体系结构中运行。 每个分发版可随时升级或降级,并且你可以并行运行 WSL 1 和 WSL 2 分发版。 WSL 2 使用全新的体系结构,该体系结构受益于运行真正的 Linux 内核。

WSL 1 和 WSL 2 的主要区别和优势可以参考官方文档:比较 WSL 1 和 WSL 2。

1.3 WSL可以做什么?

  • 在 Microsoft Store 中选择你偏好的 GNU/Linux 分发版。
  • 运行常用的命令行软件工具(例如 grepsedawk)或其他 ELF-64 二进制文件。
  • 运行 Bash shell 脚本和 GNU/Linux 命令行应用程序;
    • 工具:vim、emacs、tmux
    • 语言:NodeJS、Javascript、Python、Ruby、C/ C++、C# 与 F#、Rust、Go 等。
    • 服务:SSHD、MySQL、Apache、lighttpd、MongoDB、PostgreSQL。
  • 使用自己的 GNU/Linux 分发包管理器安装其他软件。
  • 使用类似于 Unix 的命令行 shell 调用 Windows 应用程序。
  • 在 Windows 上调用 GNU/Linux 应用程序。

装完WSL2后,我就把Windows上跑的Docker、Mysql、nginx 等服务迁进了容器,这就很nice

二、便捷自动安装(本人未测试)

注意:看了官方介绍,感觉手动安装其实并不会比自动安装繁琐,总共也就几步操作而已。自动安装无法把控细节,我倾向手动安装。这里不过多介绍,看官方文档即可

建议浏览WSL官方指南:安装 WSL | Microsoft Docs

官方已经更新便捷的安装方式,现在,可以在管理员 PowerShellWindows 命令提示符中输入此命令,然后重启计算机来安装运行适用于 Linux 的 Windows 子系统 (WSL) 所需的全部内容。

wsl --install

此命令将启用所需的可选组件,下载最新的 Linux 内核,将 WSL 2 设置为默认值,并安装 Linux 发行版(默认安装 Ubuntu)。

三、手动安装 WSL 2

WSL官方指南:旧版 WSL 的手动安装步骤 | Microsoft Docs

3.1 启用适用于 Linux 的 Windows 子系统*

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

  • 方法一:通过命令来启用

    管理员身份打开 ”Windows PowerShell“ 或者”命令提示符“,并运行:

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

    执行结果:

    C:\WINDOWS\system32> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart部署映像服务和管理工具
    版本: 10.0.18362.1379映像版本: 10.0.18363.1500启用一个或多个功能
    [==========================100.0%==========================]
    操作成功完成。
    
  • 方法二:在windows功能中手动设置

    在“控制面板\所有控制面板项\程序和功能”中选择“启用或者关闭Windows功能”,勾选对应选项即可:

如果只想安装 WSL 1,现在可以重新启动计算机,然后继续安装所选的 Linux 发行版。 若要更新到 WSL 2,请先继续执行下一步,之后再重新启动计算机。

3.2 更新到 WSL 2

3.2.1 检查运行 WSL 2 的要求

若要更新到 WSL 2,需要运行 Windows 10。

  • 对于 x64 系统:版本 1903 或更高版本,采用 内部版本 18362 或更高版本。
  • 对于 ARM64 系统:版本 2004 或更高版本,采用 内部版本 19041 或更高版本。

若要检查 Windows 版本及内部版本号,选择 Windows 徽标键 + R,然后键入“winver”,选择“确定”。 更新到“设置”菜单中的最新 Windows 版本。

备注:

如果运行的是 Windows 10 版本1903 或 1909,请在 Windows 菜单中打开“设置”,导航到“更新和安全性”,然后选择“检查更新”。 内部版本号必须是 18362.1049+ 或 18363.1049+,次要内部版本号需要高于 .1049。 阅读详细信息:WSL 2 即将支持 Windows 10 版本 1903 和 1909。 请参阅疑难解答说明。

3.2.2 启用“虚拟机平台”可选组件*

安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。

  • 方法一:通过命令来启用

    管理员身份打开 ”Windows PowerShell“ 或者”命令提示符“,并运行:

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

    执行结果:

    C:\WINDOWS\system32> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart部署映像服务和管理工具
    版本: 10.0.18362.1379映像版本: 10.0.18363.1500启用一个或多个功能
    [==========================100.0%==========================]
    操作成功完成。
    
  • 方法二:在windows功能中手动设置

    在“控制面板\所有控制面板项\程序和功能”中选择“启用或者关闭Windows功能”,勾选对应选项即可:

重新启动计算机,以完成 WSL 安装并更新到 WSL 2。

检测是否开启虚拟化,打开任务管理器 -> 性能 -> 虚拟化已启用

3.2.3 将 WSL 2 设置为默认版本

安装新的 Linux 分发版之前,请以管理员身份打开 ”Windows PowerShell“ 或者”命令提示符“中运行以下命令,以将 WSL 2 设置为默认版本

先检查 WSL 状态,查看有关 WSL 配置的常规信息,例如默认发行版类型、默认发行版和内核版本。

wsl --status

如果默认版本不是2,则执行以下命令:

wsl --set-default-version 2

正常情况下,出现以下信息

C:\WINDOWS\system32>wsl --set-default-version 2
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
操作成功完成。

但如果执行结果如下,则需要更新 Linux 内核,操作见下一步,更新完,继续设置默认版本

C:\WINDOWS\system32>wsl --set-default-version 2
WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel
(WSL 2 需要更新其内核组件。有关信息,请访问 https://aka.ms/wsl2kernel)
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2

设置完后,这会使你安装的任何新发行版均初始化为 WSL 2 发行版。

3.2.4 下载 Linux 内核更新包

  1. 下载最新包:
  • 适用于 x64 计算机的 WSL2 Linux 内核更新包

    备注:

    如果使用的是 ARM64 计算机,请下载 ARM64 包。 如果不确定自己计算机的类型,请打开命令提示符或 PowerShell,并输入:systeminfo | find "System Type"警告: 在非英语 Windows 版本中,你可能需要修改搜索文本,例如在德语中为 systeminfo | find "Systemtyp"

  1. 运行上一步中下载的更新包。 (双击以运行,系统将提示你提供提升的权限,选择“是”以批准此安装。)

安装完成后,请继续执行之前失败的操作。 (如果希望将新的 Linux 安装设置为 WSL 1,请跳过此步骤。)

3.3 安装所选的 Linux 分发版

Windows 10 的 WSL 2 需要依赖于WSL 发行版,Microsoft Store中的WSL 发行版应用。适用于 Linux 的 Windows 子系统安装是会自动装在系统驱动器(通常是 C: 驱动器)中运行,所以注意C盘的空间。(注意:如果需要修改安装位置,请先查看下文自定义安装方法,再来查看本节其他配置介绍)。

查看当前已安装发行版

wslconfig /l

wsl --list --all

3.3.1 下载 Linux 分发版

注意,如果是自定义安装,则跳过该步骤

  1. 打开 Microsoft Store,并选择你偏好的 Linux 分发版 (如果上述连接打开有错,请直接打开 Microsoft Store 搜索)。这里推荐使用最新得长期稳定版,目前是 Ubuntu 20.04 LTS

单击以下链接会打开每个分发版的 Microsoft Store 页面,(如果下述连接打开有错,请直接打开Microsoft Store搜索)。:

  • Ubuntu 18.04 LTS
  • Ubuntu 20.04 LTS
  • openSUSE Leap 15.1
  • SUSE Linux Enterprise Server 12 SP5
  • SUSE Linux Enterprise Server 15 SP1
  • Kali Linux
  • Debian GNU/Linux
  • Fedora Remix for WSL
  • Pengwin
  • Pengwin Enterprise
  • Alpine WSL
  • Raft(免费试用版)
  1. 在分发版的页面中,选择“获取”。

    注意:这样会自动安装到系统盘,如果需要更改安装目录,参考下文[[#3.4 自定义分发版安装目录(可选,推荐)]]

3.3.2 设置新分发版

首次启动新安装的 Linux分发版时,将打开一个控制台窗口。(自定义安装则是双击安装目录的 Ubuntu***.exe 文件,就是之前安装的应用,如果第一次启动ubuntu失败,可以重启电脑再次试下)

如果还是出错,参考下文[[#3.8 可能出现的问题]]

系统会要求你等待一分钟或两分钟,以便文件解压缩并存储到电脑上。未来的所有启动时间应不到一秒。

然后,需要为新的 Linux 分发版创建用户帐户和密码

祝贺你!现已成功安装并设置了与 Windows 操作系统完全集成的 Linux 分发!

  • 用户名密码 特定于安装的每个单独的 Linux 分发版,与 Windows 用户名无关。
  • 创建 用户名密码 后,该帐户将是分发版的默认用户,并将在启动时自动登录(可修改)。
  • 此帐户将被视为 Linux 管理员,能够运行 sudo (Super User Do) 管理命令。
  • 在适用于 Linux 的 Windows 子系统上运行的每个 Linux 分发版都有其自身的 Linux 用户帐户和密码。 每当添加分发版、重新安装或重置时,都必须配置一个 Linux 用户帐户。

安装完后,可用 wsl -l -v 查看Linux 分发版的 WSL 版本(后面有详解)

PS C:\Users\wys> wsl -l -vNAME                   STATE           VERSION
* Ubuntu                 Running         2

3.3.3 修改ubuntu的apt安装源

第一步:进入 ubuntu,备份源文件

cp /etc/apt/sources.list /etc/apt/sources.list.bak

第二步:编辑 /etc/apt/sources.list 文件,更换成国内源

注意,以下是Ubuntu 20.04版本

  • 网易源
#网易源
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse
# deb-src http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
# deb-src http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
# deb-src http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
# deb-src http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse
# 预发布软件源,不建议启用
# deb http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
  • 阿里源 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区
#阿里源
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
  • 清华源https
#清华源https# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

我这里使用的阿里源,可直接执行如下命令

echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse">/etc/apt/sources.list

注意,以下是Ubuntu 22.04版本

  • 网易源

    deb http://mirrors.163.com/ubuntu/ jammy main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ jammy-security main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ jammy-updates main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ jammy-proposed main restricted universe multiverse
    deb http://mirrors.163.com/ubuntu/ jammy-backports main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ jammy main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ jammy-security main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ jammy-updates main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ jammy-proposed main restricted universe multiverse
    deb-src http://mirrors.163.com/ubuntu/ jammy-backports main restricted universe multiverse
    
  • 阿里源 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区

    deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
    
  • 清华源

    # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse# 预发布软件源,不建议启用
    # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
    

然后执行更新

apt update && apt upgrade -y

3.3.4 重置 Linux 密码(可选)

若要更改密码,请打开 Linux 分发版(例如 Ubuntu)并输入以下命令:passwd

系统会要求你输入当前密码,然后要求输入新密码,之后再确认新密码。

3.3.5 忘记密码(可选)

如果忘记了 Linux 分发版的密码:

  1. 请打开 PowerShell,并使用以下命令直接进入默认 WSL 分发版的根目录:wsl -u root

    如果需要在非默认分发版中更新忘记的密码,请使用命令:wsl -d Debian -u root,记得将 Debian 替换为目标分发版的名称。

  2. PowerShell 内的根级别打开 WSL 发行版后,可使用此命令更新密码:passwd <WSLUsername>,其中 <WSLUsername> 是 DISTRO 中帐户的用户名,而你忘记了它的密码。

  3. 系统将提示你输入新的 UNIX 密码,然后确认该密码。 在被告知密码已成功更新后,请使用命令 exitPowerShell 内关闭 WSL

3.3.6 修改root用户密码(可选)

  • WSL 默认是没有设置 root 密码的,系统实现的是每次开启时随机设置root密码,导致无法切换到root权限进行操作

  • 设置 root 用户密码,这样要输三次命令,第一次当前用户密码,后两次就是设置密码以及确认密码

    # 语法: sudo passwd 用户名
    sudo passwd root
    
  • password updated successfully 代表密码更新成功,切换用户

    # 语法: su 用户名
    su root
    

如果我们想要使用 root 用户的话,为了避免 sudo 切换 root 是需要输入密码,把自己配置的用户名加到sudo免密中,命令如下:

 # 替换leap为自己单独配置的用户名sudo echo "leap ALL=(ALL:ALL) NOPASSWD: ALL" >>/etc/sudoers

3.3.7 修改默认用户root(可选)

  • 查看自己安装的哪个版本

    可以去 Microsoft Store 商店 - 我的软件 - 已安装, 中查看

我这里安装的是 ubuntu,我就以 ubuntu 为例

  • 查看修改命令,输入ubuntu 按回车会自动补全版本对应的命令

    # 如果安装的是ubuntu1804,则命令可能是
    ubuntu /?
    或者
    ubuntu1804 /?
    

  • 设置默认用户

    # 语法: ubuntu config --default-user 用户名(已存在的)
    # 如果安装的是ubuntu1804(可用wsl -l -v 查看),则命令也可能是ubuntu1804 config --default-user 用户名(已存在的)
    PS C:\WINDOWS\system32> ubuntu config --default-user root
    PS C:\WINDOWS\system32># 没有报错就代表成功
    
  • 注意,如果出现以下错误(一般情况是因为采用自定义分发版安装才会出现该情况

    PS C:\Users\Administrator> ubuntu config --default-user root
    正确,然后再试一次。
    所在位置 行:1 字符: 1
    + ubuntu config --default-user root
    + ~~~~~~+ CategoryInfo          : ObjectNotFound: (ubuntu:String) [], CommandNotFoundException+ FullyQualifiedErrorId : CommandNotFoundException
    

    这个错误是说无法识别该命令。你需要找到以 ubuntu 开头的 exe 文件(即安装目录,可使用强大的绿色搜索工具 everything 搜索),比如我的是 ubuntu.exe,然后在==管理员权限的命令终端==中 cd 进入所在目录,再来执行以上命令

重新打开已经是 root 用户了

3.4 自定义分发版安装目录(可选,推荐)

我的电脑我做主,C盘寸土不让,离线安装

3.4.1 如果未安装分发版

Microsoft Store下载的 WSL 发行版会自动安装到C盘不能手动选择安装位置。微软提供了一个手动下载WSL发行版的网址,可以绕开MS Store的自动安装

  1. 手动下载,下载地址:下载发行版 | Microsoft Docs

  1. 选择想要的发行版下载后,可以得到一个后缀名为 .AppxBundle 的文件。(官方文档说是 .appx的文件,其实是错的,很多博客也跟着瞎抄。)把这个 .AppxBundle 的文件的后缀改为.zip,然后解压到,这才能得到 .appx的文件。

  1. 根据系统型号,选择对应的 .appx的文件后缀改为.zip,然后解压到想要安装 WSL 的目录下,我们可以得到一些文件。

  1. 找到 xxx.exe文件(如ubuntu.exe,其他发行版的话也有类似的程序)双击打开,等待一段时间就可以安装成功。然后就跟上述 [[#3.3.2 设置新分发版]] 一样,开始设置用户名和密码。

注意

安装目录的磁盘不能开==压缩内容以便节省磁盘空间==选项,否则会报错 0xc03a001a

可以右键文件夹–>属性–>常规–>高级找到并关闭这个选项,开了压缩功能的文件夹右上角会有两个蓝色的小箭头

3.4.2 如果已经安装分发版(未测试)

  • 如果之前的数据不重要,可以删除原来安装在C盘的发行版

    首先停止 Linux 发行版在 WSL 的运行(这里以 Ubuntu 18.04 为例):

    wsl -l -v
    wsl -t Ubuntu-18.04
    wsl --shutdown
    wsl -l -v
    

    查看 Windows 系统已经安装的软件包:

    Get-AppxPackage -allusers | Select Name, PackageFullName
    

    删除 Ubuntu 发行版

    get-appxpackage CanonicalGroupLimited.<发行版名称和版本号>onWindows | remove-Appxpackage
    

    这里以 Ubuntu 18.04 为例,所以要将 “<发行版名称和版本号>” 替换为 “Ubuntu18.04” , 如果是 Ubuntu
    20.04 ,那么就应当替换为 “Ubuntu20.04”。

    删除 Ubuntu 18.04

    get-appxpackage CanonicalGroupLimited.Ubuntu18.04onWindows | remove-Appxpackage
    

    然后开始重新安装,按照上一步未安装分发版的流程即可。

  • 如果是想直接迁移之前数据,操作如下:

    1. 首先查看所有分发版本

      C:\Users\Administrator>wsl -l -vNAME                   STATE           VERSION
      * Ubuntu                 Running         2
      
    2. 导出分发版为tar文件到d盘

      wsl --export Ubuntu D:\wsl\ubuntu\ubuntu.tar
      
    3. 注销当前分发版

      wsl --unregister Ubuntu
      
    4. 重新导入并安装分发版在 D:\wsl\ubuntu\

      wsl --import Ubuntu D:\wsl\ubuntu D:\wsl\ubuntu\ubuntu.tar --version 2
      
    5. 设置默认登陆用户为安装时用户名

      ubuntu config --default-user Username
      
    6. 删除tar文件(可选)

      del D:\wsl\ubuntu\ubuntu20.04.tar
      

3.5 安装 Windows Terminal终端(可选,推荐安装)

安装 Windows Terminal,可用于和 WSL 子系统交互。强烈推荐

Windows 终端(Windows Terminal)可启用多个选项卡(在多个 Linux 命令行、Windows 命令提示符、PowerShell 和 Azure CLI 等之间快速切换)、创建键绑定(用于打开或关闭选项卡、复制粘贴等的快捷方式键)、使用搜索功能,以及使用自定义主题(配色方案、字体样式和大小、背景图像/模糊/透明度)。 了解详细信息。

官方文档:安装和设置 Windows 终端。

3.5.1 微软商店自动安装

可以从 Microsoft Store 安装 Windows 终端。

3.5.2 手动离线安装

如果你无法访问 Microsoft Store,GitHub 发布页上发布有内部版本。 如果从 GitHub 安装,终端将不会自动更新为新版本。(我就是在github上下载的,因为Microsoft Store突然无法安装应用,网上说是需要更新系统版本,但我系统已经更新过了。)

  1. Windows Terminal 的 GitHub 发布页 下载最新的release包,即以 .msixbundle 为后缀的文件
  2. 将文件后缀名改为 .zip 后解压缩文件
  3. 在解压后的文件夹中找到名为 CascadiaPackage***.msix 的文件,有x86、x64和ARM64版本的,选择x64那个文件,修改后缀名为 .zip,然后解压
  4. 在解压后的文件夹中,找到 WindowsTerminal.exe 的文件,直接双击就能运行了,还是绿色免安装版的
  5. 可以把这个文件夹拷贝到安全的位置,然后将 *.exe 文件添加到桌面快捷方式,就能轻松使用 Windows Terminal

3.6 查询WSL状态、设置分发版版本

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

wsl -l --all -v

或者

wsl --list --all --verbose

若要将分发版设置为受某一 WSL 版本支持,请运行:

wsl --set-version <distribution name> <versionNumber>
或者
wsl -s <distribution name> <versionNumber>

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

从 WSL 1 更新到 WSL 2 可能需要几分钟才能完成,具体取决于目标分发版的大小。 如果从 Windows 10 周年更新或创意者更新运行 WSL 1 的旧(历史)安装,可能会遇到更新错误。 按照这些说明卸载并删除任何旧分发。

如果 wsl --set-default-version 结果为无效命令,请输入 wsl --help。 如果 --set-default-version 未列出,则表示你的 OS 不支持它,你需要更新到版本 1903(内部版本 18362)或更高版本。 如果你在使用 ARM64 版本 19041,那么当使用 PowerShell 时,此命令可能会失败;在这种情况下,你可使用命令提示符,而不是发出 wsl.exe 命令。

运行命令后如果看到此消息:WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel。 仍需要安装 MSI Linux 内核更新包(见上文)。

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

wsl --set-default-version 2

这会将安装的任何新分发版的版本设置为 WSL 2。

3.7 安装WSL的systemd命令(可选)

由于 Linux 环境应用程序(如Ubuntu,Debian,OpenSuse或Kali)不支持为Linux操作系统提供基本构建块的 Systemd,使用的是经典的SysV init(sysvinit)系统,因此我们无法使用 reboot 或使用 systemctl 命令来管理 systemd 服务。

在 WSL 中可以用SysV init的命令代替 systemd 命令

systemd 还是很重要的(例如:不安装可能会导致下面图形化界面安装失败)。如果需要,可通过以下方式安装:

  1. 安装git

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

    git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git
    cd ubuntu-wsl2-systemd-script/
    bash ubuntu-wsl2-systemd-script.sh
    
  3. 然后重新启动 ubuntu shell 并尝试运行 systemctl

    systemctl
    

如果报错:System has not been booted with systemd as init system (PID 1). Can’t operate.

root@DESKTOP-58FD2RV:/home# systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

解决办法:

# 安装daemonize
sudo apt-get install daemonize#执行以下命令开启sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.targetexec sudo nsenter -t $(pidof systemd) -a su - $LOGNAME

3.8 可能出现的问题

3.8.1 参考的对象类型不支持尝试的操作

  • 问题:从terminal启动ubuntu1804报错:参考的对象类型不支持尝试的操作。直接启动ubuntu,出现1804报错

    解决办法:以管理员身份打开”Windows PowerShell“,然后执行 netsh winsock reset,然后继续操作(如果还是不行,重启电脑即可)

3.8.2 关于Hyper-V是否需要开启

问题:Windows 10 安装了 wsl2,整个安装过程是不需要启用 Hyper-V,但是网络很多的讨论和教程都提到说 wsl 2 用的时 Hyper-V。

官方文档有提到

WSL 2 is available on all SKUs where WSL is currently available, including Windows 10 Home.The newest version of WSL uses Hyper-V architecture to enable its virtualization. This architecture will be available in the 'Virtual Machine Platform' optional component. This optional component will be available on all SKUs.

就是说,WSL 的最新版本使用 Hyper-V 架构来实现虚拟化,该架构可用在“虚拟机平台”可选组件中。因为这个”虚拟机平台“就是一个精简版的 Hyper-v,所以开启“虚拟机平台”即可。

3.8.3 关于Windows 10 家庭版能否安装WSL2的问题

Windows 10 家庭版上没有 Hyper-V 功能。所以网上很多教程都提到需要安装 Hyper-V,这是不对的。

官方解释:WSL 2 在可使用 WSL 的所有桌面 SKU 上都可使用,包括 Windows 10 家庭版。

官方原文:关于适用于 Linux 的 Windows 子系统的常见问题解答 | Microsoft Docs

3.8.4 WSL 转换到版本 2 失败

如果显示错误消息,例如“转换失败”或“错误 0x03a001a 由于虚拟磁盘系统限制,无法完成请求的操作。虚拟磁盘文件必须是未压缩和未加密的,并且不能是稀疏的。”,请尝试检查以下内容。

  • 重新启动系统。
  • 必须在 BIOS 中启用虚拟化扩展,例如 Intel VT-x 或 AMD-V。
  • 必须为 Ubuntu AppData 文件夹禁用压缩和加密(请参阅Github 问题 #4103)。路径看起来像这样。

再次尝试将发行版转换为版本 2,操作应该会成功。

3.8.5 WslRegisterDistribution failed with error: 0x800701bc

造成该问题的原因是WSL版本由原来的 WSL1 升级到 WSL2 后,内核没有升级,前往微软WSL官网下载安装适用于 x64 计算机的最新 WSL2 Linux 内核更新包即可。

3.8.6 其他错误

可参考官方文档 关于适用于 Linux 的 Windows 子系统的常见问题解答 | Microsoft Docs

博客:WSL2 网络异常排查 [ping 不通、网络地址异常、缺少默认路由、被宿主机防火墙拦截]

四、WSL2使用帮助

4.1 网络访问方式(IP)

官方文档:使用 WSL |访问网络应用程序微软文档 (microsoft.com)

注意:在使用win10的wsl2子系统时,windows会通过虚拟交换机给win10本机wsl2子系统各自会分配一个ip地址。

18945之前的WSL2版本,如果我们在容器里运行了一个网络服务,例如启动一个WEB服务。想在 Win10 宿主机中访问这个WEB服务,我们先要通过 ip aifconfig 命令查看其IP地址才能访问,而且更崩溃的是每次重启后再运行WSL2容器,虚拟交换机会被重新创建,其IP地址和网关会重新分配。

但在版本18945之后,支持通过localhost访问WSL2容器,所以我们不用考虑这个问题了(有些博客更新不及时,容易误导新手)。

附上官方发行文档:微软WSL官方发行版本说明

注:可使用以下命令之一获取IP地址

ip addr | grep eth0
ifconfig

如果非要固定IP,参考链接:WSL2固定ip地址

4.2 文件系统

WSL2中使用虚拟硬件磁盘来存储文件,在Windows下不能像WSL1一样直接访问C盘中的地址。

建议先浏览官方文档:跨文件系统|工作微软文档 (microsoft.com)

需要在Windows下访问Ubuntu的文件系统的话,可以有两种方式:

  1. 在Linux中运行 explorer.exe .

    可以立即打开Linux当前所在的文件目录,注意:.exe后面还有个空格后面再加一个点

  2. 在windows 的资源管理器的文件路径里、命令行窗口或者PowerShell中运行 \\wsl$\ubuntu,可以立即打开Linux当前所在的文件目录

  3. 添加网络映射的形式添加

4.2.1 设置软连接快捷访问(可选)

你应该注意到了,当进入wsl2 后,默认处于 /mnt/c/Users/wys

查询磁盘,可以发现wsl2的文件结构有点特别,原先windows 系统的C盘和D盘被挂载到 /mnt 下,而且还多了一个 wsl 目录。

root@DESKTOP-58FD2RV:/# ls
bin   dev  home  lib    lib64   lost+found  mnt  proc  run   snap  sys  usr
boot  etc  init  lib32  libx32  media       opt  root  sbin  srv   tmp  var
root@DESKTOP-58FD2RV:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        251G  1.2G  238G   1% /
tmpfs           6.3G     0  6.3G   0% /mnt/wsl
tools           171G  136G   36G  80% /init
none            6.3G     0  6.3G   0% /dev
none            6.3G   12K  6.3G   1% /run
none            6.3G     0  6.3G   0% /run/lock
none            6.3G     0  6.3G   0% /run/shm
none            6.3G     0  6.3G   0% /run/user
tmpfs           6.3G     0  6.3G   0% /sys/fs/cgroup
C:\             171G  136G   36G  80% /mnt/c
D:\              67G   24G   43G  36% /mnt/d

而Ubuntu的文件,因为通过Microsoft Store安装的,默认在c盘,所以为了避免占用C盘空间,我用软连接,快捷访问D盘。在D盘中创建目录 mnt/d/wsl/Ubuntu ,以后的文件都放在这里。然后在wsl2 中直接访问 /home/ubuntu 即可,这样比较符合linux操作习惯。当然如果不闲麻烦,也可以每次手动进入D盘。

ln -s /mnt/d/wsl/ubuntu /home/ubunturoot@DESKTOP-58FD2RV:/# ll /home/
total 12
drwxr-xr-x  3 root root 4096 Apr 27 17:33 ./
drwxr-xr-x 19 root root 4096 Apr 26 16:29 ../
lrwxrwxrwx  1 root root   18 Apr 27 17:33 ubuntu -> /mnt/d/wsl/ubuntu//
drwxr-xr-x  3 ycw  ycw  4096 Apr 27 13:19 ycw/

五、安装Docker

凭借原生 Linux 内核,WSL2 拥有接近原生的文件系统性能,这导致 Docker 宣布其即将推出的Windows Docker版本将利用 WSL2而不是它目前依赖的 Moby Linux VM 在 Hyper-V 中运行 Linux 容器。您不再需要等待 Docker for Windows 启动其 VM。根据 Docker 的说法,WSL2 和 Docker 守护进程在他们的开发笔记本电脑上在 2 秒内启动,这意味着 WSL2 可以在容器启动的同时启动(而不是在启动时)。作为一个额外的好处,从容器到 Windows 主机的绑定挂载将不再依赖于 Samba 服务,而是由 WSL2 以更好的性能本地处理。

三种安装选项

因为 wsl 2 已经完整使用了 linux 内核了,所以现在有三种安装选项,主要是前两种

  • 安装Docker Desktop for Windows(设置wsl2访问)可以参考教程docker官方文档以及Microsoft WSL官方文档
  • 直接在Linux中安装Docker ce(此种方式和在linux虚拟机安装docker类似)可以参考Docker官方文档
  • Docker Toolbox for Windows(兼容Windows 10以下安装的方式,这里不讨论这种方式,不推荐

5.1 原生linux安装docker

因为wsl2已经完整使用了linux内核了,此种方式和先前在linux虚拟机安装docker类似,可以参考我之前的博客

阿里云社区Docker ce安装流程

linux安装方式有很多,这里将使用sh脚本形式来安装

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo service docker start

执行脚本安装过程中,脚本提示“建议使用Docker Desktop for windows”,20s内按Ctrl+C会退出安装,所以需要等待20s,另外此种方式需要访问外网。

检查docker安装正常

# 检查dockerd进程启动
service docker status
ps aux|grep docker
# 检查拉取镜像等正常
docker pull busybox
docker images

注意:不同于完全linux虚拟机方式,WLS2下通过apt install docker-ce命令安装的docker无法启动,因为WSL2方式的ubuntu里面没有systemd。上述官方get-docker.sh安装的docker,dockerd进程是用ubuntu传统的init方式而非systemd启动的。

vim /lib/systemd/system/docker.service### 修改文件
[Service]
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H fd:// --containerd=/run/containerd/containerd.sock
### 上面这一行,主要是增加了`-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock`1. vim /etc/default/docker2. 修改启动配置文件,如下:# 开启远程访问 -H tcp://0.0.0.0:2375
# 开启本地套接字访问 -H unix:///var/run/docker.sock
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"重启Docker
sudo service docker restart

5.2 Docker Desktop for Windows(推荐)

Docker 也专门开发了可以使用 WSL2 中的 Docker 守护进程的桌面管理程序,具体请查看docker官方文档 Docker Desktop WSL 2 backend (opens new window),打开 Docker Desktop WSL2 backend 页面,查看是否满足安装要求,然后下载最新的 Docker Desktop for Windows 程序 ,建议下载 stable 版本。

5.2.1 准备修改Docker Desktop软件默认安装路径(可选)

win10安装 docker desktop 时,没有提供选择权限,默认直接就安装到了c盘。我们可以修改默认安装路径,但是注意,这里只是修改了这个应用的程序安装位置而已,镜像和容器等数据还是默认存储在C盘。如果要修改镜像和容器等数据存储位置,下文有介绍。

网上总结的方法目前只有一种,就提前将c盘的docker安装路径软连接到其他盘,具体操作如下:

  1. 现在先建立Docker文件夹,例如 D:\software\Docker

  2. 如果已经安装的,需要去控制面板里先卸载

  3. 然后在命令提示符执行下边的命令(注意:需要管理员身份运行命令提示符)

    mklink /j "C:\Program Files\Docker" "D:\software\Docker"
    

    成功如下

  4. 最后通过下一步 [[#5.2.2 开始安装]]安装完后,可以发现 docker desktop 已经安装到了d盘

5.2.2 开始安装

官方文档:Install Docker Desktop on Windows | Docker Documentation

  • 手动下载安装

    点击以下 [链接 (opens new window)](https://desktop.docker.com/win/stable/amd64/Docker Desktop Installer.exe)下载 Docker Desktop for Windows。下载好之后双击 Docker Desktop Installer.exe 开始安装。

  • 使用 winget (opens new window) 安装(未测试)

    winget install Docker.DockerDesktop
    

    下载后直接安装,(为了避免不可预知的问题,最好用右键“以管理员身份运行”)。跟随安装界面,一路下一步即可。所有的选项都采用默认。安装成功后,点击“Close”关闭窗口。

安装成功后,启动Docker Desktop,然后在终端窗口执行命令检测是否安装成功

# 查询版本
docker version
# 查询详细信息
docker info

5.2.3 在 WSL2 运行 Docker

若你的 Windows 版本为 Windows 10 专业版或家庭版 v1903 及以上版本或 Windows 11,可以使用 WSL2 运行 Docker。

注意,这个时候在 WSL 里面执行 docker 命令是找不到的,需要设置一下。

  1. 打开 Docker Desktop Settings,选择General

    勾选Use WSL 2 based engine。(如果在已经支持WSL的操作系统上,安装Docker Desktop,那么这个选项是被默认选中的,无需更改。)

    注意,如果不选中Use WSL 2 based engine,Resources下面就会回到之前版本的模样。自己制定CPU、内存等信息。但是该版本指定这些信息会出错(这是给WSL 1 用的)。

  1. 进入 Settings > Resources > WSL Integration

    在这个界面中,选择任何你想要使用的Linux发行版本(手动选择后,可以在Linux中来操作Docker)。

    点击 Apply & Restart

  2. 重启 Docker desktop for Windows,重启完成后我们就可以在 WSL2里面使用 docker 命令了

在WSL2里面执行 df -Th ,会发现增加了一些新的与docker有关的挂载点。

5.2.4 修改镜像和容器等数据存储位置(可选)

因为我使用的是WSL2的版本,docker 运行数据都在 WSL 发行版中,文件位置都只能由 WSL 管理。因此 docker desktop 在安装的时候创建如下两个发行版(distro)

  • docker-desktop
  • docker-desktop-data

说明

这两个wsl子系统默认存放在系统盘(即使通过上文修改了Docker Desktop的安装路径),默认存储位置: %LOCALAPPDATA%/Docker/wsl (即 C:\Users\xxxxx\AppData\Local\Docker\wsl)。如果访问 %LOCALAPPDATA%/Docker/wsl 目录,就可以看到两个文件夹,同时每个文件夹中都会有一个 vhdx 文件。

  • data/ext4.vhdx 是被 docker-desktop-data 发行版使用,存放镜像
  • distro/ext4.vhdx 是被 docker-desktop 发行版使用,存放程序(内存占用小,根据需要,可以不用修改)

docker-desktop-data 是被用来存储docker images 以及相关的数据。因此,它的大小会随着使用逐步增长,因此导致系统盘空间不足。

vhdx文件最大支持256G,超过此大小,则可能需要对其进行扩展。参见:扩展 WSL 2 虚拟硬盘|的大小微软文档 (microsoft.com)

修改方法如下:

  • 方法一:通过 wsl 命令进行操作

    # 查看已创建子系统
    C:\Users\xxxxx>wsl -l -v --allNAME                   STATE           VERSION
    * Ubuntu                 Running         2docker-desktop-data    Running         2docker-desktop         Running         2# 终止所有正在运行的docker发行版
    # 可以使用以下命令立即终止所有正在运行的发行版,包括Ubuntu,可以手动退出Docker Desktop也行
    C:\Users\xxxxx>wsl --shutdown# 再次查看,保证docker发行版也停止运行,
    C:\Users\xxxxx>wsl -l -vNAME                   STATE           VERSION
    * Ubuntu                 Running         2docker-desktop-data    Stopped         2docker-desktop         Stopped         2# 备份导出wsl子系统镜像(注意,根据官方说明,最好在停止发行版8秒后,再来操作)
    C:\Users\xxxxx>wsl --export docker-desktop E:\Docker\wsl\docker-desktop\docker-desktop.tar
    # 注意,原有的 docker images 也会一起导出
    C:\Users\xxxxx>wsl --export docker-desktop-data E:\Docker\wsl\docker-desktop-data\docker-desktop-data.tar# 注销删除现有的wsl子系统,注销过后会发现原来在c盘的ext4.vhdx文件已经删除了
    C:\Users\xxxxx>wsl --unregister docker-desktop
    正在注销...
    C:\Users\xxxxx>wsl --unregister docker-desktop-data
    正在注销...# 重新创建wsl子系统
    C:\Users\xxxxx>wsl --import docker-desktop E:\Docker\wsl\docker-desktop E:\Docker\wsl\docker-desktop\docker-desktop.tar --version 2
    C:\Users\xxxxx>wsl --import docker-desktop-data E:\Docker\wsl\docker-desktop-data E:\Docker\wsl\docker-desktop-data\docker-desktop-data.tar --version 2
    

    根据需要,设置默认分发版(可选,因为我是默认使用Ubuntu,所以不执行)

    wsl -s docker-desktop
    

    重新启动 docker desktop,验证docker服务是否可以正常使用。查看新目录中的vhdx的修改时间,如果修改时间是最新时间,就说明配置成功。然后随便拉个nginx下来启动试试。

    验证成功后,上面导出的两个文件根据自己需要进行删除。

    del E:\docker\wsl\docker-desktop\docker-desktop.tar
    del E:\docker\wsl\docker-desktop-data\docker-desktop-data.tar
    
  • 方法二:通过软链接(未测试)

    1. %LOCALAPPDATA%/Docker/wsl/data 下的 ext4.vhdx 复制到想要的路径下,本文路径为:E:\Docker\wsl\docker-desktop-data

    2. 删除源文件夹,本文是 %LOCALAPPDATA%/Docker/wsl 下的 data 文件夹

    3. 以管理员运行cmd并且使用以下命令创建链接:

      mklink /J C:\Users\xxxxx\AppData\Local\Docker\wsl\data E:\Docker\wsl\docker-desktop-data
      

      请大家自行替换路径,本文路径分别为源路径:C:\Users\Administrator\AppData\Local\Docker\wsl\data,以及想要移动的路径:E:\Docker\wsl\docker-desktop-data ,此时可以在源路径看到新建出来的软链接文件夹

    4. %LOCALAPPDATA%/Docker/wsl/distro下的 ext4.vhdx 也是同样的操作,这里不重复介绍

    5. 重新启动 docker desktop,验证docker服务是否可以正常使用。查看新目录中的vhdx的修改时间,如果修改时间是最新时间,就说明配置成功。然后随便拉个nginx下来启动试试。

  • 总结网上的其他方法(这些方法感觉不是很靠谱,未测试。有测试过的同行,麻烦踢我一下)

    • 方法一:打开docker desktop 的 Settings,点击左侧 menu,找到 Resources 按钮,点击并找到 Disk Image Location,然后进行修改(这种方法有很多人找不到这个选项,是因为Docker 被WSL2管理,不允许修改)

    • 方法二:打开docker desktop 的 Settings,点击左侧 Docker Engine,修改配置文件,添加 graph 属性(操作很简单,但我不想测试了)

    参考博客:windows10 docker 安装在D盘

5.2.5 Docker + WSL 2使用手册

官方文档:Docker Desktop for Windows 用户手册|Docker 文档

这里给出一点建议

  1. 使用 Docker 和 WSL 2 进行工作或者开发应用程序。建议使用Linux 容器,这样在 Linux 发行版中,也能方便使用 Docker 。

  2. 如何访问 windows containers 中的数据库或者网站呢?用容器ip访问

  3. 如何访问 linux containers 中的数据库或者网站呢?

    如果是宿主机访问容器:用localhost、127.0.0.1、宿主机局域网ip

    如果是局域网中其他客户端访问:用宿主机局域网ip

5.3 两种安装方式总结

  1. WSL2下原生linux安装docker方式和完全linux虚拟机安装docker类似,区别在于WSL2下的linux不支持systemd。

  2. Docker Desktop for windows方式,其实质是利用docker的C/S架构,将windows模式下的docker对应docker.sock,docker客户端二进制和docker的数据目录挂载到WSL2里面的linux机器,在此linux机器下执行docker命令(docker命令为docker客户端),实质为客户端通过挂载的 /var/run/docker.sock 文件与windows里面的dockerd服务端进程通信。如下图,我们在linux下重新启动linux下dockerd进程,linux模式下下载的busybox镜像又可以看到了,/var/run/docker.sock 的时间戳也被更新了,此时客户端通过 /var/run/docker.sock 文件与linux下的dockerd服务端通信。

    Docker for Desktop 里 Windows ContainerLinux Container 两种 docker 容器化运行时,两种运行时不能同时使用,可以切换,切换过程中数据是不会丢失的,你不可以在 windows container 环境下操作 linux container 的镜像与容器,更不能在 linux container 环境下操作 windows container 的镜像和容器,两者架构上不一致。

    要使用哪个模式下的docker,重启下该模式下的docker服务端即可,本质都是修改 /var/run/docker.sock 文件。理论可以同时使用,但是需要修改docker配置,通过 -H 参数增加dockerd的tcp监听,执行具体docker命令时指定dockerd监听的对应IP和端口即可。

    切换操作如下,右键点击图标,可以切换 containers,**默认安装完就是 Linux Container ,不推荐使用 Windows containers **。

    有些是因为系统版本不太行,不能选择 Windows containers(下图是本人很早时候安装出现的情况)

    windows terminaldocker ps 命令在windows和ubuntu中查看容器进程,查到的结果是一样的。

最后,就可以在win 10 下使用各种 linux 子系统了, 也可以在 win10 和 linux 下使用 docker 和以及 kubernetes 啦。

5.4 检查 WSL 模式

确保Linux发行版本是运行在WSL 2 模式下。WSL 在V1 和 V2 两种模式下都可以运行

首先在 Windows PowerSell 中,输入:

wsl -l -v

就可以查看到,多了 docker desktop 的信息。(因为我是安装的Docker Desktop for Windows

PS C:\Users\wys> wsl -l -vNAME                   STATE           VERSION
* Ubuntu                 Running         2docker-desktop-data    Running         2docker-desktop         Running         2

如果现有的 WSL 是v1,通过下面的命令可以升级为 v2:

wsl --set-version (distro name) 2

想要把 v2 设置为默认模式,可以通过下面的命令:

wsl --set-default-version 2

开始使用!

在Windows CMD中,通过命令随便运行几个容器。在Linux中,就可以查看到已经运行的容器信息。

5.5 配置镜像加速器(阿里云)

安装 Docker 软件后,可以直接通过 docker pull 命令拉取镜像。如未配置镜像加速源,直接拉取 DockerHub 中的镜像,通常下载速度会比较慢。这里我将用阿里云镜像加速器。

5.5.1 Docker Desktop for Windows

在系统右下角托盘图标内右键菜单选择 Settings,打开配置窗口后左侧导航菜单选择 Docker Engine。编辑窗口内的JSON串,填写下方加速器地址:

{"registry-mirrors": ["https://4bj04jx5.mirror.aliyuncs.com"]
}

编辑完成后点击 Apply 保存按钮,等待 Docker 重启并应用配置的镜像加速器。

5.5.2 Docker ce

这里适用于Ubuntu 和 CentOS

针对Docker客户端版本大于 1.10.0 的用户

您可以通过修改daemon配置文件 /etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://4bj04jx5.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

参考链接:

配置 Docker 镜像加速源地址

阿里云镜像加速

5.6 可能出现的问题

  • docker for windows could not read CA certificate

    问题原因:之前安装过 docker toolbox

    解决步骤:

    1. 删掉四个docker 的环境变量
    2. 执行cmd命令 docker-machine rm default
    3. 以管理员身份执行cmd命令 @FOR /f “tokens=*” %i IN (‘docker-machine env -u’) DO @%i
  • Filesharing has been cancelled

    安装成功后,可能用到docker-compose,对于新手,这部分可能会遇到麻烦。

    问题原因:当前创建的目录没有加入到文件分享当中,导致操作被取消(如果开启WSL 2就没有这个问题)

    解决步骤:

    1. Docker Desktop -> Settings -> Resources -> File Sharing
    2. 将当前项目目录或项目的父级目录(根目录或上几级)添加进去
    3. Apply & Restart
    4. Docker Desktop -> Restart
  • Ubuntu22.04 Dokcer 安装 mysql8.0 失败,日志如下:mysqld: Cannot change permissions of the file ‘ca.pem’ (OS errno 1 - Operation not permitted)

    root@LAPTOP-LHBT0GVK:/home/dockerdata/mysql8.0# docker logs mysql8.0
    2022-10-17 16:24:27+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
    2022-10-17 16:24:27+08:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
    2022-10-17 16:24:27+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
    2022-10-17 16:24:27+08:00 [Note] [Entrypoint]: Initializing database files
    mysqld: [Warning] World-writable config file '/etc/my.cnf' is ignored.
    2022-10-17T08:24:27.814101Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.27) initializing of server in progress as process 43
    2022-10-17T08:24:27.823718Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
    2022-10-17T08:24:27.831806Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
    2022-10-17T08:24:29.447600Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
    mysqld: Cannot change permissions of the file 'ca.pem' (OS errno 1 - Operation not permitted)
    2022-10-17T08:24:31.139785Z 0 [ERROR] [MY-010295] [Server] Could not set file permission for ca.pem
    2022-10-17T08:24:31.139843Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
    2022-10-17T08:24:31.140179Z 0 [ERROR] [MY-010119] [Server] Aborting
    2022-10-17T08:24:32.831797Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.27)  MySQL Community Server - GPL.
    

    在 WSL2 发行版中创建。/etc/wsl.conf,输入以下内容

    [automount]
    options = "metadata"
    

    保存()并重新启动 WSL

    # 关闭所有的wsl
    wsl --shutdown
    # 启动wsl
    wsl
    

    参考:Docker安装MYSQL无法运行的天坑 mysqld: Can’t read dir of ‘/etc/mysql/conf.d/’ (OS errno 13 - Permission den…

六、安装桌面环境(可选)

补充:实在没有必要在WSL 中安装桌面环境和输入法等等,感觉就很另类,而且不实用,别整这些花里胡哨的。我写这个流程,单纯是因为公司需要桌面环境,所以尝试了一下,反正我最后卸载了。

6.1 介绍

WSL 2是为开发人员准备的命令行工具,今天突然在官网发现,WSL 2已经支持原生GUI,但有先决条件。

  • 需要 Windows 11 版本22000或更高 版本才能访问此功能。 可以加入 Windows 预览体验计划,以获取最新的预览版。

  • 安装了 vGPU 的驱动程序

    若要运行 Linux GUI 应用,你应该首先安装与你的系统匹配的预览驱动程序。 这使你能够使用虚拟 GPU (vGPU) 以便你可以从硬件加速 OpenGL 呈现中获益。

这里我的电脑系统比较老,同时不愿意加入预览体验计划(不想踩坑),而且也不愿意加入升级 Windows 11(还是不想踩坑),所以不尝试这种方法。有需要的可以参考博客:WSL 2 GUI 原生支持!

因为桌面环境可以在WSL2内部运行,我们可以使用适用于 Windows 的 X 服务器来侦听 Linux 中的 X11(图形)程序。实现原理是,远程桌面启动监听服务用于监听,WSL启动程序后把界面数据发送给远程桌面软件,远程桌面软件接收到数据进行绘制,于是在Win下看到图形界面。

安装流程总共分为三步

  • 安装远程桌面服务(xrdp,Xming或VcXSrv)

  • 安装X11(图形)程序(xfce4,xubuntu-desktop,ubuntu-desktop)

  • 进行配置设置

以下是我找到的大部分方案:

  • 直接安装 xfce4 ,然后设置 xrdp 远程连接,参考这个B站视频教程。xfce4 是一个轻量级桌面环境,推荐这个。

  • 安装 xubuntu-desktop ,然后设置 xrdp 远程连接,参考这个教程。xubuntu 桌面相当于 xfce4 桌面加上一些小工具。

  • 安装 ubuntu-desktop,使用 X Server,参考:WSL 使用指南——04 安装桌面环境

  • 安装 ubuntu-desktop,并使用 VcXsrv 显示服务器程序显示。参考这个教程

    • 注意这个教程在 WSL2 下 ubuntu18.04LTS 中没有问题。但安装 ubuntu20.04LTS 桌面环境可能会失败。据说是因为 gnome 桌面是基于 systemd,而 WSL 不支持 systemd,所以需要先安装 systemd。操作流程参考流程[[#2.3.4 安装WSL的systemd脚本]]。

6.2 开始

本人安装的WSL 分发版是 Ubuntu 20.04.3 LTS (GNU/Linux 5.4.72-microsoft-standard-WSL2 x86_64) ,准备采用第一种方法xfce4 + xrdp

6.3 源更新与升级依赖

设置国内源,这里省略,可参考流程[[#2.3.3 修改ubuntu的apt安装源]]

sudo apt update
sudo apt upgrade

6.4 安装桌面环境

在 Ubuntu 源仓库有很多桌面环境供你选择。一个选择是安装 Gnome,它是 Ubuntu 20.04 的默认桌面环境。另外一个选项就是安装 xfce。它是快速,稳定,并且轻量的桌面环境,使得它成为远程服务器的理想桌面。

不同的桌面环境,可以参考文章Ubuntu & XFCE vs Xubuntu区别介绍

6.4.1 安装xfce4

sudo apt install xfce4

安装 xfce4 过程中,会弹框出现选择显示管理DM选择 gdm3lightdm 的提示,建议选择 lightdm

如果错过了安装过程中出现的这个向导,那么可以在安装完成后执行下面的命令重新设置DM

sudo dpkg-reconfigure lightdm

6.5 为当前用户指定登录session类型

注意这一步很重要,如果不设置的话会导致后面远程桌面连接上闪退

$ vim ~/.xsession# 写入下面内容(就一行)
xfce4-session

或者一步到位

sudo echo xfce4-session > ~/.xsession

这是告诉系统,开启桌面环境的时候用 xfce4-session

完成后,执行下面这段代码就可以看到桌面的图形界面了。

xfce4-session

6.6 安装远程桌面服务

补充:如果想连接虚拟机或者双系统里面的Ubuntu,同样可以参考此流程。

Xrdp 是一个微软远程桌面协议(RDP)的开源实现,它允许你通过图形界面控制远程系统。通过 RDP,你可以登录远程机器,并且创建一个真实的桌面会话,就像你登录本地机器一样。

6.6.1 安装xrdp

Xrdp 被包含在默认的 Ubuntu 软件源中。想要安装它,运行:

sudo apt-get install xrdp

一旦安装完成,Xrdp 服务将会自动启动。你可以输入下面的命令,验证它:

sudo systemctl status xrdp

如果提示找不到该命令,那是没有安装 systemd 命令。参考[[#2.3.4 安装WSL的systemd命令]]

输出将会像下面这样:

● xrdp.service - xrdp daemonLoaded: loaded (/lib/systemd/system/xrdp.service; enabled; vendor preset: enabled)Active: active (running) since Fri 2021-11-02 17:36:16 UTC; 2min 27s ago...

默认情况下,Xrdp 使用/etc/ssl/private/ssl-cert-snakeoil.key,它仅仅对“ssl-cert” 用户组成语可读。运行下面的命令,将xrdp用户添加到这个用户组:

sudo adduser xrdp ssl-cert

重启 Xrdp 服务,使得修改生效:

sudo systemctl restart xrdp

就这样。Xrdp 已经在你的 Ubuntu 服务器上安装好了,你可以开始使用它了。

6.6.2 修改xrdp配置

Xrdp 配置文件定位在/etc/xrdp目录。对于基本的 Xrdp 连接,你不需要对配置文件做任何改动。

主要的配置文件被命名为 xrdp.ini。这个文件被分成不同的段,允许你设置全局配置,例如安全,监听地址,创建不同的 xrdp 登录会话等。

修改默认端口

由于 xrdp 安装好后,默认配置使用的是和Windows远程桌面相同的 3389 端口,为了防止和Windows系统远程桌面冲突,建议修改成其他的端口。(虚拟机和双系统可忽略

$ sudo vim /etc/xrdp/xrdp.ini
# 修改下面这一行,将默认的3389改成其他端口即可
port=3390

或者

sudo sed -i 's/port=3389/port=3390/g' /etc/xrdp/xrdp.ini

修改图像设置(可选)

sudo vim /etc/xrdp/xrdp.ini

max_bpp=32 修改为128(最大位图深度)

#xserverbpp=24 修改为128,取消注释‘#’。

设置连接会话进程是否保留

sudo vim /etc/xrdp/sesman.ini

KillDisconnected的值修改为 true,保存退出。这样每次断开连接时,linux都会关闭会话进程,连接数量达到上限,出现问题。

设置 Xrdp 连接的桌面环境

Xrdp 使用默认的 X Window 桌面环境(Gnome or XFCE)。Xrdp 使用 startwm.sh 文件启动 X 会话。如果你想使用另外一个 X Window 桌面,编辑这个文件。

sudo vim /etc/xrdp/startwm.sh

用#注释末尾两行test和exec:

test -x /etc/X11/Xsession && exec /etc/X11/Xsession exec /bin/sh
/etc/X11/Xsession

添加一行

startxfce4# 如果你是装的虚拟机或者双系统Ubuntu桌面版(即桌面环境默认是ubuntu-desktop,Unity桌面),则这里就添加gnome-session

不管什么时候你对配置文件做出修改,你需要重启 Xrdp 服务。

6.6.3 重启一下电脑

本人测试发现,这里需要重启电脑主机,不然可能报错,重启后再启动xrdp。大家可以先跳过这步试试,不行再重启电脑。

6.6.4 启动xrdp

由于WSL2里面没有 systemd ,所以需要手动启动

sudo /etc/init.d/xrdp start

或者可以安装 systemd ,参考步骤[[#2.3.4 安装WSL的systemd脚本]]

sudo service xrdp restart

6.6.5 查看IP地址

ip a

eth0 项中,inet 后面的地址记下来。

6.7 远程连接

按下 windows + R 键,输入 mstsc 打开远程桌面连接

在计算机(Computer)栏输入刚才记下的ip地址及端口3390,或者地址输入localhost:3390,注意这里的端口号应当与上面修改配置中一致。用户名可填可不填,因为之后会提示填写,或者输入 WSL 2 中使用的账号密码

如果连接不上,可以用 telnet 命令测试端口是否开启。如果连接不通,检查 Xrdp 是否启动,同时是否有防火墙设置。

6.7.1 配置防火墙

Xrdp 守护程序在所有的网络接口上默认监听端口3389。如果你在你的 Ubuntu 服务器上运行一个防火墙,你需要打开 Xrdp 端口。

想要允许从某一个指定的 IP 地址或者 IP 范围访问 Xrdp 服务器,例如192.168.33.0/24,你需要运行下面的命令:

sudo ufw allow from 192.168.33.0/24 to any port 3389

如果你想允许从任何地方访问(由于安全原因,这种方式不鼓励),运行:

sudo ufw allow 3389

想要增加安全,你可以考虑 Xrdp 仅仅监听 localhost,并且创建一个 SSH 隧道,将本地机器的3389端口到远程服务器的同样端口之间的流量加密。

6.8 设置中文以及安装输入法(坑)

本人尝试各种方法,均测试失败,所以下面流程可以跳过。如果有人成功了,麻烦在评论区踢我一脚

6.8.1安装中文语言包

方法一:

sudo dpkg-reconfigure locales

然后一直按键盘上的 ↓ 找到 zh_CN UTF-8,然后按空格勾选,再tab切换到ok上回车,接下来的界面选 zh 再回车。
这一步完成后可能会导致键盘不可用,不用激动,点击桌面左上角图标注销后重进就好了。

首次进入中文界面会提示是否重命名那几个文件夹,建议保持英文状态,因为有些路径是写进配置文件了的,重命名会带来不必要的麻烦。

方法二:

sudo apt install language-pack-zh-hans

6.8.2 修改默认语言环境为中文

设置本地化环境变量

echo "LANG=zh_CN.UTF-8" >> ~/.profile

或者通过 locale-gen

sudo locale-gen zh_CN.UTF-8

6.8.3 安装完整的语言支持

打开Applications->Settings->Language Support,按提示安装包就可以。或者执行命令

sudo /usr/bin/gnome-language-selector

如果出现闪退,可以在终端中来启动,发现错误:Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory

解决办法:

sudo apt-get install dbussudo /etc/init.d/dbus start

再次打开语言支持,开始安装

在 system settings->language support->install/remove languages,在弹出的菜单中选择Chinese(simplified),点击apply

为了避免每次重启都得手动运行 dbus,可以在应用程序 - 设置 - 会话与启动 - 应用程序自启动,添加 /etc/init.d/dbus start

6.8.4 安装中文输入法

任选一种

安装中文输入法fcitx-pinyin

参考链接:安装中文输入法

sudo apt install fcitx fcitx-pinyin
echo -e "export XMODIFIERS=@im=fcitx\nexport GTK_IM_MODULE=fcitx\nexport QT_IM_MODULE=fcitx\n" >> ~/.profile

软件包已装,在应用程序 - 设置 - 会话与启动 - 应用程序自启动,添加 /usr/bin/fcitx

打开系统自带的 Input Method Configuration,直接点击OK、Yes,然后将默认的 ibus 切换为 fcitx,一路OK

搜狗输入法是建立在fcitx框架之上的,所以要将输入法框架选择为fictx,

安装搜狗输入法

官方安装指南

6.9 可能出现的问题

6.9.1 xrdp远程桌面黑屏处理

sudo vim /etc/xrdp/startwm.sh
在上面文件中添加unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR

添加位置如下图:

重启 xrdp

sudo service xrdp restart#没效果就用下面的命令:
sudo /etc/init.d/xrdp restart

6.9.2 进入图形界面一段时间后黑屏

进入图形界面,点击右上角Applications—>Settings—>Light Locker Settings。

设置 Automatically lock the session 为 Never。

6.9.3 运行一段时间后,出现xrdp_mm_process_login_response: login failed

问题原因:远程桌面没有正确关闭,虽然在windows 系统关闭远程桌面连接,但是在里linux上的进程还在运行,导致连接数量达到上限,出现问题。

解决:通过设置 sesman.in 文件内的参数,解决。

vim /etc/xrdp/sesman.ini

可以修改会话设置 :将最大会话限制该大 MaxSessions=50
将KillDisconnected=1;则每次断开连接时,linux都会关闭会话进程。

然后重启/etc/init.d/xrdp restart 就可解决问题

6.10 安装软件

再次提醒先设置好 apt 源,可以手动修改文件,或者从图形界面的设置中进行设置

6.11 安装Chrome

可以直接从软件市场中下载

这种比较方便

命令行安装

  1. 为Google Chrome浏览器创建源列表文件

    sudo vim /etc/apt/sources.list.d/google-chrome.list
    
  2. 添加源

    deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main
    
  3. 运行以下命令以下载Google的签名密钥

    wget https://dl.google.com/linux/linux_signing_key.pub
    
  4. 使用apt-key将其添加到密钥环中,以便包管理器可以验证Google Chrome deb包的完整性

    sudo apt-key add linux_signing_key.pub
    
  5. 更新包列表并安装稳定版Google Chrome

    sudo apt updatesudo apt install google-chrome-stable
    
  6. 从命令行启动Chrome浏览器

    google-chrome-stable如果提示Running as root without --no-sandbox is not supported.
    这是因为当前是root用户下安装的,所以无法打开,而非root用户上启动下,肯定能启动起来。可以在启动命令后增加“–no-sandbox”
    /usr/bin/google-chrome-stable –no-sandbox如果不想一直使用命令启动,可以在 /usr/share/applications中找到Chrome的快捷方式,然后右键在其properties中command中增加”–no-sandbox”即可。从此以后,就可以直接在Search中找到Chrome进行启动了,或者将快捷方法发送到桌面来启动。
    

七、WSl 命令参考

命令行官方文档:https://docs.microsoft.com/zh-cn/windows/wsl/basic-commands

以下基本的 WSL 命令以 PowerShell 或 Windows 命令提示符支持的格式列出。 若要通过 Bash/Linux 发行版命令行运行这些命令,必须将 wsl 替换为 wsl.exe

  • 列出已安装的 Linux 发行版

    wsl --list --verbose
    或者
    wsl -l -v其他选项包括:
    --all(列出所有发行版)
    --running(仅列出当前正在运行的发行版)
    --quite(仅显示发行版名称)。
    
  • 列出可用的 Linux 发行版

    查看可通过在线商店获得的 Linux 发行版列表。

    wsl --list --online
    或者
    wsl -l -o
    
  • 设置默认 WSL 版本

    wsl --set-default-version <Version>
    

    若要将默认版本设置为 WSL 1 或 WSL 2,请将 <Version> 替换为数字 1 或 2,表示对于安装新的 Linux 发行版,你希望默认使用哪个版本的 WSL。 例如,wsl --set-default-version 2

  • 设置 WSL 版本

    wsl --set-version <distribution name> <versionNumber>
    

    若要指定运行 Linux 发行版的 WSL 版本(1 或 2),请将 <distribution name> 替换为发行版的名称,并将 <versionNumber> 替换为 1 或 2。

  • 设置默认 Linux 发行版

    wsl --set-default <Distribution Name>
    或者
    wsl -s <Distribution Name>
    

    若要设置 WSL 命令将用于运行的默认 Linux 发行版,请将 <Distribution Name> 替换为你首选的 Linux 发行版的名称。

  • 通过 PowerShell 或 CMD 运行特定的 Linux 发行版

    wsl --distribution <Distribution Name> --user <User Name>
    

    若要通过特定用户运行特定 Linux 发行版,请将 <Distribution Name> 替换为你首选的 Linux 发行版的名称(例如 Debian),将 <User Name> 替换为现有用户的名称(例如 root)。 如果 WSL 发行版中不存在该用户,你将会收到一个错误。 若要输出当前用户名,请使用 whoami 命令。

  • 更新 WSL

    wsl --update
    

    手动更新 WSL Linux 内核的版本。 还可以使用 wsl --update rollback 命令回滚到 WSL Linux 内核的上一版本。

  • 检查 WSL 状态

    wsl --status
    

    查看有关 WSL 配置的常规信息,例如默认发行版类型、默认发行版和内核版本。

  • Help 命令

    wsl --help
    

    查看 WSL 中可用的选项和命令列表。

  • 主目录

    wsl ~
    

    ~ 可与 wsl 一起使用,以在用户的主目录中启动。 若要在 WSL 命令提示符中从任何目录跳回到主目录,可使用命令 cd ~

  • 关闭

    wsl --shutdown
    

    立即终止所有正在运行的发行版和 WSL 2 轻量级实用工具虚拟机。 在需要重启 WSL 2 虚拟机环境的情形下,例如更改内存使用限制或更改 .wslconfig 文件,可能必须使用此命令。

  • Terminate

    wsl --terminate <Distribution Name>
    

    若要终止指定的发行版或阻止其运行,请将 <Distribution Name> 替换为目标发行版的名称。

  • 注销或卸载 Linux 发行版

    wsl --unregister <Distribution Name>
    

    通过将 <Distribution Name> 替换为目标发行版的名称,注销或卸载特定发行版。 这会从 WSL 中删除此发行版,并删除所有关联的数据、设置和软件。 还可以像卸载任何其他应用商店应用程序一样卸载 Windows 计算机上的 Linux 发行版应用。

参考链接

【WSL+Docker】新手Win10下的WSL Ubuntu18并使用Docker(两种方式)

WSL(Ubuntu20.04)与其图形界面安装配置

用于 WSL 2 上的 Ubuntu 的 Xfce4 桌面环境和 X 服务器

文章更新日志

  • 2022-10-19 补充安装Ubuntu22.04版本遇到的问题
  • 2022-03-03 为每个软件环境安装,增加自定义方案。优化文章结构,更新软件版本变动
  • 2021-05-08 编写文章

WSL2 + Docker + xfce4安装及使用相关推荐

  1. Win10 WSL2 linux 子系统安装Docker

    背景 由于开发需要linux环境,于是windows系统下安装了ubuntu子系统,但是无法通过正常方式安装docker,于是有了如下操作 步骤 下面为大家详细介绍具体的操作步骤. 安装Docker ...

  2. docker kali 安装 xfce4 桌面 + tigervnc + novnc

    docker kali 安装 xfce4 桌面 + tigervnc + novnc 启动容器 环境变量 准备工作 安装xfce4 桌面 tigervnc 安装 tigervnc 启动 tigervn ...

  3. Windows10中Docker的安装与遇到的那些坑

    场景 CentOS7中Docker的安装与配置: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119028701 上面在Cent ...

  4. 从零实操基于WSL2 Docker部署Asp.Net Core项目

    前言 平日在公司里都是基于阿里Teambition中的飞流进行Docker部署Api项目或服务,已经习惯了那一套成熟的操作流程,开发和部署确实快捷方便,但是还没在自己的电脑上进行操作过,特别是Wind ...

  5. 【Win11家庭中文版本Docker Desktop安装指北】

    前言 服役多年的老mac有点不堪重负,对于我安装N个软件在上面跑表示了抗议,于某一天终于宣布身体不再健康了,虽然拿去修了恢复正常,但是还是担心存在隐患,于是决定换一台电脑,但是尴尬的疫情买一个MAC发 ...

  6. WSL2+Docker环境搭建

    WSL2+Docker环境搭建 WSL2环境搭建 Docker环境搭建 注意 参考 WSL2环境搭建 将Windows10版本升级至2004及以后,如无收到升级推送,可使用Windows 10易升进行 ...

  7. Docker的安装、镜像源更换与简单应用

    Docker的安装.镜像源更换与简单应用[阅读时间:约20分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.Docker的安装 四.Docker的简单应用 1. ...

  8. 客快物流大数据项目(八):Docker的安装和启动

    目录 Docker的安装和启动 一.服务器规划 二.安装Docker 1.验证Linux内核版本 <

  9. Docker初学2:Docker的安装

    Docker的安装 Docker的架构图 我们先来介绍一下上面这张Docker架构图 镜像(image): Docker 镜像(Image)就是一个只读的模板.镜像可以用来创建 Docker 容器,一 ...

最新文章

  1. 怎么样配置交换机TRUNK
  2. springboot 启动类注解 @SpringBootApplication 和 @ComponentScan 的问题
  3. 5G NR SRS (R15)
  4. 刚刚教育部发声:老师性骚扰学生 零容忍!“害群之马”将被严惩
  5. 比较从 vSphere 5.x 到 vSphere 6.5 的各个版本
  6. 港中文用 Zoom 考试,中途遭黑客入侵传播不可描述内容
  7. 【PL/SQL】处理数据
  8. 鸿蒙os 2.0跑分,预装鸿蒙 OS 2.0!华为 MatePad Pro2 跑分曝光:麒麟 9000、8GB 内存
  9. python读取url中存储的数据_Python实现从URL地址提取文件名的方法
  10. 如何向Mac Dictionary App添加其他语言
  11. 基于Visual studio+Opencv+Python的透视变换、图像处理(灰度化、二值化、Canny边缘检测)模型——以2015数学建模A题太阳影子定位为例
  12. 关于svn汉化包安装无效的解决办法
  13. 数值分析的学科体系_清华大学 数值分析 视频教程
  14. matlab里面的取整函数
  15. 进入MySQL目录下的bin文件夹
  16. 姜维拥兵10万 为何守不住刘备的半壁江山
  17. python计算时间
  18. TCP连接,三次握手问题
  19. DATA GUARD代码(部分)
  20. 机器学习中的矩阵向量求导(一) 求导定义与求导布局

热门文章

  1. 【每天一个java设计模式(十四)】 - 解释器模式
  2. 大数据的理论基础是什么
  3. linux 16.04系统下载,Ubuntu下载 Ubuntu 16.04 LTS 官方正式版 32位 下载-脚本之家
  4. HTML+CSS+JS——龙之谷网络游戏(9页) 学生网游网页设计模板 大学生HTML网页制作作品 简单手游网页设计成品 dreamweaver学生网站模板
  5. 梦幻模拟战手游服务器维护,服务器数据互通公告
  6. V3.0element中table表格树形结构与懒加载通过接口获取展开行数据,并实现自动展开某行以及展开行数据删除,编辑,新增,展开行某些列不显示等功能
  7. C语言编码助手 1.9发布
  8. 元宇宙电商NFG是什么?
  9. PHP timeout情况_php脚本运行时的超时机制详解
  10. 数据库排序数据(ORDER BY)