- 更新:2021-10-05 22:13:43
- 首发:2021-04-11 23:12:18
- 教程
- 8649
本文将介绍如何在Windows 10操作系统中借助WSL 2开发基于Electron的Ubuntu窗口应用程序,可以实现在win10中编写代码并查看linux应用的运行效果。
借助此方法,仅需一台MacOS设备和一台Win10的设备,即可通过Electron开发和测试主流操作系统(Windows、Linux、MacOS)下桌面应用程序并可以有差异化的调用操作系统的原生API。
通过MacOS系统可以编译几乎所有平台的应用程序,例如可以在MacOS中编译Win10 x64
、Linux ARM64
等平台的应用程序。但是在win10
或ubuntu
中无法编译MacOS应用程序
(可以借助虚拟机或者带有MacOS系统的Docker镜像实现MacOS平台应用程序的编译,但是可能无法正常进行签名)。关于Electron自动编译及自动更新、分发,可以参阅此视频教程。
关于WSL 2
WSL,即Linux的Windows子系统,是Windows 10的正式组件,可在Windows内部运行的完整Linux版本。
虽然WSL 1的文件系统运行缓慢,并且存在一些软件包兼容问题,但是WSL 2运行Ubuntu Linux已经相对成熟。WSL 2开箱即用,在Linux上运行的所有内容都可以在Windows上运行,只不过WSL 2当前不支持snap
程序包。
我安装的是Ubuntu 20.04,关于WSL 2的安装,请参阅《Windows Subsystem for Linux Installation Guide for Windows 10》。
为了成功运行此文说明的Electron应用程序,请确保wsl --list -v
命令显示的VERSION
为2
。
您还需要参阅上述链接安装Windows Terminal
以确保完美的WSL 2体验。
VcsXsrv安装及配置
由于WSL 2开箱即用,没有用于显示Linux应用程序的窗口管理器,因此我们必须安装一个窗口管理器并配置WSL 2才能使用在Windows中查看Linux应用的GUI运行效果。
我们需要安装VcXsrv Windows X Server
,然后就可以在Win10中显示Ubuntu应用程序的GUI界面了。
为确保VcsXsrv
正确运行,需要做两件事:
- 安装VcsXsrv并进行配置
- 配置Ubuntu中的环境变量,告诉它在哪里可以找到 X Server
VcsXsrv安装
运行下述命令安装VcsXsrv
:
choco install vcxsrv
如果正常安装了node.js
并且运行了官方的编译工具一键安装脚本,那么choco
命令是默认已经安装好的了。如果提示choco
未找到/未安装,打开node.js
安装目录,运行install_tools.bat
即可(会自动安装chocolatey
和其它必要的编译工具,如果安装失败,则是网络异常导致,请自行查阅相关资料解决)。
VcsXsrv配置
打开桌面的XLaunch
。选择 Multiple Windows
- Start no client
,下一步。
选择Clipboard
和 OpenGL
,添加-ac
作为额外的VcXsrv
运行参数。选择完成
并允许VcXsrv
访问本地网络。
WSL 2中VcXsrv的配置
添加下述环境变量设置命令到你使用的终端初始化文件中(默认bash是~/.bashrc
,zsh则是~/.zshrc
)。
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
export LIBGL_ALWAYS_INDIRECT=true
重启终端或source
相应的配置文件(例如source ~/.zshrc
)。
要测试是否一切正常,可以尝试启动一个应用程序。让我们尝试基本的x11应用程序,以确保一切正常。
sudo apt install x11-apps
xcalc
如果看到华丽的x11 calc应用,说明VcXsrv
及Ubuntu 20.04 on WSL 2
运行正常。
VSCode with WSL 2
通过安装Remote - WSL可以非常方便的在VS Code中编辑和运行在Ubuntu WSL 2中的代码。
安装后,在运行了WSL
的终端执行
$ code .
即可直接通过VSCode
打开当前目录/项目。
运行Electron应用
到目前为止,即可在WSL的Ubuntu环境正常运行带GUI的Electron应用了。无缝运行的体验,仿佛直接打开了Windows窗口。
虽然程序已经可以正常运行,但此时还需要解决一些细节问题。
存在的问题及解决方案
中文乱码
目前是无法显示中文的,需要安装下述库实现中文显示。
sudo apt install fonts-noto-cjk
挂起时GUI窗口将自动关闭
如果您暂停笔记本电脑(合上笔记本屏幕),则WSL的GUI窗口将消失。
解决方法: 安装最新版的VcXsrv
即可,最新版的VcXsrv
解决了此问题。
WSL本身存在的问题
- 独立防火墙
- 虚拟机内存溢出
WSL在其自己的虚拟网络中运行。这意味着它不遵循您的Windows代理或防火墙配置。
其实在我看来这也算不上一个问题。这对于网络应用程序的测试是有利的。可以通过配置Ubuntu自带的防火墙实现防火墙功能。
至于VM内存溢出。如果您在WSL中运行一些占用大量内存的进程,则Windows可能无法马上回收它们使用的内存。可以通过设置WSL允许使用的最高内存加以限制(WSL2默认可以使用的内存大小为主机的80%)。
高DPI屏幕显示异常
如果您的屏幕分辨率较大,但是尺寸较小,则设备厂商将会建议您在Win10中开启缩放
功能。
在高DPI屏幕下,应用程序显示不清晰。
无法使用主机输入法
由于系统隔离,需要在Ubuntu中安装输入法。
无法复制粘贴图片文件
由于系统隔离,可以复制粘贴文本,但部分格式的文件尚未被支持。可以购买X410代替VcXsrv
,则可以复制粘贴简单的图片。
其它
使用WSL 2在Windows中构建Electron应用程序是一个非常绝妙的操作,这简直是太棒了!
暂无内容
老师你好,我希望能用一个openwrt路由器实现IPv4和IPv6的桥接,请问我该如何实现?我尝试了直接新增dhcpv6的接口,但是效果不甚理想(无法成功获取公网的ipv6,但是直连上级路由的其他设备是可以获取公网的ipv6地)
![%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE20241205230845.png](https://cdn.wyr.me/visitor-files/2024-12-05/1733411344287屏幕截图 2024-12-05 230845.png)你好
,为什么我这里是0039 813C 0600 0075 16xx xx xx,只有前6组是相同的,博客中要前8位相同,这个不同能不能照着修改呢?我系统版本是Win1124H2
大神你好,win11专业版24h2最新版26100.2033,文件如何修改?谢谢
win11专业版24h2最新版26100.2033,Windows Feature Experience Pack 1000.26100.23.0。C:\Windows\System32\termsrv.dll系统自带的这个文件,39 81 3C 06 00 00 0F 85 XX XX XX XX 替换为 B8 00 01 00 00 89 81 38 06 00 00 90。仍然无法远程连接。原来是win11 21h2系统,是可以远程链接的。共享1个主机,2个显示器,2套键鼠,各自独立操作 各自不同的账号,不同的桌面环境。
博主,win11专业版24h2最新版,C:\Windows\System32\termsrv.dll系统自带的这个文件,找不到应该修改哪个字段。我的微信:一三五73二五九五00,谢谢