WSL2+Ubuntu+图形化界面安装 - 猫猫得天空♂

/ 0评 / 0

WSL2+Ubuntu+图形化界面安装

WSL(Windows Subsystem for Linux)是一个为Windows用户设计的兼容层,它允许用户在Windows 10和Windows 11操作系统上直接运行GNU/Linux环境。WSL提供了一个微软开发的Linux兼容内核接口,使得用户可以在不启动虚拟机或使用双重启动设置的情况下,在Windows上运行大多数命令行工具、实用程序、应用程序以及服务。

在Windows 11上使用WSL2(Windows Subsystem for Linux)安装Ubuntu 22.04并配置图形界面,可以按照以下步骤进行:

1. 启用WSL2

在开始之前,请确保您的Windows版本支持WSL2,并已启用了WSL功能。

打开 PowerShell(管理员)并运行以下命令来启用WSL 功能:

wsl --install

将WSL2设置为默认版本

wsl --set-default-version 2

 

2.安装Ubuntu 22.04

查看可安装版本的linux

wsl --list --online

 

选择需要安装的版本

wsl --install -d <DistroName>

 

3. 安装 Ubuntu 桌面版

正式安装之前先输入以下命令,否则有概率安装失败。

apt purge -y acpid acpi-support modemmanager

apt-mark hold acpid acpi-support modemmanager

 

若没有以上命令,可能会在安装80%左右遇到这样的情况:

Setting up xxx(x.xx) ...

Failed to restart acpid.service: Transport endpoint is not connected

See system logs and 'systemctl status acpid.service' for details.

Failed to get properties: Transport endpoint is not connected

 

安装 Ubuntu 桌面版:

sudo apt install ubuntu-desktop

 

4.配置显示管理器

 

启动 VcXsrv

在 Windows 上下载 VcXsrv 并安装。

运行,第一步的设置窗口状态怎么选关系不大,我一般是用 One large window ,默认的 Multiple windows 在多屏情况下显示会有一些问题。然后 Display number 可以用默认的 -1 ,或者设置成 0 (当然也可以是其他的数字,具体内容后面解释)。

1878624-20201221000311476-1310845543

下一步,选择 Start no client 。

下一步,选项全部勾上,Additional parameters 不用管。

1878624-20201221000354529-1085141750

点下一步,点完成,这时候会出现一个黑色的窗口,这样 VcXsrv 就启动好了。

1878624-20201221000436027-1449009444

WSL 启动桌面程序

首先下载 xfce4 ,sudo apt install xfce4 。

然后在 .bashrc 文件末尾中添加一句 export DISPLAY=xx.xx.xx.xx:0 ,其中的 xx.xx.xx.xx 是 VcXsrv 所在主机的 IP 地址,即在 Windows 的 cmd 或 powershell 中执行 ipconfig 里的以太网适配器的 IPv4 地址。

1878624-20201220235942084-1823985729

要在 .bashrc 中添加

export DISPLAY=$(awk '/nameserver / {print$2; exit}' /etc/resolv.conf 2>/dev/null):0

然后 source .bashrc 或者重新进入 wsl 终端。

然后执行 sudo startxfce4 ,如果正常的话,之前 VcXsrv 的黑色窗口就会显示 xfce4 的桌面了,并且 wsl 终端会输出 xfce4 的日志。

1878624-20201221000649542-1544350051

1878624-20201221000659585-1885471051

发生了什么

整个过程中比较重要的概念是 Display number 和环境变量 $DISPLAY 。在 VcXsrv 中设置的 Display number 就是 $DISPLAY 中的分号后面的那个数字。当然,如果 VcXsrv 使用默认的 Display number (-1)就是让 VcXsrv 自动设置这个数字,在当前情况下用默认设置也是可以的。

当启动好 VcXsrv 后就相当于在 Windows 上启动了一个虚拟显示器,然后 WSL 的桌面程序需要连接上这个虚拟显示器才能正常显示。Linux 就是通过 $DISPLAY 这个环境变量来寻找目标显示器。网络上有很多 wsl 连接 VcXsrv 的教程的方法是将 $DISPLAY 设置成 :0.0 ,这貌似在 WSL1 上是可行的,但是在 WSL2 上就行不通了。(但是如果用 xrdp 来使用图形界面使用这个设置就是可以的,因为 xrdp 是运行在 wsl 的 Linux 上的,而且 :0.0 的意思其实就是 localhost:0.0 。至于为什么是 0.0 ,是因为这两个数字分别代表 Display 和 Screen,即 D.S 。 0.0 的意思是 0 号 Display 的 0 号 Screen 。至于更详细的解释可以在 Linux 中执行 man X 来查看。

网络上另外还有一个方法是将 $DISPLAY 设置成 $(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0 ,这个值是 /etc/resolv.conf 中的 nameserver 的 IP 。不知道为什么这个方法在我的机子上也行不通(可能是因为别人的 wsl2 的 nameserver 的 IP 和 Windows 的 IP 是一样的?)。

而 $DISPLAY 的本质是为了告诉 Linux 的图形程序 X server 的地址和 Display number。所以将地址设置成 VcXsrv 所在主机的 IP 地址那应该是没问题的。如果执行 startxfce4 还是连接不上,并显示 xrdb: Connection timed out 那么检查下 IP 能否 ping 通,以及可能要设置下 WIndows 的防火墙规则。

其他

  • 为什么设置的最后一步要全点上勾。

最后一个勾是 Disable access control ,这是允许所有客户程序都能连接这个 VcXsrv。有的教程说要在最后一步的 Additional parameters fo VcXsrv 中加上 -ac 这个参数,但其实这个参数应该和勾上 Disable access control 的作用是一样的。因为 -ac 的解释就是 disable access control restrictions 。

  • 如果不把 export 写在 .bashrc 中会怎么样

如果只在终端里设置 $DISPLAY 的值其实也能运行,但是这样在图形界面中运行一些图形程序的时候可能就会出问题了。因为只在终端执行 export ... 那么环境变量只会在这个终端有用,如果退出终端或者打开新的终端 $DISPLAY 的值就没了,所以要放在 .bashrc 中。当然用其他永久设置环境的方法也是可以的。

原文链接

首页

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注