我想为 Inkscape AppImage 创建桌面条目。我遇到了一些问题,因为我不了解所有 MIME 类型,也不清楚如何在桌面条目上运行此类应用。
有谁知道我怎样才能实现这样的目标?
答案1
您可以手动执行此操作,也可以按照此处所述执行:将 AppImage 文件注册为桌面应用。
既然你想手动做,你可以这样做。
- 下载官方Inkscape 应用图像。
- 使其可执行,运行:
chmod +x inkscape.AppImage
。 - 将其移动到适当的路径,例如
~/.local/bin
。 - 提取 AppImage,运行;将在提取 AppImage 的目录中
inkscape.AppImage --appimage-extract
创建一个名为的目录。squashfs-root
- 进入目录
squashfs-root
,将桌面启动器复制org.inkscape.Inkscape.desktop
到~/.local/share/applications
;然后编辑桌面启动器指向AppImage的路径,即Exec=$HOME/.local/bin/inkscape.AppImage
。 - 删除目录
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
这对我有用。
下载
Inkscape-xxx.AppImage
自inkscape.org。将其复制到
/opt/inkscape/
文件夹并重命名为Inkscape.AppImage
使其可执行
chmod u+x Inkscape.AppImage
下载inkscape-logo.svg文件并将其复制到
/opt/inkscape/
创建新文件
~/.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 条目,请使用
- 用于 Wayland镜子
- 对于 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 的情况,但我不知道这是否是规范的一部分