如何找到 *.desktop 文件?

KOV*_*IKO 124 unity launcher .desktop

据我所知,Unity Launcher 中的所有快捷方式都有一个对应的 *.desktop 文件。我有一个没有图标的快捷方式(用于skrooge)。如何找到与此快捷方式对应的 *.desktop 文件,以便为其添加图标?

Oli*_*Oli 153

它可能就在里面,/usr/share/applications/但是如果您想找到.desktop系统上的每个文件,请运行以下命令:

find / -name '*.desktop'
Run Code Online (Sandbox Code Playgroud)

或者

sudo updatedb
locate *.desktop
Run Code Online (Sandbox Code Playgroud)

要查找路径或名称中带有“skrooge”的文件,请在命令中添加一个grep

locate *.desktop | grep -iR "skrooge"
Run Code Online (Sandbox Code Playgroud)

  • `locate -i "*skrooge*.desktop"`。虽然Unity主要在三个地方寻找桌面文件。`~/.local/share/applications`、`/usr/local/share/applications` 和 `/usr/share/applications`。如果在多个地方有同一个命令的桌面文件,它将使用我列出的三个文件中最左边的一个。 (28认同)
  • 这个超级有用!谢谢。请注意,使用“locate *.desktop”帮助我发现“snap”软件包安装中的桌面文件似乎进入“/snap/”和“/var/lib/snapd/desktop/applications/”目录。 (2认同)

fra*_*gos 48

系统将 .desktop 文件存储在/usr/share/applications/. 不幸的是,如果您在 nautilus 中打开该文件夹,则 .desktop 文件将显示为文件中指定的图标以及文件中标出的文件名。您也不能通过单击这些文件并选择编辑来编辑这些文件。

要编辑这些文件,您需要在终端窗口中打开该文件夹。执行ls命令将显示所有 .desktop 文件及其实际名称。找到要更改的 .desktop 后,运行gksudo gedit {file-name}.desktop.

通常的做法是将您创建或编辑的任何 .desktop 文件保存在您的主文件夹中~/.local/share/applications

  • @Malachiasz 实际上,当会话重新启动时,`~/.local/share/applications` 中的 *.desktop 文件会重新加载。因此,注销并重新登录。请注意,这些是特定于该用户的。 (4认同)

Sop*_*rez 24

补充其他答案的一些额外细节

通常,.desktop包的文件将位于/usr/share/applications.

如果你愿意,你可以复制一个~/.local/share/applications并在那里编辑它而不需要 sudo。在项目~/.local/share/applications覆盖匹配项/usr/share/applications/usr/local/share/applications,但只对用户可见。

或者,您可以将编辑后的副本放置/usr/local/share/applications在它会覆盖任何输入的位置,/usr/share/applications同时也对整个系统可见。

请注意,您不应直接编辑.desktop文件/usr/share/applications;当包管理器更新应用程序时,您所做的任何更改都将自动覆盖

这里提取


Ond*_*Mih 19

您可以在环境变量中找到所有包含桌面文件的目录XDG_DATA_DIRS。这些*.desktop文件可以位于applications该变量中每个目录的目录中。例如:

> echo $XDG_DATA_DIRS
/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop
Run Code Online (Sandbox Code Playgroud)

您可以使用此 bash 脚本列出系统使用的所有桌面文件(例如构建面板或应用程序菜单):

for p in ${XDG_DATA_DIRS//:/ }; do 
  find $p/applications -name '*.desktop' 
done
Run Code Online (Sandbox Code Playgroud)

看来桌面文件也可以放在另一个目录中,该目录不在XDG_DATA_DIRS变量中:

  • ~/.local/share/applications

因此,查找*.desktop系统中所有文件的完整脚本是:

DATA_DIRS="$XDG_DATA_DIRS:$HOME/.local/share"
for p in ${DATA_DIRS//:/ }; do
  find $p/applications -name '*.desktop' 
done
Run Code Online (Sandbox Code Playgroud)

我没有找到任何相关文档,但这里有一些有关此环境变量的信息: https: //unix.stackexchange.com/a/531664

  • 这是最好的答案! (4认同)
  • 这缺少 `~/.local/share/applications` 和 `~/var/lib/snapd/desktop/applications` 不是吗? (2认同)

pes*_*chü 7

snap 包的桌面文件可以/var/lib/snapd/desktop/applications//snap/.


jok*_*ker 5

我知道我迟到了,但我有一个比答案更快的解决方案:

find / -iname "*desktop" -type f -not -path "/media*" -exec grep -il skrooge '{}' ';' 2> /dev/null
Run Code Online (Sandbox Code Playgroud)

它更快,因为它不搜索数据安装的文件系统,而且桌面文件很可能位于系统分区中。

此外,更有可能从已接受的答案中找到命令会遗漏的内容。这是因为桌面文件不必包含应用程序名称。该命令实际上搜索每个桌面文件中的文本。