Steins;Lab

某团的自留研究所

使用 WSL2 + X11 转发 - 在 Windows10 中打造 GNU/Linux 学习生产环境

在 Windows 10 中使用 Windows Subsystem for Linux 部署 GNU/Linux 的学习或生产环境。同时使用 X11 Forwarding 将软件GUI窗口集成至 Windows 系统中,Windows + Linux 密切集成将带来丝滑体验。

 

1 动机

Linux/GNU 生态让大部分软件开发人员从中受益。而 Windows 10 也支撑着我们常见的游戏娱乐和部分独占软件。部分软件在 Windows 和 macOS 上的体验非常不错,而在 Linux 中却表现糟糕,甚至不提供支持。

通常,我们在PC上使用双系统或虚拟机的方式部署两种操作系统环境。使用者的体验随着环境的切换非常割裂。使用过虚拟机的同学可能发现,因性能限制,虚拟机中的GUI环境常常有一种说不清道不明的卡顿,运行复杂图形程序尤甚。无论是软件应用还是文件管理,非原生的环境需要相互切换,导致体验割裂。

我想打造一种无缝的 Windows + Linux 环境,尤其是 Linux 软件 GUI 能够无缝集成至 Windows 的窗口界面中,同时提供方便的文件管理。实际体验发现 WSL2 + X11 转发能够满足我的要求,也推荐给大家尝试。

值得指出的是,使用 X11 转发在 Windows 中显示 Linux 软件 GUI,并不是 WSL 独占的。你也可以使用虚拟机,通过 SSH 使用 X11 转发,达到相同的效果。

 

 

2 WSL2

WSL 全称为 Windows Subsystem for Linux,为 Windows 提供接近于原生的 GNU/Linux 运行能力。如果你经常使用以下内容[1],你可能会对 WSL 感兴趣。

  • 从Microsoft Store中选择您喜欢的GNU / Linux发行版。
  • 运行常用的命令行工具,如grepsedawk,或其他ELF-64的二进制文件。
  • 运行Bash Shell脚本和GNU / Linux命令行应用程序,包括:
    • 工具:vim,emacs,tmux
    • 语言:NodeJS,Javascript,Python,Ruby,C / C ++,C#和F#,Rust,Go等。
    • 服务:SSHD,MySQL,Apache,lighttpd,MongoDBPostgreSQL
  • 使用您自己的GNU / Linux分发程序包管理器安装其他软件。
  • 使用类似Unix的命令行外壳调用Windows应用程序。
  • 在Windows上调用GNU / Linux应用程序

WSL2 是 WSL 的新版本,区别于WSL,其提供真实的 linux 内核,使用轻量级的虚拟化运行。

关于 WSL 的完整文档参见 https://docs.microsoft.com/en-us/windows/wsl/

 

2.1 安装 WSL1 并升级到 WSL2

为了方便,在此复述 WSL 的安装方法。如有出入,读者应当以微软的官方文档为准。

https://docs.microsoft.com/en-us/windows/wsl/

预览版本提供了快速安装。对于正式版本,手动安装步骤如下。

注意最低版本要求:对于x64系统,版本1903或更高版本,以及内部版本18362或更高版本。

 

1. 先启用 Windows Subsystem for Linux 子功能

使用管理员身份打开 Powershell

 

2.开启虚拟机功能

重新启动计算机。

 

3.安装 wsl2 功能包组件

直链

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

如果此直链失效,可参考

https://docs.microsoft.com/en-us/windows/wsl/install-win10

 

4. 设置 WSL 版本为 WSL2

 

5. 在 windows 商店中选择合适的发行版本

https://aka.ms/wslstore

 

Tips:

使用 Clash 等代理软件可能导致 windows 商店无法连接,可尝试关闭全局代理使用。

 

2.2 运行 Linux 发行版

直接在开始菜单中运行安装的 Linux 发行版。

作为延伸,可以继续使用 Windows Terminal 替换终端,获得更好的体验。

 

2.3 (可选) 部署完整桌面环境

我以 Ubuntu 18 为例,部署了完整的 desktop 环境。

毕竟是要使用 Linux 中的 GUI 程序。部署完整桌面环境的目的是为了:使用完整的GTK支持、Ubuntu 图标和皮肤等。例如下面开启的 HiDPI缩放设置需要 GDK 的支持。

如果你不是磁盘空间敏感用户,推荐部署完整的 desktop 环境。

 

 


 

3 X11 Forwarding

安装完成的 WSL2 发行版系统,除非进行扩展,可以看做一个新的服务器版本,没有GUI显示。

 

3.1 X11 Forwaring 原理简述

UNIX/Linux的图形界面建立在 X Window 系统上。得益于其主从架构(Client/Server Architecture),图形界面可以网络的形式分为 X 服务器、X 客户端,通过 X 协议链接。

X Window 具有网络透明性,服务器和客户端可分别在本地或远程机器上运行。虽然本篇文章没有使用 SSH 作为通道,但是下图很好地展示了 X Window 的网络透明性。

简单理解,就是让 Linux 的图形界面转发到 Windows 10 中显示。

图:以 SSH 为通道 X11 Forwarding 原理[2]

 

3.2 Linux – 设置 DISPLAY

我们在 Linux 端加入环境变量。你可以在 bash 中直接运行,或者加入 ~/.bashrc 中每次开启终端自动添加。

使用你喜欢的编辑工具打开 ~/.bashrc。在末尾添加

从而将 DISPLAY 转发到 Windows 主机[3]。

 

3.3 Linux – 设置 GTK 高分辨率缩放

我是用的是 4K 分辨率屏幕,为了让缩放正常,使用 GTK HiDPI 设置缩放。

使用你喜欢的编辑工具打开 ~/.bashrc。在末尾添加

 

3.4 Windows 10 – 安装 X Server 软件

我是用的 Xming,直接下载安装即可。

https://sourceforge.net/projects/xming/

注意,使用 X Launch 进行设置。 考虑到尽在本地使用 X Server,关闭 Access Control 选项。开启 X Server。

 

3.4 牛刀小试 – 尝试运行 GUI 软件

我尝试运行了 gnome-mahjongg ,可以看到 Linux 中运行的 GUI 能无缝地和 Windows 窗口融合,复杂图形也较为流畅。

 

4 实践

4.1 文件管理

文件管理是重要操作之一。对于 Windows 和 WSL 之间的跨系统操作,可用映射网络文件的方式。在资源管理器中输入 wsl$即可进入映射目录。

在 WSL 内部的文件操作,推荐使用系统内管理器。如我使用 Ubuntu Desktop 提供的 nautilus。

4.2 Jetbrains 全家桶 + Docker Desktop

常规的生产开发环境,不再赘述

 

 

参考资料

[1] WSL官方文档 – https://docs.microsoft.com/en-us/windows/wsl/

[2] 傲笑紅塵路: 簡介X Window 系統 – https://www.lijyyh.com/2015/12/x-window-introduction-to-x-window-system_17.html

[3] https://stackoverflow.com/questions/61110603/how-to-set-up-working-x11-forwarding-on-wsl2

[4] https://superuser.com/questions/1370361/blurry-fonts-on-using-windows-default-scaling-with-wsl-gui-applications-hidpi

 

0 0 votes
文章评分
Subscribe
提醒
guest
1 评论
最新
最旧 得票最多
Inline Feedbacks
View all comments
不是yuge
不是yuge
5 月 之前

这确实是最丝滑的,但是我懒