8

Win10中通过WSL2开发基于Electron的Ubuntu应用程序

 3 years ago
source link: https://www.wyr.me/post/685
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

本文将介绍如何在Windows 10操作系统中借助WSL 2开发基于Electron的Ubuntu窗口应用程序,可以实现在win10中编写代码并查看linux应用的运行效果。

借助此方法,仅需一台MacOS设备和一台Win10的设备,即可通过Electron开发和测试主流操作系统(Windows、Linux、MacOS)下桌面应用程序并可以有差异化的调用操作系统的原生API。

通过MacOS系统可以编译几乎所有平台的应用程序,例如可以在MacOS中编译Win10 x64Linux ARM64等平台的应用程序。但是在win10ubuntu中无法编译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》。

wsl2.png

为了成功运行此文说明的Electron应用程序,请确保wsl --list -v命令显示的VERSION2

您还需要参阅上述链接安装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

chocoinstallvcxsrv.png

如果正常安装了node.js并且运行了官方的编译工具一键安装脚本,那么choco命令是默认已经安装好的了。如果提示choco未找到/未安装,打开node.js安装目录,运行install_tools.bat即可(会自动安装chocolatey和其它必要的编译工具,如果安装失败,则是网络异常导致,请自行查阅相关资料解决)。

VcsXsrv配置

打开桌面的XLaunch。选择 Multiple Windows - Start no client,下一步。

vcxsrvconfig.png

选择ClipboardOpenGL,添加-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

xcalc.png

如果看到华丽的x11 calc应用,说明VcXsrvUbuntu 20.04 on WSL 2运行正常。

VSCode with WSL 2

通过安装Remote - WSL可以非常方便的在VS Code中编辑和运行在Ubuntu WSL 2中的代码。

安装后,在运行了WSL的终端执行

$ code .

即可直接通过VSCode打开当前目录/项目。

运行Electron应用

electronubuntuwsl2.png

到目前为止,即可在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屏幕下,应用程序显示不清晰。

可以参考https://superuser.com/questions/1370361/blurry-fonts-on-using-windows-default-scaling-with-wsl-gui-applications-hidpi解决此问题。

无法使用主机输入法

由于系统隔离,需要在Ubuntu中安装输入法。

无法复制粘贴图片文件

由于系统隔离,可以复制粘贴文本,但部分格式的文件尚未被支持。可以购买X410代替VcXsrv,则可以复制粘贴简单的图片。

使用WSL 2在Windows中构建Electron应用程序是一个非常绝妙的操作,这简直是太棒了!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK