如何将 .appimage 程序添加到启动器中的快捷方式?

这个问题以前已经被问过了,但是之前提供的答案现在不再有效。

你能说明一下,“提供的答案不再有效”是什么意思(或何时)吗?我正在使用 20.04 版本,我的快捷方式(指向 .appimage 文件)在 Gnome 和 Metacity 启动器中都可以工作...而且我只是使用了普通的基本启动器配置... - WU-TANG
2个回答

这个有几个部分。
首先,最基本的问题是,在Linux看来,AppImage只是一个像其他任何可执行二进制程序一样的可执行文件。为了使其正常工作,你需要做的第一件事就是将AppImage文件设置为可执行,因为在大多数下载的东西中,这个权限通常是被禁用的。
chmod 755 your-AppImage-file

另一个部分是告诉系统在哪里找到AppImage文件。 当您从图形用户界面运行时,请不要假设环境设置与从终端运行时相同。特别是,KDE不会首先运行.bashrc,因此它所做的任何自定义操作,例如将$HOME/bin添加到PATH中,都未完成。

我将所有的AppImage文件存储在$HOME/Containers中,该路径不在我的PATH中,默认情况下Linux无法找到它们。因此,我可以将该目录添加到我的PATH中,或者在运行AppImage时指定它。我选择后者。

解决了这个问题之后,你只需要在启动器中添加一个条目来运行AppImage。它应该设置为运行指向您的AppImage文件的绝对路径。

第二个问题是,我使用的一堆AppImage在其文件名中包含版本号。当这些文件被更新(有时会自动更新)时,菜单项指向旧名称的入口就会失效。为了避免每次发生这种情况时手动编辑我的菜单,我编写了一个辅助脚本来为我找到AppImage。

这应该保存在您的PATH目录中的文件中,例如$HOME/bin,并设置为可执行文件。
#!/bin/bash
## app_launch 
## Launch an AppImage with a variable name
## Copyleft 06/10/2019 - Joseph J Pollock - JPmicrosystems
## Usage: app_launch <unique-name-substring>
## FIXME: arg may not have embedded blanks

##source $HOME/bin/bash_trace
cd "$HOME/Containers"  ## Where all my AppImages live
##find . -iname \*$1\*.AppImage  ## debug
real_name="$(find . -iname \*$1\*.AppImage)"
##echo "real_name = [$real_name]"

count="$(echo "$real_name" | wc -l)"
if (( count > 1 ))
then
  echo "Found more than one possible AppImage"
  exit 1
fi

if [[ ! -x "$real_name" ]]
then
  echo "Can't find an executable AppImage for [$1]"
  exit 1
fi

./"$real_name"

我在菜单项中使用这个。
app_launch electrum %U

这里的诀窍是选择一个字符串(在上面的例子中是"electrum"),它对应于所需的AppImage文件名,但不会随着版本的发布而改变。
%U并非必需,但请参考下面的说明。
当您首次为新的AppImage配置菜单项时,应该从终端运行app_launch,因为如果出现问题,它会向控制台发出消息,而我没有费心将其制作成GUI消息,所以在从菜单/启动器运行脚本时您看不到这些消息。
当您添加菜单项时,可以附加一些可选参数作为参数。通常情况下,您不需要它们,但对于更高级的用法非常方便。这些在KDE中有效,但我怀疑它们是更普遍的标准的一部分,应该在其他地方也能使用。
%f - a single file name
%F - a list of files; use for applications that can open several local files at once
%u - a single URL
%U - a list of URLs
%d - the folder of a file to open
%D - a list of folders
%i - the icon
%m - the mini icon
%c - the caption

我有一些bash脚本,它们以文件名作为参数。我在我的菜单中有它们,并且我还将它们设置为文件管理器中的文件类型选项,当我在文件管理器中右键点击文件图标时会出现这些选项。当我这样做时,文件管理器会用刚刚点击的文件的名称替换%f,这样我的脚本就知道要处理该文件。

1非常晚了,但还是要谢谢你。 - H3R3T1K

我找到了一个快速的方法来完成这个任务,按照这篇文章中的建议:linuxconfig.org

简而言之,一旦你拥有了你的 .AppImage 文件(如果它还没有可执行权限,请给予其可执行权限),以及应用程序的标志(可以是 png、svg 等格式),你可以创建一个以 .desktop 结尾的文件,例如:fancy_app.desktop,并包含以下内容:

[Desktop Entry]
Name=Fancy App
Comment=Does this and that
Exec=/home/username/path/to/the/fancy_app.appimage
Icon=/home/username/path/to/the/app-logo.png
Terminal=false
Type=Application
Categories=Something;
Keywords=something;more;

这就是全部了!一个图标将出现在您的应用程序菜单中,可以搜索、运行,并且可以添加到启动器中。
我发现一些有用的约定:
- 您可以将.desktop文件保存在/home/username/.local/share/applications中。 - 您可以将应用程序图标保存在/home/username/.local/share/icons/hicolor/32x32/apps中。
希望对您有所帮助!

应用程序的图标目录对我来说不起作用,最后我只是把应用程序的图标放在与.appimage相同的目录中,并从.desktop文件中指向它。 - HungryPipo