Ubuntu对“注册应用程序”的定义是什么?

我在安装应用程序时遇到了几次这个问题,也在偶尔使用`update-alternatives`进行黑客攻击时遇到过。到目前为止,这只是一个小的烦恼(即没有妨碍最终目标),但现在它成为了我的知识库中的一个漏洞,所以当我收到一个消息说'foo'不是"已注册的应用程序"(或者我不能使用foo的默认图标,因为Ubuntu对'foo'一无所知)时:
1. 什么定义了"已注册的应用程序"? 2. 我如何定义从源代码安装的应用程序(很可能位于$HOME/bin/app-name),使其具有与从.deb包安装的软件包相同的功能?(如果答案1不明显)
示例: 我下载并解压每日开发版本的sublime-text-2到/home/tom/bin/sublime-text-2。我创建了一个带有适当快捷方式的.desktop文件等等。但是,即使我提供完整路径名作为选项,sublime的图标也无法显示在任何启动器中。解决方法是从deb包安装第二个sublime实例。
当我从.deb包安装sublime-text-2时,它会安装在/usr/bin和/usr/lib目录下,安装的.desktop文件存储在/usr/share/applications目录下,相关的行为icon=sublime_text
我错过了什么连接?不知何故Ubuntu可以从后者中提取出sublime_text的图标,但不能从前者中提取(即使提供了完整路径)。

你把这个启动器放在你的家目录的哪个位置? - Isaiah
还有,你什么时候收到这条消息:“foo不是一个注册的应用程序”? - Isaiah
@DoR:我的sublime.desktop文件位于/.local/share/applications下。我记得最明显的地方是在尝试将从源代码编译的vim版本插入update-alternatives列表中,以便它能够代替“默认”安装时出现的消息。有帮助吗?我想我正在寻找的机制是Ubuntu如何知道在哪里找到(例如)应用程序A的正确图标 - 就像它在/usr/share/applications/下的*.desktop文件一样。 - Tom
如果您在~/.local/share/applications启动器中将"icon"的值设置为sublime_text不是完整路径),这样会起作用吗? - Isaiah
1个回答

我觉得你在源码安装方面遇到了几个问题。 update-alternatives 不允许你随意设置任何程序作为给定名称的首选应用程序。该程序必须先使用 --install 选项进行注册。例如:
sudo update-alternatives --set editor /home/peter/bin/foo
update-alternatives: error: alternative /home/peter/bin/foo for editor not registered, not setting.

如果你想看看注册是如何完成的,可以查看例如/var/lib/dpkg/info/nano.postinst
然而,请注意,定义一个指向某个用户主目录的系统范围替代方案可能是相当荒谬的。通常有环境变量或其他设置来仅为一个用户设置偏好。
桌面文件的问题可能完全独立,但你需要提供更多关于你使用了哪些路径的详细信息。
一般来说,从源代码安装应用程序可能会很难与系统的其余部分良好集成,这取决于特定的应用程序。

彼得:是的,我觉得你说得很对...经过反思,纠正我的“思维”就是答案。我在一台笔记本电脑上使用该系统——只有我使用、登录等。当然,UNIX是一个多用户操作系统,它将程序安装定义为这样的。图标的问题微不足道,我认为这是个怪癖。我按照你的建议,在我的sublime-text postinst检查中找到了一个单独的图标文件,所以现在我可以将备用安装(在我的$HOME目录下)指向一个特定的文件,而不是让它“自动地”从可执行文件中寻找。我认为我现在已经得到所需的内容,所以我将此事标记为关闭/解决。 - Tom
我们如何使用--install进行注册? - fiatjaf