Где хранятся ассоциации файлов?

Как Ubuntu или любые другие системы Linux хранят ассоциации файлов?

Есть ли некоторые /etc/asscociations файл или что-то?

Я знаю, что могу щелкнуть правой кнопкой мыши файл и изменить его с помощью "открыть с помощью", но мне просто интересно узнать, как он хранится внутри.

11 ответов

Решение

Файловый менеджер (по умолчанию Nautilus) использует MIME-тип файла, чтобы определить, с какой программой открыть его. Когда приложение установлено, оно может указывать, какие типы MIME оно может открывать, и команду, используемую для открытия файлов в файле.desktop, который находится в /usr/share/applications, Этот файл используется для меню, ярлыков на рабочем столе и т. Д.

Например, GIMP имеет следующий файл.desktop:

[Desktop Entry]
Version=1.0
Type=Application
Name=GNU Image Manipulation Program
GenericName=Image Editor
Comment=Create images and edit photographs
Exec=gimp-2.7 %U
TryExec=gimp-2.7
Icon=gimp
Terminal=false
Categories=Graphics;2DGraphics;RasterGraphics;GTK;
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=GIMP
X-GNOME-Bugzilla-Component=General
X-GNOME-Bugzilla-Version=2.7.2
X-GNOME-Bugzilla-OtherBinaries=gimp-2.7
StartupNotify=true
MimeType=application/postscript;application/pdf;image/bmp;image/g3fax;image/gif;image/x-fits;image/pcx;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-sgi;image/x-tga;image/x-xbitmap;image/x-xwindowdump;image/x-xcf;image/x-compressed-xcf;image/tiff;image/jpeg;image/x-psp;image/png;image/x-icon;image/x-xpixmap;image/svg+xml;application/pdf;image/x-wmf;image/jp2;image/jpeg2000;image/jpx;image/x-xcursor;

Увидеть MimeType поле - здесь перечислены поддерживаемые типы MIME. Exec поле указывает системе использовать команду gimp-2.7 %U, заменив "%U" файлами для открытия. (Обратите внимание, что GIMP 2.7 - это версия, которую я установил из PPA, поэтому она выше текущей версии в репозиториях Ubuntu).

Когда пакет приложения установлен, система извлекает эти данные MIME-типа в более легкодоступную базу данных, потому что поиск в каждом файле.desktop займет слишком много времени, если это будет выполняться при каждом открытии файла.

Это сообщает системе, какие приложения можно использовать для этого типа MIME, и предоставляет приложения в списке "Открыть с помощью". Значение по умолчанию определено в другом месте. Файл /usr/share/applications/defaults.list предоставляет информацию о системных значениях по умолчанию. Если вы не выберете иное, это те приложения, которые используются при открытии файла.

В дополнение к отличному ответу dv3500ea я хотел бы добавить некоторую информацию о том, что происходит, когда вы меняете свои ассоциации.

Хотя defaults.list (который вы можете найти, набрав "locate defaults.list") предоставляет список приложений, связанных с каждым типом MIME, все ваши настройки хранятся в вашем домашнем каталоге, в ~/.local/ доля / приложения / mimeapps.list. Поэтому, если вы добавляете, удаляете ассоциации или изменяете ассоциации по умолчанию, этот файл обновляется.

Руководство по администрированию системы рабочего стола GNOME по адресу http://library.gnome.org/admin/system-admin-guide/stable/, по-видимому, не обсуждает mimeapps.list, но я нашел следующее описание на http://live.gnome.org/SysAdminGuideUpdate:

mimeapps.list находится в $XDG_DATA_DIRS/application. Его цель - добавить или удалить ассоциации MIME из приложений. nautilus пишет ~/.local/share/ Applications / mimeapps.list, когда пользователь вносит изменения в диалоговом окне "Открыть с помощью".

Я обнаружил, что в моей системе (Debian Jessie) также есть ~/.config/mimeapps.list у него была ассоциация, которую я случайно создал, чтобы открыть файл определенного типа с помощью gedit. Ни один из стандартных способов исправить это (настройки приложения по умолчанию, свойство Thunar, открытое с помощью свойства) не отразило это, но gedit было приложением по умолчанию.

Я был в состоянии удалить строку из ~/.config/mimeapps.list и теперь правильное приложение открывает файл.

Я был в состоянии установить ассоциацию как это:

xdg-mime default xnview.desktop image/jpeg

Вы также можете удалять ассоциации и делать другие вещи: man xdg-mime

Мне не нужно было бежать sudo update-desktop-database,

В Ubuntu 18.04 я обнаружил, что порядок старшинства следующий: от сильнейшего к слабому:

  1. ~/.local/share/applications/defaults.list
  2. /usr/share/applications/defaults.list
  3. ~/.config/mimeapps.list ("Открыть с другим приложением" будет обновлять это)
  4. ~/.local/share/applications/mimeapps.list
  5. Первый встреченный матч в mimeinfo.cache реестр совместимых приложений, которые генерируются из .desktop файлы присутствуют в /usr/share/applications а также /usr/local/share/applications и может быть восстановлено с помощью update-desktop-database,
  6. (Никогда не использовался) /etc/gnome/defaults.list

Я нашел эту ссылку относительно ассоциации по умолчанию, это может быть полезно. https://wiki.archlinux.org/index.php/Default_Applications
для глобальной ассоциации:

/usr/share/applications/mimeapps.list

по ассоциации пользователей:

~/.local/share/applications/mimeapps.list

Синтаксис следующий:

[Added Associations]
mimetype=desktopfile1;desktopfile2;...;desktopfileN
...
[Removed Associations]
mimetype=desktopfile1;desktopfile2;...;desktopfileN

Раздел[Добавленные ассоциации] используется для указания предпочтительных (по умолчанию) приложений в порядке уменьшения предпочтения. это означает, что desktopfile1 является наиболее предпочтительным, а desktopfileN наименее предпочтительным.
Раздел[Удаленные ассоциации] используется для явного удаления любых ранее унаследованных ассоциаций.

Создать файл truecrypt.desktop в ~/.local/share/applications со следующими строками:

[Desktop Entry]
Encoding=UTF-8
Type=Application
Icon=
Exec=/usr/bin/truecrypt %U
Name=truecrypt
Comment=manage truecrypt volumes

затем отредактируйте файл ~/.local/share/applications/mimeapps.list и добавьте следующую строку:

application/octet-stream=truecrypt.desktop

Я обнаружил MIME-тип Truecrypt, выполнив следующую команду:

file --mime-type -b <any truecrypt filename>

mimeapps.listпуть поиска

Другие упоминали этот файл, но никто не объяснил его местонахождение точно.

Стандарт freedesktop.org гласит по адресу https://specifications.freedesktop.org/mime-apps-spec/mime-apps-spec-1.0.html:

Порядок поиска для этого файла следующий:

$XDG_CONFIG_HOME/$desktop-mimeapps.list user overrides, desktop-specific (for advanced users)
$XDG_CONFIG_HOME/mimeapps.list             user overrides (recommended location for user configuration GUIs)
$XDG_CONFIG_DIRS/$desktop-mimeapps.list sysadmin and ISV overrides, desktop-specific
$XDG_CONFIG_DIRS/mimeapps.list             sysadmin and ISV overrides
$XDG_DATA_HOME/applications/$desktop-mimeapps.list  for completeness, deprecated, desktop-specific
$XDG_DATA_HOME/applications/mimeapps.list             for compatibility, deprecated
$XDG_DATA_DIRS/applications/$desktop-mimeapps.list    distribution-provided defaults, desktop-specific
$XDG_DATA_DIRS/applications/mimeapps.list              distribution-provided defaults

а затем значения по умолчанию для этих переменных среды приведены по адресу https://specifications.freedesktop.org/basedir-spec/basedir-spec-0.6.html:

  • $XDG_DATA_HOME: $HOME/.local/share
  • $XDG_CONFIG_HOME: $HOME/.config
  • $XDG_DATA_DIRS: нет, добавлено в XDG_DATA_HOME
  • $XDG_CONFIG_DIRS: нет, добавлено в XDG_CONFIG_HOME

Старые версии Ubuntu могут не проверять ~/.configтак что обязательно попробуйте ~/.local/share также.

Команды как:

 xdg-settings set default-web-browser chromium-browser.desktop
 xdg-settings get default-web-browser

автоматически отредактирует эти файлы.

https://freedesktop.org/ (ранее назывался X Desktop Group, то есть аббревиатура "XDG") - это группа, которая в настоящее время придерживается таких стандартов X ( подробнее об этом в Википедии).

В ответе Варвариука уже упоминается использование xdg-mime:

xdg-mime default xnview.desktop image/jpeg

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

Я взял вышеуказанную команду и назначил ее каждому из типов MIME, контролируемых программами просмотра изображений, а затем создал новый image-viewer.desktop путем клонирования одного из них (это необязательно, вы можете просто повторно использовать свой любимый). Затем я вручную проверил, что ни один из типов MIME не будет несовместим с моим новым предпочтительным приложением. Наконец, я установил это приложение по умолчанию для всех типов MIME других приложений:

sed '/^MimeType=/!d; s///; s/;/\n/g' \
  /usr/share/applications/{ristretto,geeqie,gthumb}.desktop |sort -u \
  |xargs xdg-mime default image-viewer.desktop

Это исследует .desktop файлы для каждого из зрителей ( Ristretto, Geeqie и GThumb в моем случае), извлекает определение MIME (которому предшествует MimeType= затем содержит список, разделенный точкой с запятой), удаляет (предварительно сопоставленную) метку предисловия и разбивает список на одну запись в строке. sort -u затем удаляет лишние строки, затем они передаются xdg-mime установить новые значения по умолчанию.

(Если вы хотите проверить это перед запуском, измените xargs в xargs echo и он напечатает полученную команду вместо ее запуска.)

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

Для всех пользователей:

/usr/share/applications/defaults.list

У каждого пользователя есть файл конфигурации для переопределения этих значений по умолчанию:

~ /.Config / mimeapps.list

см. также https://specifications.freedesktop.org/mime-apps-spec/mime-apps-spec-1.0.1.html для мест, которые могут быть использованы для переопределения значений по умолчанию.

Вы должны знать MIME-тип файла, для которого вы хотите изменить ассоциацию.

Также все ассоциации могут быть обработаны-изменены в командной строке с помощью:

XDG-мим

Я добавляю это как ответ, а не комментарий, поскольку я говорил об этом все утро, и другие могут счесть это важным аспектом ассоциаций файлов в Linux.

Бесплатная спецификация рабочего стола

Как указано в ссылках, спецификация Free Desktop описывает, как файлы используются для определения того, какие приложения открывают какие типы файлов.

В Wiki ArchLinux также есть несколько отличных ссылок, ссылки на которые также приведены ниже.

Другие ответы посвящены этому достаточно подробно.

«Скрытые» и «неотображаемые» записи.

Чтобы перейти к сути этого ответа, вы, возможно, не заметили, что файл записи вашего рабочего стола (<application>.desktopфайл обычно находится в/usr/share/applications) может иметь строку, в которой говорится, чтоHidden=TrueилиNoDisplay=True.

«Скрытые» записи

«Скрытый» не означает просто невидимый. Это означает «удалено» или то же самое, что и «просто нет». Если ваша запись на рабочем столе «Скрытая», это не только похоже на удаление, но и агрессивные файловые менеджеры (такие как QtFM) могут удалить ее из вашего файла при запуске.

Если у вас возникли проблемы, просто удалите строку «Скрытая», и ваши проблемы могут быть решены.

Записи «NoDisplay»

Что ж, спецификация Free Desktop очень ясно и ясно описывает «NoDisplay», но оказывается, что не все приложения могут быть такими ясными.

«NoDisplay» означает «не включать приложение в меню», но соблюдайте его и используйте запись для запуска, даже в качестве обработчика по умолчанию, даже если она не отображается в меню. Для этого существуют реальные варианты использования, поэтому предусмотрена функция «NoDisplay».

Не все приложения видимо это понимают. Некоторые файловые менеджеры рассматривают параметр «NoDisplay» как «Скрытый» и затем даже удаляют запись о вашем приложении из файлов , как если бы он принадлежал только им, не сообщая вам об этом, как если бы вы пользователь Windows или что-то в этом роде и заплатили только за него. ОС. Но это даже не правильное поведение.

Обходные пути и решения

  1. Проверьте записи на рабочем столе на наличие вызывающих беспокойство приложений.
  2. Обязательно удалите все записи «Hidden=True», если приложение используется.
  3. В качестве обходного пути удалите «NoDisplay=True» из вашей записи, приложения могут работать лучше.
  4. Прочтите другие ответы на этот вопрос; Я не дублировал их контент
  5. В крайнем случае возьмите мастер-копию предпочитаемого вами илиdefaults.listфайл, а затем удалите все остальные, включаяmimeapps.cache

Очевидно, что спецификация Free Desktop могла бы работать немного лучше, если бы приложения действительно использовали ее, а также если бы они позволяли пользователям использовать ее для себя в соответствии с принципами Linux, а не перезаписывать.mimeapps.list, правильно или неправильно, по прихоти, не сообщая об этом пользователю.

Рекомендации

Другие вопросы по тегам