在计算机上使用 Linux 系统通常有两种方式:使用虚拟机或安装 Linux 系统。使用虚拟机时开销较大,直接使用 Linux 系统虽然可以带来流畅体验,但与 Windows 之间来回切换比较麻烦。为此,微软开发了适用于 Linux 的 Windows 子系统,简称 WSL。
WSL 可以让开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 系统。 通过WSL开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),并直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具,不用进行任何修改,也无需承担传统虚拟机或双启动设置的开销。
WSL 1 和 WSL 2 之间的主要区别在于,在托管 VM 内使用实际的 Linux 内核、支持完整的系统调用兼容性以及跨 Linux 和 Windows 操作系统的性能。
从上表中可以看出,WSL 2 架构在几个方面优于 WSL 1,但跨 OS 文件系统的性能除外,对于这种情况,可通过将项目文件存储在与处理项目时运行的工具相同的操作系统上进行处理。
WSL 2 仅在 Windows 11 或 Windows 10 版本 1903、内部版本 18362 或更高版本中可用。 通过按 Windows 徽标键 + R,检查你的 Windows 版本,然后键入 winver,选择“确定”。
如果运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 ,则可使用命令 wsl --install 安装运行 WSL 所需的一切内容,具体步骤参考 安装 WSL | Microsoft Learn 。此命令将启用运行 WSL 并安装 Linux 的 Ubuntu 发行版所需的功能,默认安装在C盘用户的Appdata目录中。下面介绍手动安装 WSL 以及 Linux 发行版的步骤。
需要先启用 “适用于 Linux 的 Windows 子系统“ 可选功能,才能在 Windows 上安装 Linux 分发版。在 设置 -> 更新与安全->开发者选项 中开启 开发人员模式 ,然后在 程序和功能 -> 启用或关闭 Windows 功能 中勾选 适用于 Linux 的 Windows 子系统 ,重启计算机。
命令行方式:以管理员身份打开终端 PowerShell 然后输入以下命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
若要更新到 WSL 2,需要运行 Windows 10:
或 Windows 11。
安装 WSL 2 之前,必须启用 ”虚拟机平台” 可选功能。在 程序和功能 -> 启用或关闭 Windows 功能 中勾选 虚拟机平台 可选功能或者以管理员身份打开终端 PowerShell 并运行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重启计算机,以完成 WSL 安装并更新到 WSL 2。
1. 下载最新包:适用于 x64 计算机的 WSL2 Linux 内核更新包
2. 运行上一步中下载的更新包。(双击运行 - 系统将提示你提供提升的权限,选择“是”)
打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:
wsl --set-default-version 2
1. 通过 Microsoft Store 或者使用命令 wsl --install 自动安装。默认安装的 Linux 分发版是 Ubuntu ,可使用命令 wsl --install -d
2. 导入要与 WSL 一起使用的任何 Linux 发行版 | Microsoft Learn
3. 使用 LxRunOffline 插件能够安装任意发行版系统到任意目录,且具备转移已安装WSL目录、备份等功能,是一个极好的 WSL 管理软件,下面主要介绍使用 LxRunOffline 安装发行版。
GitHub 下载最新版:https://github.com/DDoSolitary/LxRunOffline/releases 下载并解压缩之后直接拷贝到 C:\Windows\System32 或者 添加插件目录到环境变量 Path。如果需要通过右键菜单功能执行某些功能操作,则需要以管理员权限打开终端,执行 regsvr32 LxRunOfflineShellExt.dll 完成功能注册。最后打开终端输入命令 lxrunoffline 验证是否安装成功。
如果是从微软官方下载的 WSL 离线包,解压后找到 install.tar.gz 就是后续使用的安装文件。
Windows 文件系统默认不区分大小写,而Linux是区分的。这就导致在安装、运行部分软件时会报错,我们新建一个用于存放 WSL 的安装目录,打开终端并切换到相应目录,运行以下命令开启当前目录大小写敏感:
# .\ 表示当前目录,此处参数可自定义
fsutil.exe file setCaseSensitiveInfo .\ enable
# 查看某个目录是否大小写敏感
fsutil.exe file queryCaseSensitiveInfo
# 禁用大小写敏感
fsutil.exe file setCaseSensitiveInfo disable
输入以下命令进行安装:
# -s 参数表示在桌面创建WSL快捷图标
lxrunoffline i -s -n -d <安装路径> -f <安装包路径>.tar.gz
例如:
LxRunOffline i -n centos -d D:\linux\centos7 -f D:\downloads\centos-7-x86_64-docker.tar.xz
本文所有示例将以 Ubuntu2204 发行版为例,WSL 基本使用命令可参考 Microsoft 官方文档:
WSL 的基本命令 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/windows/wsl/basic-commands
运行默认 Linux 发行版
# 方式1
wsl
# 方式2
bash
运行指定 Linux 发行版
# wsl命令
wsl -d
# lxrunoffline 命令
lxrunoffline r -n
使用 LxRunOffline 安装的 WSL 默认是以 root 用户登录,如果你需要默认以普通用户登录则需要进行以下操作。首先运行 WSL 并输入以下命令创建用户:
useradd -m -s /bin/bash <用户名>
然后对该用户设置密码,输入命令后会提示输入两次密码
passwd <用户名>
授予该用户 sudo 权限
usermod -aG sudo <用户名>
查看用户 UID ,一般是 1000
id -u <用户名>
按 Ctrl+D 退出 WSL ,在 PowerShell 中输入以下命令设置默认用户:
lxrunoffline su -n -v 1000(UID)
修改 WSL 名称或目录后就无法通过 官方命令设置默认用户,同样可以通过以上方式进行设置。
# 命令1
wsl --set-default
# 命令2
lxrunoffline sd -n
# 查看WSL名称
wsl -l
# 查看WSL安装目录
lxrunoffline di -n
# 导出指定WSL配置文件到目标路径
lxrunoffline ec -n -f <配置文件路径>.xml
# 取消注册
lxrunoffline ur -n
# 使用新名称注册
lxrunoffline rg -n -d -c <配置文件路径>.xml
查看所有已安装的 Linux 发行版列表,其中包括状态(正在运行或已停止)和运行发行版的 WSL 版本(WSL1 或 WSL2)。
wsl -l -v
wsl --set-default-version
若要指定运行 Linux 发行版的 WSL 版本(1 或 2),请将
lxrunoffline s -n -f <快捷方式路径>.lnk
1. 关闭当前正在运行的发行版:在终端中使用快捷键 CTRL+ D
注意:该方式并不会立即终止 WSL 的运行,会有十几秒的延迟。
2. 终止指定的发行版或阻止其运行
wsl -t
3. 立即终止所有正在运行的发行版和 WSL2 轻量级实用工具虚拟机
wsl --shutdown
在需要重启 WSL 2 虚拟机环境的情形下,例如 更改内存使用限制 或更改 .wslconfig 文件,可能必须使用此命令。
WSL 的优势之一是可以通过 Windows 和 Linux 应用或工具访问文件。WSL 将计算机的固定驱动器装载到 Linux 分发版中的 /mnt/
例如,使用装载的驱动器,可以使用 Visual Studio 或 VS Code 编辑 C:\dev\myproj\ 中的代码,并通过 /mnt/c/dev/myproj 访问相同的文件,在 Linux 中测试该代码。
使用 WSL 的主要限制之一是不支持使用 Windows 应用或工具直接访问/更改 Linux 发行版文件系统中的文件。Windows 和 Linux 中文件元数据的表示方式是不同的。因此,通过 Windows 应用、工具、脚本、终端来访问、创建、修改 Windows 目录中的 Linux 子系统的文件时,会造成数据污染或损坏 Linux 环境,导致需要卸载和重新安装 Linux 子系统。
正确方法:将工作文件存放在 Windows 文件系统中,这样不仅可以在 Windows 中直接访问,还能在 Linux 中通过 /mnt/
使用 Linux 子系统时,为了提高软件的安装速度,需要将软件源换成国内的镜像源。
1. 备份原来的数据源配置文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak
2. 修改数据源配置文件:直接使用国内源覆盖文件内容
sudo vi /etc/apt/sources.list
这里使用 Ubuntu 22.04 的中科大源,名称为 jammy,其他版本则替换为对应的版本名称即可。
# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
其它软件源请参考: Ubuntu 22.04换国内源 清华源 阿里源 中科大源 163源_CSDN博客https://blog.csdn.net/xiangxianghehe/article/details/122856771
3. 更新升级软件 (可选)
sudo apt-get update
sudo apt-get upgrade
目前 WSL 不支持 systemd(Linux 服务管理系统),可以安装 ubuntu-wsl2-systemd-script 脚本来使用相关命令。注:安装该脚本需要将 WSL 版本切换为 WSL2 ,否则使用时可能会报错。
# 安装git
sudo apt install git
# 运行脚本和命令
git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git
cd ubuntu-wsl2-systemd-script/
bash ubuntu-wsl2-systemd-script.sh
# 重新启动 WSL 并尝试运行 systemctl
systemctl
sudo apt-get install xfce4 xfce4-goodies
注:display manager 选择 gdm3 或 lightdm 均可。
sudo apt-get install xrdp
# 复制一份备用
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
# 配置端口 3389 改为 3390,避免和windows的端口冲突
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
# max_bpp=32 修改为 128(最大位图深度)
sudo sed -i 's/max_bpp=32/#max_bbp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
# #xserverbpp=24 修改为 128,取消注释 #
sudo sed -i 's/xservervpp=24/#xservervpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
# 告诉系统: 开启桌面环境的时候用xfce4-session
sudo echo xfce4-session > ~/.xsession
sudo vim /etc/xrdp/sesman.ini
将 KillDisconnected 的值修改为 true 保存退出。
sudo vim /etc/xrdp/startwm.sh
注释掉末尾亮行,并添加一行 startxfce4 如图所示:
sudo /etc/init.d/xrdp start
WSL 的图形桌面需借助 Windows 远程桌面进行显示,但必须先开启 xrdp 服务才能使用远程桌面连接。这样每次使用 WSL 桌面都需要手动开启 xrdp,可将 xrdp 服务设置为开机自启。
WSL(ubuntu2204)xfce4语言支持报错及配置WSL服务自启_itboone的博客https://blog.csdn.net/w47_csdn/article/details/129101896?spm=1001.2014.3001.5501
按下 Windows+R 键,输入 mstsc 打开远程桌面连接。
IP为本机即 localhost,端口为配置的3390,IP 也可以使用 ifconfig 命令查到的 eth0 inet 地址。
连接后进入登录页面,用户名和密码填写 WSL 的用户名和密码。注:不要使用 root 用户登录。
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. 将密钥添加到密钥环以便包管理器可以验证包的完整性
sudo apt-key add linux_signing_key.pub
5. 更新包列表并安装稳定版 Chrome
sudo apt update
sudo apt install google-chrome-stable
6. 从命令行启动 Chrome 浏览器
google-chrome-stable
WSL(ubuntu2204)xfce4安装中文环境和fcitx5框架及中文输入法_itboone的博客https://blog.csdn.net/w47_csdn/article/details/129107128?spm=1001.2014.3001.5501
一劳永逸,wsl2出现“参考的对象类型不支持尝试的操作”的解决办法_桑榆肖物的博客https://blog.csdn.net/marin1993/article/details/119841299
适用于 Linux 的 Windows 子系统文档 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/windows/wsl/
LxRunOffline使用手册 | 0opsdc (oopsdc.com)https://oopsdc.com/post/lxrunoffline/
使用 LxRunOffline 实现 WSL 自定义安装_farer_yyh的博客https://blog.csdn.net/farer_yyh/article/details/113785474
WSL GUI图形界面(xfce4)的安装 - 简书 (jianshu.com)https://www.jianshu.com/p/af94731626e3
WSL(Ubuntu20.04)与其图形界面安装配置_sandonz的博客https://blog.csdn.net/sandonz/article/details/120854876
Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )https://blog.csdn.net/FSKEps/article/details/118493578