electron 麒麟系统(Linux)无法创建桌面快捷方式

发布于:2025-03-14 ⋅ 阅读:(16) ⋅ 点赞:(0)

背景说明

使用electron+electron-builder打包.deb安装包后,再Linux系统下安装后。
开始菜单 快捷方式✅
系统桌面 快捷方式❌
接下来以麒麟系统为例,讲述修改方案。其它系统一方案一致

解决方案

解压.deb包 修改 DEBIAN/postinst中shell脚本文件。效果如下
在这里插入图片描述

1.解压.deb文件
fakeroot dpkg-deb -R 你的安装包名称.deb 你的安装包名称

解压后会出现一个文件夹

2.添加shell脚本

修改解压文件夹中 DEBIAN/postinst 文件如下

#!/bin/bash

# 顶部新增调试文件 指定打印信息位置-方便排查问题-正式使用可以去掉
exec > >(tee /tmp/postinst.log) 2>&1

原内容
TODO...

# 底部新增创建快捷方式脚本
# Create desktop shortcuts
# 获取当前图形界面登录的用户名
TARGET_USER=$(who | grep "(:0)" | awk '{print $1}')

if [ -z "$TARGET_USER" ]; then
    # 如果上述方法失败,尝试其他方法
    TARGET_USER=$(logname 2>/dev/null || whoami)
fi

USER_HOME=$(getent passwd "$TARGET_USER" | cut -d: -f6)

if [ -z "$USER_HOME" ]; then
    echo "Error: Could not determine user home directory."
else
    if [ -d "$USER_HOME/桌面" ]; then
        DESKTOP_DIR="$USER_HOME/桌面"
    elif [ -d "$USER_HOME/Desktop" ]; then
        DESKTOP_DIR="$USER_HOME/Desktop"
    else
        echo "Warning: Could not find '桌面' or 'Desktop' directory. Skipping creation of desktop shortcut."
    fi

    if [ -n "$DESKTOP_DIR" ]; then
        DESKTOP_FILE="$DESKTOP_DIR/你的应用名称(英文).desktop"

        if cp /usr/share/applications/你的应用名称(英文).desktop "$DESKTOP_FILE" > /dev/null 2>&1; then
            echo "Successfully copied .desktop file to $DESKTOP_DIR."
        else
            echo "Error: Failed to copy .desktop file to $DESKTOP_DIR."
        fi

        # 设置所有者权限
        chown "$TARGET_USER:$TARGET_USER" "$DESKTOP_FILE" > /dev/null 2>&1 || echo "Error: Failed to change ownership for $DESKTOP_FILE."

        # 设置权限
        chmod u+rwx,go+rx "$DESKTOP_FILE" > /dev/null 2>&1 || echo "Error: Failed to set permissions on $DESKTOP_FILE."
        
        echo "Permissions have been adjusted for $DESKTOP_FILE."
    fi
fi
3.重新编译.deb安装包
fakeroot dpkg-deb -b 你的安装包名称 .
4.验证

此时重新安装.deb文件,安装完成后就会再桌面创建快捷方式了

建议

  1. 千万别尝试通过配置afterInstall来实现,Linux环境一个报错接一个报错的。
  2. 如果的解包 和重新编译包 和我的命令不一致,搜下自己系统的命令就好,核心是修改shell文件
  3. 如果未安装预期创建快捷方式,可以通过调试日志查看抛出信息,大多都是路径的问题