无需安装程序/包管理器即可提供 Linux 应用程序图标

无需安装程序/包管理器即可提供 Linux 应用程序图标

背景故事:

我想要:

  1. 以简单 TAR 形式交付应用程序,供用户提取并运行
  2. 使该应用程序具有适当的应用程序图标。

没有包管理器、没有 sudo、没有安装程序脚本。

我看到标准各类文章应用程序图标需要一个.desktop文件,该文件需要可执行文件(呃)和应用程序图标的绝对路径。我还看到 Ubuntu Unity(也许还有其他).desktop支持~/.local/share/applications

Windows 通过将图标嵌入可执行文件来支持此功能。Mac OS X 具有包含图标的应用程序的相对目录结构。

“黑客式”解决方案:

我的“hackish”解决方案是,在应用程序启动时,检测myApp.desktop文件是否存在~/.local/share/applications/,如果不存在,则写入它(包括可执行文件和图标的完整绝对路径),启动一个新的 myApp 进程并退出。

希望新的 myApp 进程能够拾取该应用程序图标。有时是的。

问题:

问题是,我必须等待sleep 2几秒钟才能启动新进程。如果我这样做,图标就会被拾取。如果我不这样做,我的应用程序就没有图标。

我尝试过重新加载 GTK 图标缓存而不是休眠(使用gtk-update-icon-cache /usr/share/icons/hicolor),但是这没有用。

有人知道我该如何避免这种延迟并确保新写入的.desktop文件被拾取吗?(我正在刷新并关闭文件。)或者有比我的黑客解决方案更好的主意吗?

更新:有趣的是,测试一个写入文件的简单脚本.desktop(手动或使用xdg-桌面菜单) 并启动应用程序时,也需要 2 秒的延迟,否则图标不会显示。太有趣了。

答案1

使用gtk_window_set_icon或类似的(有一个 _from_file 变体和 Glade 集成)。

如果没有 root 权限,我认为您无法访问图标缓存,而且正如您所发现的,及时加载桌面文件似乎不是一种可靠的方法。

相关内容