惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学
T
Threatpost
K
Kaspersky official blog
Cisco Talos Blog
Cisco Talos Blog
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
T
Tenable Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 热门话题
Scott Helme
Scott Helme
云风的 BLOG
云风的 BLOG
博客园 - Franky
Webroot Blog
Webroot Blog
D
DataBreaches.Net
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
F
Fortinet All Blogs
PCI Perspectives
PCI Perspectives
Google DeepMind News
Google DeepMind News
Microsoft Azure Blog
Microsoft Azure Blog
Blog — PlanetScale
Blog — PlanetScale
P
Proofpoint News Feed
Google DeepMind News
Google DeepMind News
月光博客
月光博客
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Help Net Security
Help Net Security
T
The Blog of Author Tim Ferriss
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
GbyAI
GbyAI
O
OpenAI News
Martin Fowler
Martin Fowler
W
WeLiveSecurity
C
Cyber Attacks, Cyber Crime and Cyber Security
Project Zero
Project Zero
V
Vulnerabilities – Threatpost
L
LangChain Blog
P
Privacy & Cybersecurity Law Blog
S
Security Affairs
P
Privacy International News Feed
C
Cybersecurity and Infrastructure Security Agency CISA
MyScale Blog
MyScale Blog
NISL@THU
NISL@THU
T
Troy Hunt's Blog
C
Cisco Blogs
IT之家
IT之家

轶哥博客

blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog blog
blog
2021-04-11 · via 轶哥博客

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