如何为 AppImage 创建桌面条目?

如何为 AppImage 创建桌面条目?

我想为 Inkscape AppImage 创建桌面条目。我遇到了一些问题,因为我不了解所有 MIME 类型,也不清楚如何在桌面条目上运行此类应用。

有谁知道我怎样才能实现这样的目标?

答案1

您可以手动执行此操作,也可以按照此处所述执行:将 AppImage 文件注册为桌面应用

既然你想手动做,你可以这样做。

  1. 下载官方Inkscape 应用图像
  2. 使其可执行,运行:chmod +x inkscape.AppImage
  3. 将其移动到适当的路径,例如~/.local/bin
  4. 提取 AppImage,运行;将在提取 AppImage 的目录中inkscape.AppImage --appimage-extract创建一个名为的目录。squashfs-root
  5. 进入目录squashfs-root,将桌面启动器复制org.inkscape.Inkscape.desktop~/.local/share/applications;然后编辑桌面启动器指向AppImage的路径,即Exec=$HOME/.local/bin/inkscape.AppImage
  6. 删除目录squashfs-root

笔记:AppImage 文件名不必包含.AppImage;系统会知道它是什么。如果未显示图标,则表示您使用的图标主题缺少文件org.inkscape.Inkscape。您还可以编辑桌面启动器以使用图标主题提供的任何图标。

答案2

首先,确保它是可执行的:chmod u+x Inkscape.AppImage

然后,你可以像这样格式化你的桌面文件:

[Desktop Entry]
Name=InkScape
Exec=/path/to/appimage.AppImage
Icon=Inkscape
Type=Application
Categories=GTK;GNOME;Utility;

答案3

这对我有用。

  1. 下载Inkscape-xxx.AppImageinkscape.org

  2. 将其复制到/opt/inkscape/文件夹并重命名为 Inkscape.AppImage

  3. 使其可执行chmod u+x Inkscape.AppImage

  4. 下载inkscape-logo.svg文件并将其复制到/opt/inkscape/

  5. 创建新文件~/.local/share/application/inkscape.desktop

包含以下条目。

[Desktop Entry]
Name=Inkscape
Exec=/opt/inkscape/Inkscape.AppImage %u
Icon=/opt/inkscape/inkscape-logo.svg
Comment=Draw Freely
Type=Application
Terminal=false
Encoding=UTF-8
Categories=Utility;
StartupNotify=true
StartupWMClass=org.inkscape.Inkscape

笔记StartupWMClass=org.inkscape.Inkscape将正在运行的实例与.desktop启动器关联起来非常重要。字段%u末尾的参数Exec用于列出应用程序打开用应用程序列表。

要找到应用程序的 StartupWMClass 条目,请使用

  1. 用于 Wayland镜子
  2. 对于 xorg,xprop | grep WM_CLASS在终端中运行并单击应用程序的窗口

答案4

除了以前的令人惊奇的答案之外,我发现以下命令对于跳过提取和删除步骤很有用:

timeout 1 ./<whatever>.AppImage --appimage-mount \
   | xargs -I {} bash -c 'cp {}/*.desktop . -v'

它将挂载 appimage ( --appimage-mount) 而不是提取它;将该命令的输出(挂载路径)通过管道传输到 xargs,调用新的 bash,以便我们可以使用 shell 扩展挂载;然后在这个新的 shell 中,将所有桌面文件复制到当前目录;最后在 1 秒后关闭挂载

以类似的方式,您甚至可以自动化整个过程(风险自负:))

APPIMAGE=<whatever>.AppImage
chmod +x "$APPIMAGE"
timeout 1 ./"$APPIMAGE" --appimage-mount \
   | xargs -I {} find {} -name '*.desktop' \
   | head -n 1 \
   | xargs cat \
   | sed 's:^Exec=.*:Exec='"$(readlink -f "$APPIMAGE")"':' \
   > ~/.local/share/applications/"$APPIMAGE".desktop \
   && chmod +x ~/.local/share/applications/"$APPIMAGE".desktop

假设:完整的 appimage 路径中没有符号

为了获取图标,我使用

APPIMAGE=<whatever>.AppImage
timeout 1 ./"$APPIMAGE" --appimage-mount \
   | xargs -I {} find {} -name '*.desktop' \
   | head -n 1 \
   | sed 's/\.desktop$/.png/' \
   | xargs -I {} cp {} ~/.local/share/icons -v

它假设桌面和图标文件只是具有不同的扩展名,这似乎是我检查过的几个 appimages 的情况,但我不知道这是否是规范的一部分

相关内容