自用设备 MacBookPro M1Pro 所以就没写mac打包配置

win安装包还是挺好打的,麻烦的就是linux

linux打包x64 deb包和win一样 加上--x64

extraResources 是因为需要读取一些文件,没需要可写可不写

afterInstall 安装后执行脚本,因为我要创建桌面图标

我的方式就是复制desktop文件到桌面,但是Ubuntu系统此方法不可用,创建成功后也会不被信任无法执行,银河麒麟可以运行,其他系统没测试

每个人安装方式不同,我使用apt安装,所以会用到root权限去安装,但是会导致获取到的用户为root,则普通用户的桌面路径无法获取,偷了个懒没给所有用户安装,只获取了切换root前的普通用户

#!/bin/sh

# 定义日志文件(root可写,确保日志目录存在)
LOG_DIR="/var/log"
mkdir -p "$LOG_DIR"
LOG_FILE="$LOG_DIR/xrubik-install.log"

# 记录脚本开始执行时间
echo "[$(date +"%Y-%m-%d %H:%M:%S")] 安装后脚本开始执行" >> "$LOG_FILE"

# 核心:通过$SUDO_USER获取切换root前的原始普通用户(执行sudo安装的用户)
NORMAL_USER="$SUDO_USER"

# 验证$SUDO_USER有效性,无值则降级检测(兼容直接root登录安装场景)
if [ -z "$NORMAL_USER" ]; then
    echo "[$(date +"%Y-%m-%d %H:%M:%S")] 未通过sudo安装,尝试检测当前登录普通用户" >> "$LOG_FILE"
    # 从登录用户列表中过滤root,取第一个普通用户
    NORMAL_USER=$(who | grep -v 'root' | awk '{print $1}' | head -n 1)
    
    # 若仍未获取到,尝试常用默认用户名(可根据实际场景调整)
    if [ -z "$NORMAL_USER" ]; then
        echo "[$(date +"%Y-%m-%d %H:%M:%S")] 未检测到登录用户,尝试默认用户名列表" >> "$LOG_FILE"
        for user in "admin" "user""张三"; do
            if [ -d "/home/$user" ]; then
                NORMAL_USER="$user"
                echo "[$(date +"%Y-%m-%d %H:%M:%S")] 匹配到默认用户:$NORMAL_USER" >> "$LOG_FILE"
                break
            fi
        done
    fi
fi

# 最终验证普通用户是否有效,无效则终止并记录错误
if [ -z "$NORMAL_USER" ]; then
    echo "[$(date +"%Y-%m-%d %H:%M:%S")] 错误:未找到有效普通用户,无法复制桌面图标" >> "$LOG_FILE"
    exit 0
fi
echo "[$(date +"%Y-%m-%d %H:%M:%S")] 确认目标普通用户:$NORMAL_USER" >> "$LOG_FILE"

# 构建普通用户主目录,定位其桌面目录(优先兼容XDG标准,再适配中英文)
USER_HOME="/home/$NORMAL_USER"
USER_DESKTOP_DIR=""

# 1. 优先通过XDG_DESKTOP_DIR获取用户自定义桌面目录(最准确,兼容所有语言)
if [ -n "$(sudo -u $NORMAL_USER sh -c 'echo $XDG_DESKTOP_DIR 2>/dev/null')" ]; then
    USER_DESKTOP_DIR=$(sudo -u $NORMAL_USER sh -c 'echo $XDG_DESKTOP_DIR')
    echo "[$(date +"%Y-%m-%d %H:%M:%S")] 通过XDG标准获取桌面目录:$USER_DESKTOP_DIR" >> "$LOG_FILE"
# 2. 兼容中文系统默认桌面目录
elif [ -d "$USER_HOME/桌面" ]; then
    USER_DESKTOP_DIR="$USER_HOME/桌面"
    echo "[$(date +"%Y-%m-%d %H:%M:%S")] 匹配中文桌面目录:$USER_DESKTOP_DIR" >> "$LOG_FILE"
# 3. 兼容英文系统默认桌面目录
elif [ -d "$USER_HOME/Desktop" ]; then
    USER_DESKTOP_DIR="$USER_HOME/Desktop"
    echo "[$(date +"%Y-%m-%d %H:%M:%S")] 匹配英文桌面目录:$USER_DESKTOP_DIR" >> "$LOG_FILE"
# 4. 无桌面目录则终止并记录
else
    echo "[$(date +"%Y-%m-%d %H:%M:%S")] 错误:未找到$NORMAL_USER的桌面目录" >> "$LOG_FILE"
    exit 0
fi

# 复制.desktop文件到桌面,并解决“未被信任”问题
DESKTOP_FILE="/usr/share/applications/xrubik-simulation.desktop"  # 源文件路径
DEST_FILE="$USER_DESKTOP_DIR/xrubik-simulation.desktop"          # 目标文件路径

if [ -f "$DESKTOP_FILE" ]; then
    # 1. 用普通用户权限复制(避免文件所有者为root,导致权限异常)
    sudo -u $NORMAL_USER cp "$DESKTOP_FILE" "$DEST_FILE" 2>> "$LOG_FILE"
    if [ $? -eq 0 ]; then
        echo "[$(date +"%Y-%m-%d %H:%M:%S")] .desktop文件复制成功:$DEST_FILE" >> "$LOG_FILE"
    else
        echo "[$(date +"%Y-%m-%d %H:%M:%S")] 错误:.desktop文件复制失败" >> "$LOG_FILE"
        exit 0
    fi

    # 2. 设置可执行权限(桌面环境识别为“程序启动文件”的基础)
    sudo -u $NORMAL_USER chmod +x "$DEST_FILE" 2>> "$LOG_FILE"
    if [ $? -eq 0 ]; then
        echo "[$(date +"%Y-%m-%d %H:%M:%S")] 已为目标文件添加可执行权限" >> "$LOG_FILE"
    else
        echo "[$(date +"%Y-%m-%d %H:%M:%S")] 警告:添加可执行权限失败(可能仍提示未信任)" >> "$LOG_FILE"
    fi

    # 3. 关键:通过gio工具添加信任标记(解决桌面“未被信任”提示)
    if command -v gio &> /dev/null; then
        sudo -u $NORMAL_USER gio set "$DEST_FILE" metadata::trusted true 2>> "$LOG_FILE"
        if [ $? -eq 0 ]; then
            echo "[$(date +"%Y-%m-%d %H:%M:%S")] 已为目标文件添加桌面信任标记" >> "$LOG_FILE"
        else
            echo "[$(date +"%Y-%m-%d %H:%M:%S")] 警告:添加信任标记失败(手动右键勾选权限即可)" >> "$LOG_FILE"
        fi
    else
        echo "[$(date +"%Y-%m-%d %H:%M:%S")] 提示:系统无gio工具,需手动信任文件(右键→权限→允许执行)" >> "$LOG_FILE"
    fi

else
    echo "[$(date +"%Y-%m-%d %H:%M:%S")] 错误:未找到源文件$DESKTOP_FILE" >> "$LOG_FILE"
fi

# 记录脚本执行完毕
echo "[$(date +"%Y-%m-%d %H:%M:%S")] 安装后脚本执行完毕" >> "$LOG_FILE"

exit 0

不同系统出现的问题不同
ubuntu有概率出现沙箱权限问题,银河麒麟暂时没遇到

sudo chown root:root /opt/xrubik-simulation/chrome-sandbox
sudo chmod 4755 /opt/xrubik-simulation/chrome-sandbox


{

    "name": "yourAppName",

    "version": "1.0.0",

    "description": "",

    "main": "index.js",

    "scripts": {

        "start": "nodemon --exec electron . --ext .js,.html",

        "pack": "electron-builder",

        "win": "electron-builder --win --x64",

        "linux": "electron-builder --linux deb"

     },

    "homepage": "https://www.yourWeb.com/",

    "build": {

        "appId": "111111自己写",

        "productName": "yourAppName",

        "copyright": "Copyright © 2021 Alaso",

        "directories": {

            "buildResources": "build",

            "output": "dist"

        },

        "win": {

            "target": [

                "nsis"

            ],

            "icon": "./favicon.ico"

        },

        "nsis": {

            "oneClick": false,

            "language": "2052",

            "createDesktopShortcut": true,

            "allowToChangeInstallationDirectory": true

        },

        "linux": {

            "target": [

                "deb"

            ],

            "icon": "./build/icons",

            "category": "Science",

            "maintainer": "yourEmail",

            "executableName": "yourAppName",

            "desktop": {

                "Name": "应用显示名称",

                "Comment": "简介",

                "Keywords": "simulation;power;training",

                "Type": "Application",

                "Terminal": "false",

                "StartupWMClass": "yourAppName",

                "MimeType": "查文档写"

            }

        },

        "deb": {

            "synopsis": "yourAppName Desktop App",

            "afterInstall": "./build/debinstall.sh"

        },

        "extraResources": [

            {

                "from": "path/",

                "to": "ipPath/"

            }

        ]

    },

    "author": {

        "name": "yourname",

        "email": "youremail"

    },

    "license": "ISC",

    "dependencies": {

        "electron-log": "^5.3.2"

    },

    "devDependencies": {

        "electron": "^20.1.4",

        "electron-builder": "^23.3.3",

        "nodemon": "^3.0.2"

    }

}

linux图标建议放在文件夹下

修改图标名称和实际尺寸相同例如
256x256.png / 512x512.png

虚拟机ubuntu arm下运行偶尔会有奇奇怪怪的问题无法运行,建议实机测试

更多推荐