Как я могу найти файлы *.desktop?

Насколько мне известно, все ярлыки в Unity Launcher имеют соответствующий файл *.desktop. У меня есть один короткий путь (для скрудж), у которого нет значка. Как я могу найти файл *.desktop, соответствующий этому ярлыку, чтобы я мог добавить к нему значок?

Он, вероятно, сидит в /usr/share/applications/ но если вы хотите найти все .desktop файл в системе запустите это:

find / -name '*.desktop'

или

sudo updatedblocate *.desktop

Чтобы найти файлы с "skrooge" в их пути или имени, добавьте grep к команде:

locate *.desktop | grep -iR "skrooge"

Система хранит файлы .desktop в /usr/share/applications/. К сожалению, если вы откроете эту папку в nautilus, файлы .desktop появятся со значком, указанным в файле, и с именем файла, вызываемым внутри файла. Вам также не будет разрешено редактировать эти файлы, нажав на них и выбрав пункт Изменить.

Чтобы отредактировать эти файлы, вам необходимо открыть эту папку в окне терминала. Выполняя ls команда покажет все файлы .desktop с их фактическими именами. Когда вы найдете файл .desktop, который хотите изменить, запустите gksudo gedit {file-name}.desktop.

Обычно все файлы .desktop, которые вы создаете или редактируете, хранятся в вашей домашней папке ~/.local/share/applications.

Некоторые дополнительные сведения в дополнение к другим ответам:

Типично, .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 напрямую; любые внесенные вами изменения будут автоматически перезаписывается когда приложение обновляется менеджером пакетов.

Извлеченный из здесь

Файлы рабочего стола пакетов snap можно найти в /var/lib/snapd/desktop/applications/ и ниже /snap/.

Я знаю, что опаздываю на вечеринку, но у меня есть более быстрое решение, чем то, которое принято в качестве ответа:

find / -iname "*desktop" -type f -not -path "/media*" -exec grep -il skrooge '{}' ';' 2> /dev/null

Это быстрее, потому что он не выполняет поиск в файловых системах, подключенных к данным, и, скорее всего, файл рабочего стола находится в системном разделе.

Более того, с большей вероятностью можно найти то, что команда из принятого ответа пропустила бы. Это связано с тем, что файлы рабочего стола не обязательно должны содержать имя приложения. Эта команда фактически выполняет поиск текста в каждом файле рабочего стола.

Вы можете найти все каталоги с файлами рабочего стола в переменной окружения XDG_DATA_DIRS. Файлы *.desktop могут находиться в applications каталог в каждом из каталогов в этой переменной. Например.:

> echo $XDG_DATA_DIRS/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop

Вы можете использовать этот скрипт bash для составления списка всех файлов рабочего стола, используемых системой (например, для создания панели или меню приложений).:

for p in ${XDG_DATA_DIRS//:/ }; do   find $p/applications -name '*.desktop' done

Я не нашел никакой документации для этого, но здесь есть некоторая информация об этой переменной окружения: https://unix.stackexchange.com/a/531664

На самом деле я сейчас не знаю, какой файл .desktop вступает в силу. Мое лучшее предположение заключается в том, что из https://wiki .archlinux.org/index.php/Desktop_entries , чтобы создать подобный сценарий и запустить его:

#!/bin/sh# try to find the effective desktop file# (there seems to be no documented standard for this)use_if_desktop_file () {  if [ -r "$1" ] &&     [ "$(xdg-mime query filetype "$1")" = application/x-desktop ]; then       echo "$1"       exit  fi}for d in ~/.local/share/applications /usr/local/share/applications \         /usr/share/applications; do  use_if_desktop_file "$d/$1"  use_if_desktop_file "$d/$1.desktop"done# no file foundexit 1