前言

debian的包在安装的时候想在桌面生成快捷方式,了解后发现debian有对应的处理方式,在工程debian目录下有几个脚本:

  • preinst:安装前执行
  • postinst:安装后执行
  • prerm:卸载前执行
  • postrm:卸载后执行

写对应的脚本,包在安装的时候就会按照对应的顺序执行。以此为依据,编写两个脚本:

脚本

首先编写.desktop文件,并且在工程文件里写上安装到/usr/share/applications/里,这步可以让程序在开始菜单里显示出来,然后:

kylin-note.postinst

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/sh
set -e # 严格模式:任何命令失败则终止脚本

# 定义函数:为单个用户创建快捷方式
create_desktop_shortcut() {
USER_HOME=$1
DESKTOP_DIR=""

# 检测常见桌面路径(英文/中文)
if [ -d "$USER_HOME/Desktop" ]; then
DESKTOP_DIR="$USER_HOME/Desktop"
elif [ -d "$USER_HOME/桌面" ]; then # 处理中文环境
DESKTOP_DIR="$USER_HOME/桌面"
fi

if [ -n "$DESKTOP_DIR" ]; then
# 复制 .desktop 文件到用户桌面
cp "/usr/share/applications/kylin-note.desktop" "$DESKTOP_DIR/"
# 设置正确的所有者和权限
chown $(stat -c '%U:%G' "$USER_HOME") "$DESKTOP_DIR/kylin-note.desktop"
chmod 755 "$DESKTOP_DIR/kylin-note.desktop"
fi
}

# 遍历所有可能的用户主目录
for USER_HOME in /home/* /root; do
# 跳过无效目录(如 /home/lost+found)
if [ -d "$USER_HOME" ] && [ -O "$USER_HOME" ]; then
create_desktop_shortcut "$USER_HOME"
fi
done

# 处理当前安装时可能已登录的用户(可选)
CURRENT_USER_HOME=$(getent passwd $(logname) | cut -d: -f6)
if [ -n "$CURRENT_USER_HOME" ]; then
create_desktop_shortcut "$CURRENT_USER_HOME"
fi

exit 0

kylin-note.postrm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/sh
set -e

# 定义清理函数
cleanup_desktop_shortcut() {
USER_HOME=$1
if [ -f "$USER_HOME/Desktop/kylin-note.desktop" ]; then
rm -f "$USER_HOME/Desktop/kylin-note.desktop"
elif [ -f "$USER_HOME/桌面/kylin-note.desktop" ]; then
rm -f "$USER_HOME/桌面/kylin-note.desktop"
fi
}

# 遍历所有用户主目录
for USER_HOME in /home/* /root; do
if [ -d "$USER_HOME" ]; then
cleanup_desktop_shortcut "$USER_HOME"
fi
done

exit 0