有什么用
我使用的Linux系统为国产的deepin,在deepin上可以使用搜索来快捷搜索某个应用并打开,就像下面这样:
但想打开应用的话,它其实是不支持搜索AppImage的…
为了方便打开应用就有了这篇教学。
如何实现
其实也不难,就是添加一个.desktop和移动一下文件的事。
这里以Clash为例,来演示一下我是怎么将一个AppImage添加到自己的应用列表的。
解包AppImage
首先是给要应用化的AppImage创建一个文件夹作为应用文件夹,位置随意,我个人比较习惯在/home/$user/.local/
下创建这个文件夹,就像下面这样:
接着将这个文件移动到这个文件夹下,我就不放命令了。
然后使用下面的命令可以对AppImage进行解包:
1 2
| chmod +x your_app.AppImage ./your_app.AppImage --appimage-extract
|
结果会有一连串的输出,最终我们得到了一个名为squashfs-root
的文件夹
在这个文件夹下,是有图标文件的,一般在icons这个文件夹下,我们找到一个自己喜欢的,移动到应用文件夹里:
现在我们可以删掉这个squashfs-root
的文件夹了。
desktop文件的编写和安装
一般来说,可以以下面的文本作为模板:
1 2 3 4 5 6 7 8
| [Desktop Entry] Categories=Utility; Comment=Utility Exec=$path/to/AppImage Icon=$path/to/icon Name=$app_name Terminal=false Type=Application
|
将其中的变量替换为你实际的路径、应用名就可以了。
对于我的clash,我使用的是下面的文本作为desktop文件:
1 2 3 4 5 6 7 8
| [Desktop Entry] Categories=Utility; Comment=Clash Exec=/home/Jese__Ki/.local/share/clash-for-linux/clash-verge_1.5.0_amd64.AppImage Icon=/home/Jese__Ki/.local/share/clash-for-linux/clash-verge.png Name=Clash For Linux Terminal=false Type=Application
|
将这个文件移动到你的桌面,可以直接双击打开应用。
但是到目前还不够,我们需要进一步的完善:
1 2 3
| sudo desktop-file-install $path/to/your_app.desktop sudo update-desktop-database
|
到这一步,你的AppImage就算作被安装在系统上了:
一键脚本
可以看出,这个流程挺固定的,因此是可以使用脚本进行完成的:
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| #!/bin/bash
if [ -z "$1" ]; then echo "Usage: $0 <AppImage path> [-c|--comment <comment>]" exit 1 fi
APPIMAGE_PATH="$1" shift APP_NAME=$(basename "$APPIMAGE_PATH" | sed 's/\.AppImage$//') USER_HOME="/home/$USER" INSTALL_PATH="$USER_HOME/.local/share/$APP_NAME" COMMENT="comment for $APP_NAME" ICON_PATH=""
while [ "$#" -gt 0 ]; do case "$1" in -c|--comment) COMMENT="$2" shift 2 ;; *) shift ;; esac done
chmod +x "$APPIMAGE_PATH" if ! "$APPIMAGE_PATH" --appimage-extract; then echo "解包AppImage失败" exit 1 fi
if [ ! -d squashfs-root ]; then echo "未找到预期的目录结构" exit 1 fi
if ls squashfs-root/usr/share/*.png 1> /dev/null 2>&1; then ICON_PATH=$(find squashfs-root/usr/share -name '*.png' | head -n 1) elif find squashfs-root/usr/ -name '*.png' | grep -q .; then ICON_PATH=$(find squashfs-root/usr/ -name '*.png' | head -n 1) fi
mkdir -p "$INSTALL_PATH" mv "$APPIMAGE_PATH" "$INSTALL_PATH" if [ ! -z "$ICON_PATH" ]; then mv "$ICON_PATH" "$INSTALL_PATH" ICON_PATH="$INSTALL_PATH/$(basename "$ICON_PATH")" else echo "未找到图标文件。" fi
DESKTOP_FILE="$INSTALL_PATH/$APP_NAME.desktop" cat << EOF > "$DESKTOP_FILE" [Desktop Entry] Categories=Utility; Comment=$COMMENT Exec=$INSTALL_PATH/$(basename "$APPIMAGE_PATH") Icon=$ICON_PATH Name=$APP_NAME Terminal=false Type=Application EOF
sudo desktop-file-install "$DESKTOP_FILE" sudo update-desktop-database
rm -rf squashfs-root
if [ "$ICON_PATH" = "" ]; then echo "未找到图标文件,请手动将图标文件移动到 $INSTALL_PATH 目录下。" fi
echo "安装完成。"
|
可以保存为.sh
文件进行运行,使用方法为bash $script.sh $path/to/app.AppImage -c $comment
script
: 表示为脚本的文件名
path/to/app.AppImage
: 表示AppImage的路径
-c
: 可选,表示desktop文件中的Comment字段的内容,默认为comment"