手把手教你在Linux上构建Electron
开发electron最大的特点就是可以使用web技术来开发跨平台应用,大部分开发都是在windows/mac上开发的electron应用,我使用的是
electorn-builder来构建应用,官网提供支持在windows上使用docker来实现Linux版本的构建。可以直接在Linux服务器上完成构建:
构建Linux环境的electron主要的步骤:
- 安装依赖:node、python(如需要)
- 将源代码上传到Linux环境
- 构建应用
安装步骤:
一、安装node
在Linux上安装nodejs,可以在windows上先下载把Linux版本的nodejs包下载到本地后,再拷贝到Linux上
1、查看Linux系统架构
uname -m | arch

2、下载nodejs,Linux安装包下载:nodejs

3、下载到本地之后,将nodejs压缩包上传到Linux服务器上,可以使用终端工具或者ssh传输MobaXTerm终端工具下载地址
将压缩包上传到服务器目录,一般是用户目录(/home/username)
~代表用户目录
4、将文件解压到指定nodejs的安装目录,这里安装到了/opt目录下
在/opt下创建nodejs目录
cd /opt
mkdir nodejs将压缩包拷贝到/opt/nodejs目录下
mv ~/node-v16.20.2-linux-x64.tar.xz /opt/nodejs切换到/opt/nodejs目录下,解压压缩包
cd /opt/nodejs/
tar -xvf node-v16.20.2-linux-x64.tar.xz记住解压的bin目录,后续设置环境变量
目录:
/opt/nodejs/node-v16.20.2-linux-x64/bin
5、使用vi或者vim命令编辑 /etc/profile 文件,将nodejs的bin目录添加到环境变量中
export PATH=“/opt/nodejs/node-v16.20.2-linux-x64/bin:$PATH”
vim /etc/profile
按下键盘的
i即可编辑文件,在文件末尾添加环境变量,如下:
设置完毕后,按下
esc键退出编辑模式,输入:wq!保存编辑并退出修改了环境变量文件之后,需要重新加载配置文件以生效,使用命令
source /etc/profile输入
node -v测试是否安装成功
二、安装python
我的程序用到
grpc,涉及到了node与c++的调用,为了包之间的适配,需要借用python环境来重新构建依赖以完成grpc与electron的适配
1、将python3.11.5在windows上下载后,上传到Linux
安装步骤:
cd python-3.11.5
./configure --preofx=/opt/python3
make j 10:同时运行十个作业,若失败的话,可以使用makesu
make install
2、将 python3 目录下的 bin 目录设置环境变量
- vim /etc/profile
- export PATH=$PATH:/opt/python3/bin
- 设置完成保存后,重新运行配置文件:source /etc/profile
三、构建electron
将windows下开发的electron源代码拷贝到Linux上,保证将windows版本的node_modules删除,在Linux上进行编译
1、在Linux上的electron源代码目录下,确保没有windows版本的node_modules,然后进行构建:
设置npm和electron的镜像,可以使用国内淘宝镜像顺利的下载资源,执行 npm config edit
执行 npm config edit之后,会进入到 npm 的配置文件,设置镜像
ELECTRON_BUILDER_BINARIES_MIRROR=https://npmmirror.com/mirrors/electron-builder-binaries/ ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ registry=https://registry.npmmirror.com/设置完镜像后退出
确保electron代码中对Linux下build进行了配置
linux: {icon,target: 'AppImage',maintainer: "zj" }在electron的根目录下执行 npm install
我的代码中使用到了 grpc,可能会报错grpc与electron版本不兼容的问题,此时需要使用
electron-rebuild来重新构建完成包之间的兼容安装了
electron-rebuild之后,在 package.json 中的 scripts 中设置"rebuild": “electron-rebuild -f -w yourmodule”
执行
npm run rebuild,开始重新构建。在我测试的时候发现:使用node16.20.2版本搭配python3.11.5版本可以完成rebuild重新构建打包构建程序:
npm run electron:build
2、修改Linux下chrome-sandbox沙盒的权限
由于electron嵌入了Chromium和Node.js,
在Linux系统上,进程和文件的权限管理比其他操作系统更加严格和细粒度。
chrome-sandbox是一个提升了特权的进程,它需要特定的权限来运行。
在构建代码后,运行.AppImage程序,可能会报错:
The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /tmp/.mount_xxxxx/chrome-sandbox is owned by root and has mode 4755.
3、设置chrome-sandbox权限
需要将
node_modules/electron/dist/chrome-sandbox设置权限为4755,并且设置root用户权限执行命令:
sudo chown root:root chrome-sandbox && sudo chmod 4755 chrome-sandbox重新构建build
4、禁用沙盒
若设置chrome-sandbox权限后,重新构建仍然报错,可以禁用沙盒运行程序
在启动程序后面加参数
--no-sandbox执行:
./electron-app --no-sandbox。此时可以成功运行程序
环境变量配置
Linux上设置环境变量的两种方式:1. 全局设置,设置后所有用户生效 2. 设置属于指定用户的环境变量
- 全局:
/etc/profile/- 设置PATH:
export PATH=/opt/nodejs/bin:$PATH - 设置PATH追加:
export PATH=$PATH:/opt/python3/bin - 设置完PATH之后需要重新运行:
source /etc/profile
- 设置PATH:
- 用户的环境变量:
~/.bashrc|~/.cshrc
相关文章:
手把手教你在Linux上构建Electron
开发electron最大的特点就是可以使用web技术来开发跨平台应用,大部分开发都是在windows/mac上开发的electron应用,我使用的是electorn-builder来构建应用,官网提供支持在windows上使用docker来实现Linux版本的构建。可以直接在Linux服务器上完…...
力扣【448-消失的数字】【数组-C语言】
题目:力扣-448 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 把数组中存在[1…n]的元素放其元素值-1的位置上,第一个fo…...
面试题:排序算法的稳定性?(文末有福利)
回归面试题! 回答重点 稳定的排序算法:冒泡排序、插入排序、归并排序、计数排序。 不稳定的排序算法:选择排序、快速排序、堆排序、希尔排序。 扩展知识 1)冒泡排序(Bubble Sort) 原理: 冒…...
在Jdk1.8中Collectors和Comparator使用场景
在Jdk1.8中Collectors和Comparator使用场景 Collectors 和 Comparator 是 Java 8 引入的两个非常重要的类,它们在处理集合和流(Streams)时起着重要的作用。以下是这两个类的使用场景以及它们的典型用法。 1. Collectors Collector…...
linux-性能优化命令
top 我们先来说说top命令用法,这个命令对于我们监控linux性能是至关重要的,我们先来看看展示结果。 top - 15:20:23 up 10 min, 2 users, load average: 0.39, 0.53, 0.35 Tasks: 217 total, 1 running, 216 sleeping, 0 stopped, 0 zombie %C…...
基于MT79815G CPE 板子上挂usb3.0的5G 模块,WIFI能跑多少速度呢
关于MT79815G CPE 板子上挂usb3.0的5G 模块,WIFI能跑多少速度的问题,我们以启明智显 ZX7981P智能无线接入型路由器(CPE)挂广合通5G模组为例说明: 一般来说,用 ZX7981P,通过软加速,U…...
R包compareGroups详细用法
compareGroups compareGroups 是一个功能强大的 R 包,专为数据质量控制、数据探索和生成用于出版的单变量或双变量表格而设计。它能够创建各种格式的报表,如纯文本、HTML、LaTeX、PDF、Word 或 Excel 格式,并显示统计数据(均值、…...
如何选择高品质SD卡
如何选择高品质SD卡 SD卡(Secure Digital Memory Card)是一种广泛使用的存储器件,因其快速的数据传输速度、可热插拔的特性以及较大的存储容量,广泛应用于各种场景,例如在便携式设备如智能手机、平板电脑、运动相机等…...
C++学习:模拟priority_queue
一:仿函数 开始模拟前咱先了解一下仿函数。有了它,我们就可以自己传个代码让优先级队列升序还是降序,自己模拟时也不用在需要升序降序时改代码。这是个很有用的东西。 不写模版也可以,但模版能用在更多地方嘛 template <class …...
同程旅行对标拼多多:“形似神不似”
文:互联网江湖 作者:刘致呈 业绩好,并不意味着同程旅行就能高枕无忧了。 最近,媒体曝出:有用户在同程旅行APP上预订酒店,在预订成功并付款后,结果第二天却被酒店告知,没有查到相关…...
HOJ网站开启https访问 申请免费SSL证书 部署证书详细操作指南
https://console.cloud.tencent.com/ 腾讯云用户 登录控制台 右上角搜SSL 点击 SSL证书 进入链接 点申请 免费证书 有效期3个月 (以后每三个月申请一次证书 上传) 如果是腾讯云申请的域名 选 自动DNS验证 自动添加验证记录 如果是其他平台申请域…...
程序设计基础I-实验4 循环结构之for语句
7-1 sdut-C语言实验-AB for Input-Output Practice (Ⅳ) Your task is to Calculate a b. 输入格式: Your task is to Calculate a b. 输出格式: For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of out…...
深入工作流调度的内核
在大数据时代,工作流任务调度系统成为了数据处理和业务流程管理的核心组件,在大数据平台的构建和开发过程中尤为重要。随着数据量的激增和业务需求的多样化,合理的任务调度不仅能够提高资源利用率,还能保证业务流程的稳定和高效运…...
vue3中动态引入组件并渲染组件
在开发中 有时会在打包或者各种可能的情况下 报错或警告提示 模块化打包的问题, 我们需要动态引入组件并渲染组件时,可以使用import引入 如下举例 import { ref, markRaw } from vue const childrenComponent ref(); onMounted(() > {//举例引入一个…...
【艾思科蓝】网络安全的隐秘战场:构筑数字世界的铜墙铁壁
第七届人文教育与社会科学国际学术会议(ICHESS 2024)_艾思科蓝_学术一站式服务平台 更多学术会议请看:https://ais.cn/u/nuyAF3 目录 引言 一、网络安全:数字时代的双刃剑 1.1 网络安全的定义与重要性 1.2 网络安全威胁的多元化…...
将图片资源保存到服务器的盘符中
服务类 系统盘符:file-path.disk(可能会变,配置配置文件dev中)文件根路径:file-path.root-path(可能会变,配置配置文件dev中)http协议的Nginx的映射前缀:PrefixConstant.…...
数学建模练习小题目
题目A 有三名商人各带一名仆人过河,船最多能载两人。在河的任何一岸,若仆人数超 过商人数,仆人会杀商人越货。如何乘船由商人决定,问是否有安全过河方案,若有,最少需要几步? 定义变量 商人和仆人的状态…...
不可错过的10款文件加密软件,企业电脑加密文件哪个软件好用
在信息安全日益重要的今天,企业和个人都需要可靠的文件加密软件来保护敏感数据。以下是2024年不可错过的10款文件加密软件,它们以强大的加密功能和易用性而闻名。 1.安秉加密软件 安秉加密软件是一款专为企业设计的信息安全管理工具,采用驱动…...
常用卫星学习
文章目录 Landsat-8 Landsat-8 由一台操作陆地成像仪 (OLI) 和一台热红外传感器 (TIRS)的卫星,OLI 提供 9 个波段,覆盖 0.43–2.29 μm 的波长,其中全色波段(一般指0.5μm到0.75μm左…...
音视频入门基础:FLV专题(3)——FLV header简介
一、引言 本文对FLV格式的FLV header进行简介,FLV文件的开头就是FLV header。 进行简介之前,请各位先从《音视频入门基础:FLV专题(1)——FLV官方文档下载》下载FLV的官方文档《video_file_format_spec_v10_1.pdf》和…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...


