轶哥

📚 Having fun with AI Agent. Always learning.

    Win10中通过WSL2开发基于Electron的Ubuntu应用程序
    •   更新:2021-10-05 22:13:43
    •   首发:2021-04-11 23:12:18
    •   教程
    •   8998

    本文将介绍如何在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应用程序是一个非常绝妙的操作,这简直是太棒了!

    打赏
    交流区

    暂无内容

    尚未登陆
    发布
      上一篇 (关于JavaScript作用域与函数提升的一道思考题)
    下一篇 (自助设备广告屏自动播放视频功能实现)  

    评论回复提醒