如何查找特定应用程序的“.desktop”文件位置

Por*_*ine 6 configuration ftp default-programs .desktop image-viewers

编辑:这不是重复的,因为这个问题与另一个问题的问题相反。在这里我们知道什么是应用程序,我们想找到它的.desktop文件,它也可以位于非标准位置。而另一个问题是关于.desktop可以放置文件的位置。


我想在默认图像查看器而不是浏览器中打开来自 FTP 服务器的图像,所以我想知道 Ubuntu 中默认图像查看器桌面文件的路径。我尝试了以下方法:

cd -- /usr/share/applications
/usr/share/applications

$ find . -name '*.desktop' | grep image
./gnome-disk-image-mounter.desktop
./gnome-disk-image-writer.desktop

$ find . -name '*.desktop' | grep view
./calibre-ebook-viewer.desktop
./calibre-lrfviewer.desktop
./evince-previewer.desktop
./shotwell-viewer.desktop
./okularApplication_ghostview.desktop
./gcr-viewer.desktop
./gnome-info-overview-panel.desktop
./org.gnome.font-viewer.desktop
./paraview.desktop
Run Code Online (Sandbox Code Playgroud)

但我还是找不到。是否还有其他存储桌面文件的位置?

van*_*ium 6

.desktop按内容搜索启动器

仅文件名desktop可能无法透露足够的信息。基本方法是搜索系统所有文件的内容.desktop以找到相关的文件。

例如,图像查看器的显示方式与Image Viewer应用程序概述中相同。Gnome Shell 从文件中获取了该标签.desktop。要查找.desktop包含该字符串的文件(或多个文件),请执行

find / -name '*.desktop' -exec grep -H 'Image Viewer' {} \; 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

这用于find查找.desktop系统上的所有文件。对于每个找到的文件,grep都会调用 ,它会在文件中搜索字符串,在此示例中为Image Viewer。这2>/dev/null可以抑制在没有 root 权限的情况下搜索根驱动器时不可避免地出现的权限错误。

桌面启动器搜索顺序

系统上可能存在多个.desktop同名的启动器。使用哪一个取决于它所在的位置。

系统首先搜索.desktop本地~/.local/share/applications目录中的文件,然后搜索applications变量包含的目录下存在的目录$XDG_DATA_DIRS

例如XDG_DATA_DIRS可以显示的内容如下

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

系统首先搜索~/.local/share/applications,然后/usr/share/ubuntu/applications等。.desktop在此搜索路径中或系统上其他位置具有相同名称的启动器不被使用。


Win*_*nix 5

使用locate命令进行更快、更通用的搜索:

$ locate *image*desktop
/usr/share/app-install/desktop/gimagereader:gimagereader-gtk.desktop
/usr/share/app-install/desktop/gnome-disk-utility:gnome-disk-image-mounter.desktop
/usr/share/app-install/desktop/gnome-disk-utility:gnome-disk-image-writer.desktop
/usr/share/app-install/desktop/imagej:imagej.desktop
/usr/share/app-install/desktop/imagemagick-6.q16:display-im6.q16.desktop
/usr/share/app-install/desktop/imagemagick:display-im6.desktop
/usr/share/app-install/desktop/imagevis3d:imagevis3d.desktop
/usr/share/app-install/desktop/kimagemapeditor:kde4__kimagemapeditor.desktop
/usr/share/app-install/desktop/simple-image-reducer:simple-image-reducer.desktop
/usr/share/app-install/desktop/trimage:trimage.desktop
/usr/share/applications/gnome-disk-image-mounter.desktop
/usr/share/applications/gnome-disk-image-writer.desktop
/usr/share/applications/screensavers/tessellimage.desktop
Run Code Online (Sandbox Code Playgroud)

locate可以在几秒钟内搜索数百万个文件,而这需要find很多分钟:

$ time find / -name '*image*.desktop'
real    0m52.563s
user    0m6.271s
sys     0m9.002s

$ time locate *image*desktop
real    0m0.705s
user    0m0.693s
sys     0m0.012s
Run Code Online (Sandbox Code Playgroud)

请注意如何grep从原始方法中删除并find修改命令。

缺点locate是数据库每天更新。如果您刚刚安装了今天要搜索的应用程序,您首先需要运行:

sudo updatedb
Run Code Online (Sandbox Code Playgroud)