Mime Policy
Материал из ALT Linux Wiki
(→Почтовые клиенты) |
(→Приоритет приложений) |
||
(33 промежуточные версии не показаны) | |||
Строка 1: | Строка 1: | ||
- | {{ | + | {{span|font-size: 180%|}} |
- | | | + | {{Policy |
- | | | + | |since_branch=6.0 |
- | | | + | |responsible=Igor Vlasenko (viy) |
}} | }} | ||
- | == | + | |
+ | == Общие сведения == | ||
+ | |||
+ | [http://en.wikipedia.org/wiki/Internet_media_type Internet media type] ранее называемый MIME type (Multipurpose Internet Mail Extensions) | ||
+ | является стандартом наименования различных типов файлов. | ||
+ | MIME идентификатор состоит из двух частей: основного типа и подтипа, разделенных косой чертой. | ||
+ | Узнать MIME идентификатор файла можно командой {{cmd|xdg-mime}}: | ||
+ | xdg-mime query filetype article1.tex | ||
+ | text/x-tex | ||
+ | |||
+ | == Поддержка форматов файлов == | ||
+ | |||
+ | Ранее каждый файловый менеджер имел свои собственные несовместимые настройки для запуска приложений при открытии файлов определенного типа. | ||
+ | С появлением стандарта [http://standards.freedesktop.org freedesktop.org] эти настройки вынесены из приложений в отдельные | ||
+ | базы данных. стандарты [http://standards.freedesktop.org freedesktop.org] поддерживаются GNOME с 2.2x, KDE, начиная с 4.x, | ||
+ | XFCE, ... | ||
+ | |||
+ | По стандарту настройки для запуска приложений при открытии файлов определенного типа формируются следующим образом: | ||
+ | |||
+ | # С помощью базы данных MIME-типов из пакета {{pkg|shared-mime-info}} определяется MIME-тип файла, например, {{cmd|video/mp4}}. Приложения могут расширять базу данных MIME-типов, например, игра может определить собственный MIME-тип для формата карт местности, чтобы связать этот MIME-тип со своим редактором карт. Подробнее см. http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html | ||
+ | # Приложения, способные обрабатывать данные, должны указывать MIME-типы этих данных в ключе MimeType=... .desktop файла соответствующего приложения. При этом они также должны указать в ключе Exec=... один из параметров %U, %u, %F, %f, описывающий тип принимаемого аргумента. Подробнее см. http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html | ||
+ | # Приложение (Файловый менеджер) с помощью {{pkg|shared-mime-info}} определяет MIME-тип файла, читает из базы данных .desktop файлов список приложений, могущих обработать данный MIME-тип. Обычно этот список можно увидеть в контекстном меню файла в подпункте "Открыть с помощью". | ||
+ | |||
+ | {| class="standard sortable" | ||
+ | |- | ||
+ | !параметр||значение | ||
+ | |- | ||
+ | |%U|| может быть несколько аргументов, путь к файлу или URL, например file:/usr/ | ||
+ | |- | ||
+ | |%u|| может быть только один аргумент, путь к файлу или URL | ||
+ | |- | ||
+ | |%F|| может быть несколько аргументов, пути к файлам | ||
+ | |- | ||
+ | |%f|| может быть только один аргумент, путь к файлу | ||
+ | |} | ||
+ | === Замечания === | ||
+ | * .desktop файл приложения также используется для показа приложения в меню. Однако иногда для обработки MIME-типа необходимо вызвать приложение со специальными опциями, либо же приложение не предназначено для показа в меню (например, при простом запуске сразу же завершает свою работу или не создает окна). В таком случае удобно разделить роль пункта меню и роль обработчика MIME-типов на разные .desktop файлы. В те .desktop файлы, которые не предназначены для меню и используются только как обработчики, нужно добавить (см. [http://standards.freedesktop.org/menu-spec/menu-spec-latest.html menu-spec]) | ||
+ | NoDisplay=true | ||
+ | * проверить, поддерживает ли приложение аргументы типа URL, можно, заменив путь к файлу на URL вида file:/path/. | ||
+ | |||
+ | === Пример === | ||
+ | Хотим добавить приложение oqtplayer из пакета {{pkg|openquicktime-utils}} как обработчик *.MOV файлов | ||
+ | (MIME-тип video/quicktime). Для этого достаточно создать {{path|/usr/share/applications/oqtplayer.desktop}} | ||
+ | [Desktop Entry] | ||
+ | Type=Application | ||
+ | Name=oqtplayer | ||
+ | GenericName=quicktime player | ||
+ | Comment=Play quicktime movies and songs | ||
+ | Icon=multimedia_section.png | ||
+ | Exec=oqtplayer %f | ||
+ | Terminal=false | ||
+ | NoDisplay=true | ||
+ | MimeType=video/quicktime; | ||
+ | приложение oqtplayer не предназначено для самостоятельного запуска (завершает свою работу, если файл не указан), поэтому здесь | ||
+ | NoDisplay=true | ||
== Поддержка протоколов == | == Поддержка протоколов == | ||
Строка 15: | Строка 69: | ||
$ mailprogram протокол:test@altlinux.org | $ mailprogram протокол:test@altlinux.org | ||
Если протокол {{prg|mailto:}} поддерживается приложением, | Если протокол {{prg|mailto:}} поддерживается приложением, | ||
- | в его .desktop файл следует добавить MimeType=x-scheme-handler/mailto | + | в его .desktop файл следует добавить |
+ | MimeType=x-scheme-handler/mailto; | ||
=== Файловые менеджеры === | === Файловые менеджеры === | ||
Строка 22: | Строка 77: | ||
{{cmd|trash:}} | {{cmd|trash:}} | ||
{{cmd|network:}} | {{cmd|network:}} | ||
- | {{cmd| | + | и mime-тип {{cmd|inode/directory}} (каталог). |
- | Это можно проверить, обрабатываются ли эти протоколы как аргументы командной строки: | + | Это можно проверить, посмотрев, обрабатываются ли эти протоколы как аргументы командной строки: |
$ filemanager computer: | $ filemanager computer: | ||
$ filemanager trash: | $ filemanager trash: | ||
$ filemanager network: | $ filemanager network: | ||
- | |||
для каждого поддерживаемого протокола нужно добавить в ключ MimeType .desktop файла | для каждого поддерживаемого протокола нужно добавить в ключ MimeType .desktop файла | ||
mime-тип "обработчик протокола", соответственно | mime-тип "обработчик протокола", соответственно | ||
Строка 33: | Строка 87: | ||
x-scheme-handler/trash | x-scheme-handler/trash | ||
x-scheme-handler/network | x-scheme-handler/network | ||
- | x-scheme-handler/ | + | таким образом, рекомендуемый вид для filemanager.desktop |
+ | ... | ||
+ | Exec=filemanager %U | ||
+ | MimeType=x-scheme-handler/computer;x-scheme-handler/trash;x-scheme-handler/network;inode/directory; | ||
+ | |||
+ | == Приоритет приложений == | ||
+ | |||
+ | Если более чем одно приложение может обработать данный MIME тип, то возникает проблема, которое из них выбрать по умолчанию. | ||
+ | Без настроек выбор текущего обработчика связан с порядком установки пакетов. | ||
+ | Например, ожидалось, что для просмотра видео будет запущен видеоплеер, а был запущен видео редактор. | ||
+ | Или был запущен видеоплеер среды KDE, но в среде GNOME. | ||
+ | Или запущенный видеоплеер не соответствовал желаниям пользователя. | ||
+ | |||
+ | Есть два типа файлов настроек приоритета, отличающихся форматом: | ||
+ | applications/defaults.list | ||
+ | applications/mimeapps.list | ||
+ | |||
+ | Примеры таких файлов можно посмотреть в пакете {{pkg|altlinux-mime-defaults}}. | ||
+ | В этих файлах MIME типам сопоставляются ''desktop ids''. ''desktop id'' -- это относительный путь к .desktop файлу относитедьно {{path|applications/}}, | ||
+ | у которого слеши заменены на дефисы. К примеру, {{path|/usr/share/applications/gimp.desktop}} имеет ''desktop id'' {{path|gimp.desktop}} а {{path|/usr/share/applications/kde/ktorrent.desktop}} имеет ''desktop id'' {{path|kde-ktorrent.desktop}}. | ||
+ | |||
+ | В {{path|defaults.list}} можно указать только одно приложение, а в {{path|mimeapps.list}} -- список предпочтений. | ||
+ | Для домашних настроек пользователя рекомендуется использовать {{path|mimeapps.list}}, так как он имеет более гибкие возможности по настройке, а {{path|defaults.list}} к тому же не поддерживается {{pkg|kde4libs}}. | ||
+ | |||
+ | Места, где DE ищут эти файлы, регулируются стандартом [http://standards.freedesktop.org/basedir-spec/latest/ XDG Base Directory Specification]. | ||
+ | Для этого обходится список каталогов, состоящий из каталога $XDG_DATA_HOME (по умолчанию {{path|~/.local/share}}) и списка каталогов | ||
+ | $XDG_DATA_DIRS (по умолчанию {{path|/usr/share}}, для GNOME, например, {{path|/usr/share/gnome:/usr/share}}). | ||
+ | В каждом из каталогов ищутся файлы {{path|applications/{defaults,mimeapps}.list}}. Для каждого MIME типа приложением по умолчанию выбирается первый найденный реально существующий ''desktop id''. | ||
+ | |||
+ | Пакет {{pkg|altlinux-mime-defaults}} предоставляет набор достаточно разумных умолчаний для дистрибутива в целом. | ||
+ | Предпочтения пользователя необходимо вписывать в {{path|~/.local/share/applications/mimeapps.list}}. | ||
+ | |||
+ | Что касается настроек, специфических для конкретного DE, то freedesktop-совместимый DE должен хранить свои настройки | ||
+ | в {{path|/usr/share/<DE>/applications/}} и экспортировать этот путь в переменной {{term|XDG_DATA_DIRS}} в своем стартовом скрипте {{cmd|/usr/bin/start_DE_}} | ||
+ | XDG_DATA_DIRS=/usr/share/<DE>:${XDG_DATA_DIRS:-/usr/share} | ||
+ | export XDG_DATA_DIRS | ||
+ | |||
+ | Составлять и сопровождать <DE>-специфические файлы {{path|applications/{defaults,mimeapps}.list}} достаточно хлопотно. | ||
+ | Рекомендуемый метод порождения таких файлов -- автогенерация из базы данных repocop в пакете {{pkg|altlinux-mime-defaults}}. | ||
+ | |||
+ | == Ресурсы == | ||
+ | * [http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html Desktop Entry Specification] | ||
+ | * [http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html Shared MIME-info Database] | ||
+ | * [http://git.altlinux.org/people/viy/packages/?p=altlinux-mime-defaults.git;a=summary altlinux-mime-defaults.git] |
Текущая версия на 11:14, 30 августа 2011
Содержание |
Общие сведения
Internet media type ранее называемый MIME type (Multipurpose Internet Mail Extensions) является стандартом наименования различных типов файлов. MIME идентификатор состоит из двух частей: основного типа и подтипа, разделенных косой чертой. Узнать MIME идентификатор файла можно командой xdg-mime:
xdg-mime query filetype article1.tex text/x-tex
Поддержка форматов файлов
Ранее каждый файловый менеджер имел свои собственные несовместимые настройки для запуска приложений при открытии файлов определенного типа. С появлением стандарта freedesktop.org эти настройки вынесены из приложений в отдельные базы данных. стандарты freedesktop.org поддерживаются GNOME с 2.2x, KDE, начиная с 4.x, XFCE, ...
По стандарту настройки для запуска приложений при открытии файлов определенного типа формируются следующим образом:
- С помощью базы данных MIME-типов из пакета shared-mime-info определяется MIME-тип файла, например, video/mp4. Приложения могут расширять базу данных MIME-типов, например, игра может определить собственный MIME-тип для формата карт местности, чтобы связать этот MIME-тип со своим редактором карт. Подробнее см. http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html
- Приложения, способные обрабатывать данные, должны указывать MIME-типы этих данных в ключе MimeType=... .desktop файла соответствующего приложения. При этом они также должны указать в ключе Exec=... один из параметров %U, %u, %F, %f, описывающий тип принимаемого аргумента. Подробнее см. http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html
- Приложение (Файловый менеджер) с помощью shared-mime-info определяет MIME-тип файла, читает из базы данных .desktop файлов список приложений, могущих обработать данный MIME-тип. Обычно этот список можно увидеть в контекстном меню файла в подпункте "Открыть с помощью".
параметр | значение |
---|---|
%U | может быть несколько аргументов, путь к файлу или URL, например file:/usr/ |
%u | может быть только один аргумент, путь к файлу или URL |
%F | может быть несколько аргументов, пути к файлам |
%f | может быть только один аргумент, путь к файлу |
Замечания
- .desktop файл приложения также используется для показа приложения в меню. Однако иногда для обработки MIME-типа необходимо вызвать приложение со специальными опциями, либо же приложение не предназначено для показа в меню (например, при простом запуске сразу же завершает свою работу или не создает окна). В таком случае удобно разделить роль пункта меню и роль обработчика MIME-типов на разные .desktop файлы. В те .desktop файлы, которые не предназначены для меню и используются только как обработчики, нужно добавить (см. menu-spec)
NoDisplay=true
- проверить, поддерживает ли приложение аргументы типа URL, можно, заменив путь к файлу на URL вида file:/path/.
Пример
Хотим добавить приложение oqtplayer из пакета openquicktime-utils как обработчик *.MOV файлов (MIME-тип video/quicktime). Для этого достаточно создать /usr/share/applications/oqtplayer.desktop
[Desktop Entry] Type=Application Name=oqtplayer GenericName=quicktime player Comment=Play quicktime movies and songs Icon=multimedia_section.png Exec=oqtplayer %f Terminal=false NoDisplay=true MimeType=video/quicktime;
приложение oqtplayer не предназначено для самостоятельного запуска (завершает свою работу, если файл не указан), поэтому здесь
NoDisplay=true
Поддержка протоколов
Почтовые клиенты
Почтовый клиент должен поддерживать протокол mailto:. Это можно проверить, запустив почтовый клиент с командной строки:
$ mailprogram протокол:test@altlinux.org
Если протокол mailto: поддерживается приложением, в его .desktop файл следует добавить
MimeType=x-scheme-handler/mailto;
Файловые менеджеры
freedesktop-совместимый файловый менеджер должен поддерживать протоколы computer: trash: network: и mime-тип inode/directory (каталог). Это можно проверить, посмотрев, обрабатываются ли эти протоколы как аргументы командной строки:
$ filemanager computer: $ filemanager trash: $ filemanager network:
для каждого поддерживаемого протокола нужно добавить в ключ MimeType .desktop файла mime-тип "обработчик протокола", соответственно
x-scheme-handler/computer x-scheme-handler/trash x-scheme-handler/network
таким образом, рекомендуемый вид для filemanager.desktop
... Exec=filemanager %U MimeType=x-scheme-handler/computer;x-scheme-handler/trash;x-scheme-handler/network;inode/directory;
Приоритет приложений
Если более чем одно приложение может обработать данный MIME тип, то возникает проблема, которое из них выбрать по умолчанию. Без настроек выбор текущего обработчика связан с порядком установки пакетов. Например, ожидалось, что для просмотра видео будет запущен видеоплеер, а был запущен видео редактор. Или был запущен видеоплеер среды KDE, но в среде GNOME. Или запущенный видеоплеер не соответствовал желаниям пользователя.
Есть два типа файлов настроек приоритета, отличающихся форматом:
applications/defaults.list applications/mimeapps.list
Примеры таких файлов можно посмотреть в пакете altlinux-mime-defaults. В этих файлах MIME типам сопоставляются desktop ids. desktop id -- это относительный путь к .desktop файлу относитедьно applications/, у которого слеши заменены на дефисы. К примеру, /usr/share/applications/gimp.desktop имеет desktop id gimp.desktop а /usr/share/applications/kde/ktorrent.desktop имеет desktop id kde-ktorrent.desktop.
В defaults.list можно указать только одно приложение, а в mimeapps.list -- список предпочтений. Для домашних настроек пользователя рекомендуется использовать mimeapps.list, так как он имеет более гибкие возможности по настройке, а defaults.list к тому же не поддерживается kde4libs.
Места, где DE ищут эти файлы, регулируются стандартом XDG Base Directory Specification. Для этого обходится список каталогов, состоящий из каталога $XDG_DATA_HOME (по умолчанию ~/.local/share) и списка каталогов $XDG_DATA_DIRS (по умолчанию /usr/share, для GNOME, например, /usr/share/gnome:/usr/share). В каждом из каталогов ищутся файлы applications/{defaults,mimeapps}.list. Для каждого MIME типа приложением по умолчанию выбирается первый найденный реально существующий desktop id.
Пакет altlinux-mime-defaults предоставляет набор достаточно разумных умолчаний для дистрибутива в целом. Предпочтения пользователя необходимо вписывать в ~/.local/share/applications/mimeapps.list.
Что касается настроек, специфических для конкретного DE, то freedesktop-совместимый DE должен хранить свои настройки в /usr/share/<DE>/applications/ и экспортировать этот путь в переменной XDG_DATA_DIRS в своем стартовом скрипте /usr/bin/start_DE_
XDG_DATA_DIRS=/usr/share/<DE>:${XDG_DATA_DIRS:-/usr/share} export XDG_DATA_DIRS
Составлять и сопровождать <DE>-специфические файлы applications/{defaults,mimeapps}.list достаточно хлопотно. Рекомендуемый метод порождения таких файлов -- автогенерация из базы данных repocop в пакете altlinux-mime-defaults.