在 Windows 10 中使用 Windows Subsystem for Linux 部署 GNU/Linux 的学习或生产环境。同时使用 X11 Forwarding 将软件GUI窗口集成至 Windows 系统中,Windows + Linux 密切集成将带来丝滑体验。
Table of Contents
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发行版。
- 运行常用的命令行工具,如
grep
,sed
,awk
,或其他ELF-64的二进制文件。 - 运行Bash Shell脚本和GNU / Linux命令行应用程序,包括:
- 工具:vim,emacs,tmux
- 语言:NodeJS,Javascript,Python,Ruby,C / C ++,C#和F#,Rust,Go等。
- 服务:SSHD,MySQL,Apache,lighttpd,MongoDB,PostgreSQL。
- 使用您自己的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
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
2.开启虚拟机功能
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重新启动计算机。
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
wsl --set-default-version 2
5. 在 windows 商店中选择合适的发行版本
Tips:
使用 Clash 等代理软件可能导致 windows 商店无法连接,可尝试关闭全局代理使用。
2.2 运行 Linux 发行版
直接在开始菜单中运行安装的 Linux 发行版。
作为延伸,可以继续使用 Windows Terminal 替换终端,获得更好的体验。
2.3 (可选) 部署完整桌面环境
我以 Ubuntu 18 为例,部署了完整的 desktop 环境。
毕竟是要使用 Linux 中的 GUI 程序。部署完整桌面环境的目的是为了:使用完整的GTK支持、Ubuntu 图标和皮肤等。例如下面开启的 HiDPI缩放设置需要 GDK 的支持。
如果你不是磁盘空间敏感用户,推荐部署完整的 desktop 环境。
sudo apt update sudo apt install ubuntu-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
。在末尾添加
export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0 export LIBGL_ALWAYS_INDIRECT=1
从而将 DISPLAY 转发到 Windows 主机[3]。
3.3 Linux - 设置 GTK 高分辨率缩放
我是用的是 4K 分辨率屏幕,为了让缩放正常,使用 GTK HiDPI 设置缩放。
使用你喜欢的编辑工具打开 ~/.bashrc
。在末尾添加
export GDK_SCALE=2 export GDK_DPI_SCALE=1
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/
[3] https://stackoverflow.com/questions/61110603/how-to-set-up-working-x11-forwarding-on-wsl2
clash可以代理window上的应用商店, 软件主页面配置选项'UWP Loopback'打开后,选择相应的app就行.
@aaaa 谢谢反馈~学习了
这确实是最丝滑的,但是我懒