👝前言
WSL(Windows Subsystem for Linux)是一个为Windows用户设计的兼容层,它允许用户在Windows 10和Windows 11操作系统上直接运行GNU/Linux环境。WSL提供了一个微软开发的Linux兼容内核接口,使得用户可以在不启动虚拟机或使用双重启动设置的情况下,在Windows上运行大多数命令行工具、实用程序、应用程序以及服务。
本教程将实现在windows11环境下,使用wsl2实现linux的图形化界面,用到的工具包括xfce4图形化程序
、ubuntu24.04发行版
、VcXsrv服务器
。
wsl仅是基于Windows内核的对于Linux核心轻量虚拟,相比较于vmware需要整个系统镜像文件来说,开发调试、图形化界面(GUI)等功能相对受限,在某些场景下差强人意。但是相对的,通过这种形式虚拟出来的Linux系统也同样有性能高,资源占用少的优点,作为LInux轻量化入门学习使用再合适不过,搭配上GUI可谓也是一种高性价比选择。
💻安装教程
1.在windows中打开控制控制找到程序和功能,点击左上角的启用或者关闭Windows功能
2.开启win虚拟机相关的服务,确保对于wsl的程序驱动支持
3.以管理员身份打开powershell,依次执行以下命令安装wsl2
wsl --install # 为windows安装wsl wsl --set-default-version 2 # 设置wsl版本为2
4.安装Linux发行版,我这里选择发行版的是Ubuntu,对应的社区支持的比较好定位问题。当然你这一步也可以选择去MicroSoft Store下载安装,都是一样的效果,我这里就直接使用命令行了
wsl --list --online # 查看可安装版本的linux发行版 wsl --install -d # 选择需要安装的版本
5.因为服务器不在国内,这里可能会遇到网络问题,建议换用国内镜像源,修改/etc/apt/sources.list
为国内镜像地址即可(可选)
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 先备份是个好习惯 sudo cp -r /etc/apt/sources.list.d /etc/apt/sources.list.d.bak # 换apt源为阿里云镜像地址 sudo tee /etc/apt/sources.list << EOF deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse EOF
6.在cmd终端或者powershell中输入wsl
命令进入Ubuntu,第一次开机需要设置用户名和密码,并且手动初始化一下root用户的密码方便使用sudo
超级管理员命令。更新环境后,安装 Xfce4 桌面环境。
wsl # 进入虚拟机设置账户 sudo passwd # 修改root密码,建议和普通用户使用一样的密码简单方便 sudo apt update && sudo apt upgrade -y # 更新系统环境 sudo apt install xfce4 xfce4-goodies # 安装图形化桌面环境 7.windows下安装VcXsrv X Server服务器
选择一个地址安装即可
打开VcXsrv,如图所示配置后点击完成开启VcXsrv服务
8.在 Ubuntu 终端中设置 DISPLAY 环境变量,并开机,在Ubuntu终端执行以下命令
echo 'export DISPLAY=127.0.0.1:0' >> ~/.bashrc # 设置xfce4转发至x server的环境变量 source ~/.bashrc xeyes # 测试是否有图形输出 sudo startxfce4 # 开启桌面
9.到这一步就算大功告成了,以后打开只需在win中启动VcXsrv和终端中执行sudo startxfce4
,可以看到效果还是不错的
🖊️问题和部分原理
下面列出我在安装时后所遇到过的一些问题
1.代理网络不管用
如果设备具有科学上网环境,那么可以选择不更换国内源,让虚拟机使用本机代理上网也能解决网络问题,在windows的用户目录C:\Users\你的用户名
下,添加.wslconfig
文件,并且写入以下内容
[experimental] autoMemoryReclaim=gradual networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true
再在cmd终端将虚拟机重启一下即可
wsl --shutdown # 关机 wsl # 开机
2.虚拟机安装失败
错误代码
Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x800701bc Error: 0x800701bc WSL 2 ????????????? https://aka.ms/wsl2kernel Press any key to continue...
解决,在cmd终端执行一下命令
wsl --set-default-version 2 wsl --update wsl --version
一些知识补充
1.wsl2现在也支持一些应用程序直接从底层调用win的图形窗口,支持直接运行Linux GUI应用,实现图形化界面。例如下载扫雷的gnome版本,从终端启动它,可以实现windows窗口打开,看起来效果也很不错
2.在 Linux 系统中,DISPLAY
是一个环境变量,用于指定 X Window 系统(X11)的显示设备。它告诉图形程序应该将输出发送到哪个显示设备上。
DISPLAY
的值通常是一个字符串,格式为:
主机名:显示器屏幕号
-
主机名:运行 X Server 的机器的主机名或 IP 地址。如果是本地机器,可以省略。
-
显示器屏幕号:通常是一个数字,表示 X Server 的显示设备(默认是
0
)。
常见的 DISPLAY
值示例:
-
-
:0
:表示本地机器的默认显示设备。 -
localhost:0
:与:0
类似,明确指定了主机名。 -
192.168.1.100:0
:表示远程机器的显示设备。
-
3.Linux 下的图形化界面生态系统涉及多个层次,包括桌面环境、窗口管理器、显示协议和开发工具。
-
主流桌面环境
桌面环境(Desktop Environment, DE)是用户与系统交互的核心,包含窗口管理器、面板、文件管理器等组件。
桌面环境 开发语言/工具 窗口管理器 特点 GNOME GTK (C语言) Mutter 简洁现代,强调触摸友好,基于 Gnome Shell,使用 Wayland 为主协议。 KDE C++ + Qt KWin 高度可定制,功能丰富,默认支持 X11 和 Wayland,社区驱动。 XFCE C (GTK) Xfwm4 轻量级,适合低配置设备,模块化设计。 LXQt C++ (Qt) Openbox 轻量化分支,整合 LXDE 和 Razor-qt。 MATE C (GTK) Marco GNOME 2 的延续,传统桌面风格。 Cinnamon C# (Mono) Muffin 基于 GNOME 3,保留传统菜单布局,适合从 Windows 过渡的用户。 -
显示服务器协议
显示协议负责图形渲染、输入事件传递等底层通信。
协议 特点 典型实现 X11/X.Org 历史悠久的协议,支持网络透明性,但存在安全性和性能问题。 Xorg 服务器(如 Xorg、Xephyr) Wayland 现代协议,直接渲染到帧缓冲,减少延迟,增强安全性,逐步取代 X11。 Weston(参考实现)、Mutter(GNOME)、KWin(KDE) XWayland 兼容层,允许 X11 应用在 Wayland 环境下运行。 所有 Wayland 合成器均内置 -
应用程序开发框架(工具链)
用于构建 GUI 应用的工具库,通常与桌面环境和协议适配。
框架/工具 编程语言 图形库/协议支持 典型应用案例 Qt C++ 自有绘图引擎,支持 X11/Wayland KDE Plasma、VLC、Adobe Photoshop Elements GTK C GTK+,依赖 X11/Wayland GNOME、Firefox、GIMP Electron JavaScript Chromium + Node.js,基于 X11/Wayland VS Code、Slack、Discord Flutter Dart Skia 渲染,通过 GTK 或 Wayland 部分 Linux 应用(如 Google Chrome 的实验性支持) JavaFX Java 依赖本地窗口系统(如 GTK) 开源 IDE(如 IntelliJ IDEA) SDL C/C++ 低级图形库,跨平台