Как делает Ubuntu, или какие-либо другие системы Linux хранят ассоциации файлов?
Есть ли некоторые /etc/asscociations
файл или что-то?
Я знаю, что могу щелкнуть правой кнопкой по файлу и изменить его через "открытый с", но мне просто любопытно знать, как он хранится внутренне.
Файловый менеджер (Наутилус, по умолчанию) использует тип 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 и, приложения в 'Открывают With' список. Значение по умолчанию определяется в другом месте. Файл /usr/share/applications/defaults.list
предоставляет информацию для системных значений по умолчанию. Если Вы не выбираете иначе, это приложения, использованные, когда Вы 'Открываете' файл.
К приложению dv3500ea's превосходный ответ я хотел бы добавить некоторую информацию о том, что происходит, когда Вы изменяете свои ассоциации.
В то время как defaults.list (который можно найти путем ввода, 'определяют местоположение defaults.list') предоставляет список приложений, которые связаны с каждым типом MIME, любые настройки, которые Вы делаете, хранятся в Вашем корневом каталоге в ~/.local/share/applications/mimeapps.list. Таким образом, если Вы добавляете или удаляете ассоциации или изменяете ассоциацию по умолчанию, этот файл обновляется.
Настольное Руководство Системного администрирования GNOME по http://library.gnome.org/admin/system-admin-guide/stable/, кажется, не обсуждает mimeapps.list, но я нашел следующее описание на http://live.gnome.org/SysAdminGuideUpdate:
mimeapps.list расположен в $XDG_DATA_DIRS/applications. Его цель состоит в том, чтобы добавить или удалить ассоциации пантомимы из приложений. наутилус пишет ~/.local/share/applications/mimeapps.list, когда пользователь вносит изменения в, "Открывают With" диалоговое окно.
Создайте файл 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
Я узнал тип пантомимы Truecrypt следующим выполнением этой команды:
file --mime-type -b <any truecrypt filename>
Я нашел эту ссылку относительно ассоциации по умолчанию, это могло бы быть полезно. 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
Раздел [Added Associations] используется для определения предпочтенных приложений (по умолчанию) в уменьшающемся предпочтении. что означает, что desktopfile1 является самым предпочтительным, и desktopfileN меньше всего предпочтен.
Раздел [Removed Associations] используется для явного удаления любых ранее наследованных ассоциаций.
Я нашел, что в моей системе (Debian Jessie) там также a ~/.config/mimeapps.list
это имело ассоциацию, которую я случайно создал для открытия определенного типа файла с gedit. Ни один из стандартных способов исправить это (параметры настройки приложения по умолчанию, Thunar, открытый со свойством), не отразил это, но gedit был приложением по умолчанию.
Я смог удалить строку из ~/.config/mimeapps.list
и теперь соответствующее приложение открывает файл.
Я смог установить ассоциацию как это:
xdg-mime default xnview.desktop image/jpeg
Можно также удалить ассоциации и сделать другие вещи: man xdg-mime
Я не должен был работать sudo update-desktop-database
.
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
автоматически отредактирует те файлы.
Freedesktop.org (ранее названный X Desktop Group, таким образом сокращение "XDG") является группой, в настоящее время управляющей X стандартами как это (узнайте больше в Википедии).
ответ warvariuc уже упоминает использование xdg-пантомимы как:
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 для мест, которые могли бы использоваться для переопределения defauts.
Необходимо знать тип пантомимы файла, который Вы хотите изменить, это - ассоциация.
Также все ассоциации могут быть обработано изменены в использовании командной строки:
xdg-пантомима
На Ubuntu 18.04 я нашел порядок очередности быть следующим образом от самого сильного до самого слабого:
~/.local/share/applications/defaults.list
/usr/share/applications/defaults.list
~/.config/mimeapps.list
("Открытый С Другим Приложением" обновит это),~/.local/share/applications/mimeapps.list
mimeinfo.cache
реестр совместимых приложений, которые сгенерированы от .desktop
файлы, существующие в /usr/share/applications
и /usr/local/share/applications
, и может быть повторно создан с помощью update-desktop-database
./etc/gnome/defaults.list