如何使用 WSL 在 Windows 10 中启动 Debian GUI?

2021年11月9日17:47:06 发表评论 2,100 次浏览
Microsoft Windows 是一种流行的操作系统。Windows 10 带来了一项名为 WSL(适用于 Linux 的 Windows 子系统)的新功能。这是一项可选功能,允许开发人员和高级用户直接在 Windows 上运行 GNU/Linux 环境,而无需传统的虚拟化或双引导配置。 在本指南中,查看如何使用 WSL 在 Windows 10 中启动 Debian GUI。

WSL 上的 Debian

WSL 工具最初是由微软与 Ubuntu 的创建者 Canonical 合作开发的。它基本上是一个基于 Ubuntu 的内核兼容层。 2020 年,微软发布了 WSL 2。它比 WSL 1 带来了几项重要的改进。它提供了更好的系统兼容性、更好的 VM 管理、完整的 Linux 内核支持等等。查看WSL 1 和 WSL 2 之间的区别。请注意,WSL 2 仅适用于 Windows 10 version 2004 build 19041 或更高版本。运行以下命令以验证你正在运行的 Windows 10 版本。
$ winver
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
因为 WSL 最初是基于 Ubuntu 的,所以默认支持 Debian。Debian for WSL可从 Microsoft Store 获得。但是,我们将演示如何在没有 Microsoft 帐户的情况下安装 Debian。 对于 Windows,所有命令都将在具有管理权限的 Windows PowerShell 上运行。它相当于运行sudo shell的 Linux 。要以管理权限启动 PowerShell,请按“Win + X”并选择“Windows PowerShell (Admin)”。
如何使用 WSL 在 Windows 10 中启动 Debian GUI?

启用 WSL

默认情况下不启用 WSL 等可选功能。幸运的是,启用 WSL 非常简单。在 PowerShell 中运行以下命令。
$ dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
WSL 2 还需要虚拟机平台功能。
$ dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
这些更改需要重新启动系统才能完全正常运行。 重新启动后,以管理员权限启动 PowerShell。将 WSL 2 强制为默认版本。
$ wsl --set-default-version 2
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
请注意,如果你运行的是 Windows 10 64 位版本,那么你可能需要下载并安装 WSL 2 的 Linux 内核更新包

下载和安装 Debian

首先,查看 WSL 支持的所有可用发行版。
$ wsl --list --online
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
告诉 WSL 安装 Debian。Debian 可作为可从Microsoft Store安装的软件包获得。
$ wsl --install -d Debian
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
该过程可能需要几分钟才能完成。

配置 Debian

现在安装了 Debian。如果你使用 WSL 安装,则会自动弹出一个新的 shell。在第一次启动时,Debian shell 会要求创建一个新用户。
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
如果你想稍后访问 Debian,请使用以下 WSL 命令。从现在开始,我将使用Windows 终端以方便使用。
$ wsl -d Debian
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
更新 APT 缓存并升级所有包。
$ sudo apt update && sudo apt upgrade -y
接下来,我们需要验证我们是否正在运行最新的 Debian 版本。在撰写本指南时,最新的稳定版本是 Debian 11,代号为Bullseye
$ cat /etc/os-release
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
就我而言,它是 Debian 9 (stretch),而它应该是 Debian 11 (bullseye)。它需要发行版升级才能获得最新的 Debian 版本。 首先,制作sources.list文件的备份副本。
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
sources.list文件中,将stretch (Debian 9) 的所有实例替换为bullseye (Debian 11)。这将有效地告诉 APT 使用 Debian 11 的软件包在文本编辑器中打开sources.list并将所有的 stretch 实例替换为Bullseye
$ sudo nano /etc/apt/sources.list
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
这是 Debian 11 Bullseye 的存储库示例列表。
$ deb http://deb.debian.org/debian bullseye main contrib non-free
$ deb http://deb.debian.org/debian bullseye-updates main contrib non-free
$ deb http://security.debian.org/debian-security bullseye-security main contrib non-free
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
对 sed 感兴趣?查看这个关于 50 个 sed 示例的超级指南。 现在,再次运行 APT 更新命令。
$ sudo apt clean && sudo apt update
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
$ sudo apt full-upgrade
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
它将在此过程中重新启动各种服务。选择“Yes”。
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
我们现在可以安全地摆脱系统上过时的软件包。
$ sudo apt autoremove
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
重新启动 Debian 会话以使更改生效。验证更改。
$ cat /etc/os-release
如何使用 WSL 在 Windows 10 中启动 Debian GUI?

配置图形用户界面

此时 Debian 系统功能齐全。但是,与系统交互的唯一方法是通过命令行界面。默认情况下没有 GUI 可供使用。 我们可以通过实施 VNC 来规避这一点。配置过程有点复杂,但非常可行。

先决条件

这种方法有几个先决条件。首先,确保 WSL 发行版配置为与 WSL 2 一起运行。
$ wsl --set-version Debian 2
如何使用 WSL 在 Windows 10 中启动 Debian GUI?

安装组件

现在,访问 Debian shell。我们需要一些额外的组件,比如curlwget
$ sudo apt update && sudo apt install -y curl wget
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
我们将安装 tasksel,这是一个用于管理各种桌面和服务组件的超级方便的工具。运行以下 APT 命令。
$ sudo apt install tasksel
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
使用sudo权限运行tasksel
$ sudo tasksel
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
它将显示包组和捆绑包的列表。按空格键选择/取消选择一个组。选择所需的后,选择“确定”。 该工具将下载并安装所有必要的组件。这将需要一些时间。
如何使用 WSL 在 Windows 10 中启动 Debian GUI?

安装 VNC 服务器

下一步是安装 VNC 服务器。为此,我们将安装TigerVNC
$ sudo apt-get install tigervnc-standalone-server
如何使用 WSL 在 Windows 10 中启动 Debian GUI?

安装 .NET 运行时

.NET 是 Microsoft 为 Windows、Linux 和 macOS 构建应用程序的通用框架。我们在配置的下一部分需要它。 运行以下命令以安装 .NET 运行时。如需更深入的安装说明,请查看Microsoft官方 .NET 安装指南
$ wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
$ sudo apt install ./packages-microsoft-prod.deb
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
$ rm packages-microsoft-prod.deb
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
$ sudo apt update && sudo apt install apt-transport-https
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
$ sudo apt update && sudo apt install dotnet-runtime-5.0
如何使用 WSL 在 Windows 10 中启动 Debian GUI?

安装systemd-genie

WSL 本身只是一个准系统的 Linux 框架实现。使用 systemd-genie 是为 Debian 提供一个成熟且功能齐全的 Linux 框架的方法。查看更多关于 systemd-genie。 我们已经安装了它的依赖项(.NET 运行时)。剩下的就是配置 systemd-genie 存储库并安装软件包。查看有关在 Debian 上安装 systemd-genie 的深入文档。 首先,为systemd-genie配置 APT 存储库。
$ wget -O /etc/apt/trusted.gpg.d/wsl-transdebian.gpg https://arkane-systems.github.io/wsl-transdebian/apt/wsl-transdebian.gpg
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
$ chmod a+r /etc/apt/trusted.gpg.d/wsl-transdebian.gpg
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
$ cat << EOF > /etc/apt/sources.list.d/wsl-transdebian.list
$ deb https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main
$ deb-src https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main
$ EOF
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
$ apt update
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
最后,安装 systemd-genie。
$ sudo apt install systemd-genie
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
所有必要的工具都已安装。是时候配置它们以获得预期的行为了。

配置 VNC 服务器密码

在 VNC 设置中,每个用户都将拥有唯一的密码。对于完整的功能,我们至少需要三个密码,以下每个用户一个。
  • root
  • gdm
  • <current_user>
首先,为当前用户配置VNC密码。
$ vncpasswd
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
接下来,为root配置 VNC 密码。
$ sudo -H vncpasswd
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
最后,为 GDM 配置 VNC 密码。请注意,如果你没有选择安装 GNOME 桌面环境,则可以跳过此步骤。
$ sudo -H -u Debian-gdm vncpasswd
如何使用 WSL 在 Windows 10 中启动 Debian GUI?

用 Xvnc 替换默认的 X

显示管理器的默认功能是为每个用户会话(包括登录屏幕)调用 X 个实例。但是,因为我们将使用 VNC 服务器,所以它不会被削减。要使用 VNC,Xvnc 是合适的候选者。 接下来,我们的目标是将 X 交换为 Xvnc。它需要调整调用 Xvnc 而不是 X/Xorg 显示服务的 Xorg 脚本。 在继续之前,始终建议备份现有的 Xorg 脚本。
$ sudo mv /usr/bin/Xorg /usr/bin/Xorg.old
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
现在,创建一个新的 Xorg 脚本。
$ sudo nano /usr/bin/Xorg.new
输入以下代码。
#!/bin/bash
for arg do
  shift
  case $arg in
    vt*)
      set -- "$@" "${arg//vt/tty}"
      ;;
    -keeptty)
      ;;
    -novtswitch)
      ;;
    *)
      set -- "$@" "$arg"
      ;;
  esac
done
# display geometry
command=("/usr/bin/Xvnc" "-geometry" "1366x768" "-PasswordFile" "${HOME:-/root}/.vnc/passwd" "$@")
systemd-cat -t /usr/bin/Xorg echo "launching Xvnc:" "${command[@]}"
exec "${command[@]}"
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
保存文件并关闭编辑器。该文件必须具有正确的文件权限才能正常工作。
$ sudo chmod 0755 /usr/bin/Xorg.new
创建指向该文件的链接以模拟原始 Xorg 脚本。
$ sudo ln -sf /usr/bin/Xorg.new /usr/bin/Xorg
如何使用 WSL 在 Windows 10 中启动 Debian GUI?

配置环境变量

我们需要调整一些环境变量,以便Xorg读取执行精灵命令的用户。为此,我们需要调整根用户和当前用户的bashrc文件。请注意,bashrc 与 bash_profile 不同。 打开当前用户的bashrc
$ nano ~/.bashrc
在文件末尾添加以下代码。
export XDG_RUNTIME_DIR=/run/user/$UID
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0
sudo /etc/init.d/dbus start &> /dev/null
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
对 root 用户的bashrc文件执行相同操作。
$ su -
$ nano ~/.bashrc
export XDG_RUNTIME_DIR=/run/user/$UID
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0
sudo /etc/init.d/dbus start &> /dev/null
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
最后,为当前用户重新加载 bashrc。
$ source ~/.bashrc
如何使用 WSL 在 Windows 10 中启动 Debian GUI?

启动systemd-genie

现在,systemd 被配置为让gdm自动启动并创建一个 X 显示到登录实例的实例。由于配置的原因,它将改为创建 Xvnc 实例。它将从 5900 开始收听。 下一个命令将显示消息“connecting to systemd”,然后是一些错误。错误是预料之中的。你应该登陆登录屏幕。
$ genie -l
瞧!你现在已经成功登录到在 WSL 2 下运行的支持 GUI 的 Debian!剩下的就是通过 VNC 连接到 WSL 服务器。以下命令将报告服务器 IP 地址。
$ hostname -I
如何使用 WSL 在 Windows 10 中启动 Debian GUI?
要连接到系统,请使用 VNC 客户端(在端口 5900 上)。要登录,请使用gdm VNC 密码。这应该让你进入登录屏幕。

最后的想法

对于 Windows 用户,WSL 是一种很好的方式来习惯 Linux 世界,而无需从头开始学习所有内容。本指南演示了在 VNC 服务器 (TigerVNC) 的帮助下,在 WSL 上使用 GUI 安装和配置 Debian 11 的推荐方法。 通过合适的 VNC 配置,你可以实现更多目标。查看有关在 Debian上安装和配置 VNC 服务器的深入指南。
木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: