如何在Ubuntu Touch应用的.desktop文件中设置应用图标?

我正在学习Ubuntu SDK,并使用Qt Creator创建了一个新的HTML5触摸UI项目。

该项目文件夹有一个.desktop文件。然后我将一个launcher.png添加到我的项目文件夹中。

这是我的.desktop文件:

[Desktop Entry]
Name=myapp
StartupNotify=true
Icon=/usr/share/myapp/launcher.png
MimeType=text/plain;
NoDisplay=true
Comment=something...
Exec=/usr/bin/qmlscene $@ /usr/share/myapp/diaspora-webclient.qml
Terminal=false
Type=Application
X-Ubuntu-Touch=true

现在我按下Ctrl+R来使用qmlscene运行应用程序。应用程序正在运行,但是Unity Launcher中没有显示launcher.png作为应用程序的图标。
我需要运行一个命令来更新更改吗?还是我需要通过应用程序代码将launcher.png移动到/usr/share/myapp/launcher.png

1你需要设置图片的真实路径。为了测试目的,你可以将其设置为开发结构内的路径。请注意,将文件移动到/usr/share目录下会要求你每次输入密码。另一种选择是将图标的副本放在~/.icons目录中。 - edwin
1请确保您有读取该文件的权限。 - Mitch
好的...所以没有任何标准的路径来放置图标吗? - Voidcode
我已经告诉过你了,你可以把它们放在~/.icons文件夹中(仅供测试使用)。 - edwin
1是的,但只是为了测试目的,对吧? - Voidcode
2个回答

你做事情有两个问题。

首先,.desktop 文件是用于安装的应用程序,而不是通过 Ctrl+R 运行的。要安装你的应用程序,你需要打包并安装该软件包。关于如何打包和发布你的应用程序,你可以在 Click App Store 这里 找到更多详细信息。

其次,.desktop 中的路径应该是本地文件,而不是绝对路径。以下是一个 .desktop 文件的示例:

[Desktop Entry]
Name=Tasks
Comment=Your tasks, every device, everywhere.
Exec=qmlscene $@ ubuntu-tasks.qml
Icon=ubuntu-tasks.png
Terminal=false
Type=Application
X-Ubuntu-Touch=true

有几点需要注意:
- `Exec`行应该采用以下格式:`qmlscene $@ `,只需提供主QML文件的名称,不需要目录信息。
- `Icon`行应该采用以下形式:`Icon=`,只需提供文件名(包含扩展名),不需要目录信息。
现在我提供的信息是为了在Ubuntu Touch设备上通过打包成Click软件包来运行您的应用程序。Click软件包适用于Ubuntu Touch,并且目前无法与Unity桌面集成。因此,如果您想要能够从Dash/Launcher运行应用程序并看到其图标,您需要做两件事:
1. 将`.desktop`文件复制到`~/.local/share/applications`目录,并使用绝对路径指向您的图标,而不仅仅是文件名(就像打包应用程序时那样)。
2. 将图标复制到`~/.icons`目录。

太棒了!看起来,*.png文件的宽度应该与其高度相同,并且任何一边都不超过512像素(至少对我来说,普通的png图像无法正确调整大小作为图标;将其缩小并扩展为正方形(512x512像素)有所帮助)。 - Igor
2为了使其在Ubuntu 20.04上正常工作,我需要将.png文件复制到~/.local/share/icons/hicolor/256x256/apps文件夹中,而不是指出的位置。 - Mariano Ruiz
我可以通过创建文件夹~/.icons并将我的图标的PNG文件复制到那里来解决丢失图标的问题。 - Vitaly Sazanovich

桌面版本:在我的Ubuntu 20.04桌面上,Squeezeplay的图标没有显示出来,无论是在搜索窗口还是在gnome3侧边栏中都没有显示出来。
解决方案以上对我有效,它在搜索对话框中显示了一个图标,但在gnome侧边栏中没有显示出来。
StartupWMClass=jive(通过在cli中使用xprop WM_CLASS点击打开的应用程序找到)添加到答案这里中的桌面文件中完成了任务,现在我可以在任何地方看到提供的图标文件(png文件格式,最大尺寸512x512,我选择了256x256)!桌面文件生成如下:
$ vim ~/.local/applications/squeezeplay.desktop
[Desktop Entry]
Name=Squeezeplay
StartupNotify=true
MimeType=text/plain;
Comment=https://sourceforge.net/projects/lmsclients/files/squeezeplay/linux/ The Linux version of Squeezelite-X (similar) working with LMS
Exec=/opt/squeezeplay/bin/squeezeplay.sh
Icon=squeezeplay-icon2-256x256.png
Terminal=false
Type=Application
StartupNotify=true
StartupWMClass=jive
Categories=Utility;Radio;

就像解释的那样,图标存储在名为~/.icons的目录中,并且使用Icon=中给定的名称!感谢@iBelieve和@Puspam!