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


67

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

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

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

Ответы:


67

Файловый менеджер (по умолчанию 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предоставляет информацию о системных значениях по умолчанию. Если вы не выберете иное, эти приложения используются при открытии файла.


7
После изменения типов MIME в /usr/share/applications .desktopфайлах существует ли команда для повторного создания этой базы данных MIME, чтобы увидеть новые ассоциации в действии?
Redsandro

12
Да. sudo update-desktop-databaseСм. Jarrpa.net/2011/10/28/…
NoBugs

Более подходящим местом для локальных изменений является /usr/local/share/applications. Я думаю, что GTK выглядит там тоже по умолчанию. Это происходит в моей системе, но оно было обновлено (не переустановлено) начиная с Ubuntu 7.04 или около того.
Питер Кордес

2
Ubuntu, похоже, следует freedesktop.org: Standard.freedesktop.org/mime-apps-spec/… , отличный проект.
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

23

В дополнение к отличному ответу 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, когда пользователь вносит изменения в диалоговом окне «Открыть с помощью».


1
Но, используя Ubuntu 12.04, я понимаю, что mimeapps.listон перекрывается записями в defaults.list.
feeela

1
14 апреля я смог ~/.local/share/applications/mimeapps.listзапустить s / vlc / mplayer / , и запущенные процессы, такие как pcmanfm, восприняли изменения без перезапуска. (mplayer.desktop просто запускает mplayer. Я полагаю, у меня был один из старых установок mplayer в / usr / local. IDK, MimeType=list;нужен ли он или нет.
Питер Кордес

Точнее, mimeapps.listможет быть в любом месте по следующему пути поиска: Характеристики.freedesktop.org
mime-apps-spec/…

18

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

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


2
Спасибо, вы случайно помогли мне исправить Firefox, открыв все в Gedit. В openSUSE 13.2 я удалил строку с «application / octet-stream = org.gnome.gedit.desktop;». :)
user31389

3
начиная с Ubuntu 15.04 пользовательские модификации также хранятся в ~/.config/mimeapps.list.
DJCrashdummy

2
Точнее, mimeapps.listможет быть в любом месте по следующему пути поиска: Характеристики.freedesktop.org
mime-apps-spec/…

8

Я нашел эту ссылку относительно ассоциации по умолчанию, это может быть полезно. 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 наименее предпочтительным. Раздел
[Удаленные ассоциации] используется для явного удаления любых ранее унаследованных ассоциаций.


1
Это происходит с сайта archlinux , не обязательно относится к Ubuntu, /usr/share/applications/mimeapps.listне существует.
Гюнтберт

Спасибо за указание на это, однако пользователь сказал в Ubuntu или других системах Linux, это означает, что это тоже ответ на его вопрос: P.
IdontCareAboutReputationPoints

5
Этот ответ совершенно нормально, если вы замените mimeapps.desktopнаdefaults.desktop
szx

8

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

xdg-mime default xnview.desktop image/jpeg

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

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


7

Создайте файл 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>

Хороший ответ, потому что он работает для тех, кто использует kde, но имеет несколько gtk-родных программ, таких как firefox.
naught101

5

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

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


2

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

/usr/share/applications/defaults.list

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

~ / .Config / mimeapps.list

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

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

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

XDG-мим


1

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файл (вы можете использовать существующий). Я сделал этот дополнительный шаг, чтобы, когда я неизбежно изменил свою привязанность между программами просмотра изображений, мне просто нужно было изменить этот файл.


1

В 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.