index-wslg

上一级页面:index-wsl

前言

wslg就是个大坑!!

官方文档见使用 WSL |运行 Linux GUI 应用程序微软文档 (microsoft.com)

wsl端安装所需依赖

安装x11-xserver-utils,它包含xhost+、xrdb等常用命令。

并且可以通过x11-xserver-utils拉取大部分图形界面所需的依赖

1
sudo apt install x11-xserver-utils

screen能够新建一个screen。使用方法:直接在终端输入screen并回车

1
sudo apt install screen

wsl端配置环境变量

wsl2-wslg-配置环境变量

使用xclock测试是否能够正常使用

可以安装一个简单的X程序来初始化,并验证X11环境是否已经配置成功:如xclock,

1
sudo apt install x11-apps  #包含xclock

安装之后,在确认DISPLAY变量已经设置

临时指定变量LC_ALL并运行xclock

1
LC_ALL=C xclock

若弹出一个时钟窗口,则配置成功。

xclock

解决报错

1
Warning: Missing charsets in String to FontSet conversion

根源

  • 不正确的区域设置环境变量。

诊断步骤

  • 检查错误日志
  • 使用以下命令检查用户的设置:locale

解决方案:

临时指定变量LC_ALL并运行xclock

1
LC_ALL=C xclock

使用方式

以后重启电脑后,只需要重新启动系统,然后在WSL中输入命令启动GUI程序即可使用。

配置快捷方式

windows界面快速启动ide

如何禁用wslg

如果想禁用wslg,编辑 ~/.wslconfig,文件路径为 C:\Users\<UserName>\.wslconfig.

1
2
3
# Settings apply across all Linux distros running on WSL 2
[wsl2]
guiApplications=false

之后重启系统

虚拟包

许多Linux的图形应用程序都包含对它们所需的GUI实现包的依赖性,但WSLG已经提供了完美的支持,

WSLG已经提供了完美的GUI依赖支持,例如WSLG已经提供了完美的pulseaudio``和xwayland等依赖支持,故如果使用WSLG,那么在wsl中不应当再安装Wayland,通过WSLG就可以获取开箱即用的体验

如果你使用WSLG。因为WSLg已经为您提供了一个完美工作的副本,这些GUI的依赖包不应当安装在wsl中,反而应当以虚拟包的方式提供。

wslg-在不安装包本身的情况下提供依赖项-传递声音-pulseaudio-虚假依赖包

配置OpenGL以及D3D12加速

先决条件

按照官方文档的说法:WSL 上的 CUDA :: CUDA Toolkit Documentation (nvidia.com)

最新的NVIDIA Windows GPU驱动程序将完全支持WSL 2。借助驱动程序中的 CUDA 支持,现有应用程序(在 Linux 系统上为同一目标 GPU 编译的其他位置)可以在 WSL 环境中未经修改地运行。

也就是说,如果你只是正常的运行图形程序,那么只要安装GPU驱动即可,见wsl2安装配置gpu驱动

但如果你需要使用cuda为python等提供cuda加速(只有部分开发人员需要),要编译新的 CUDA 应用程序,需要一个适用于 Linux x86 的 CUDA 工具包。对 WSL 的 CUDA Toolkit 支持仍处于预览阶段,因为调试器和探查器等开发人员工具尚不可用。但是,WSL2环境中完全支持CUDA应用程序开发,因此,用户应该能够使用适用于x86 Linux的最新CUDA Toolkit编译新的CUDA Linux应用程序。即需要安装额外的cuda工具包,详见wsl2-cuda安装

实际上,最重要的就是分清楚上面所说的cuda驱动,GPU驱动,cuda工具包等等概念。

如果计算机上已安装 WSL,则可以通过从提升的命令提示符运行 update 命令来更新到包含 Linux GUI 支持的最新版本。

  1. 选择“开始”,键入 PowerShell,右键单击“Windows PowerShell”,然后选择“以管理员身份运行”。

  2. 输入 WSL 更新命令:

    PowerShell复制

    1
    wsl --update
  3. 您需要重新启动 WSL 才能使更新生效。可以通过在 PowerShell 中运行关机命令来重新启动 WSL。

    PowerShell复制

    1
    wsl --shutdown

注意

Linux GUI 应用仅受 WSL 2 支持,不适用于为 WSL 1 配置的 Linux 发行版。了解如何将分发从 WSL 1 更改为 WSL 2

现在WSLG已经可用了,直接在WSL2端安装GUI程序即可

OpenGL以及D3D12加速

WSLG默认采用的D3D12加速(GPU硬件加速的一种)

ubuntu安装opengl

注意:

D3D12加速不支持测试版mesa,见测试版mesa不支持D3D12

D3D12加速的主要贡献则来自WSLG项目,它被包括在了上游的GPU驱动中,

如果你想在WSL中使用D3D12硬件加速,那么请放弃测试版mesa。

如果你必须使用测试版mesa,那么测试版mesa会自动采用LLVMPIPE(软件渲染)

wslg与genie的集成

genie(1.39+) 还安装了一对 systemd 单元wslg-xwayland.service 和 wslg-xwayland.socket 以及对user-runtime-dir@.service 进行了覆盖,以确保 WSLg 从瓶子内部正确运行。

如果需要使用,可以独立于genie本身启用这些功能。

1
2
sudo systemctl enable wslg-xwayland.service wslg-xwayland.socket user-runtime-dir@.service
sudo systemctl start wslg-xwayland.service wslg-xwayland.socket user-runtime-dir@.service

参考、引用、致谢

深度学习环境配置 Windows+WSL2 - 知乎 (zhihu.com)