Де зберігаються асоціації файлів?


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, щоб побачити нові асоціації в дії?
Редсандро

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/… , приголомшливий проект.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

23

Щоб доповнити відмінну відповідь dv3500ea, я хотів би додати трохи інформації про те, що відбувається, коли ви змінюєте свої асоціації.

У той час як defaults.list (який ви можете знайти, ввівши "locate 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 / додатках. Її мета - додавання або видалення асоціацій mime з додатків. nautilus пише ~ / .local / share / applications / mimeapps.list, коли користувач вносить зміни в діалоговому вікні "Відкрити з".


1
Але, використовуючи Ubuntu 12.04, я розумію, що mimeapps.listце перекреслено записами в defaults.list.
гонорар

1
14.04, я зміг s / vlc / mplayer / в моїх ~/.local/share/applications/mimeapps.list, і запущені процеси, такі як pcmanfm, підняли зміни без перезавантаження. (mplayer.desktop просто працює 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;". :)
користувач31389

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
for глобальна асоціація:

/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не існує.
guntbert

Дякую, що вказали на це, проте користувач сказав в Ubuntu або інших системах Linux, це означає, що це відповідь і на його питання: P.
IdontCare AboutReputationPoints

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-mime


1

Freedesktop.org (раніше називався X Desktop Group, тому абревіатура "XDG") - це група, яка в даний час керує X стандартами на кшталт цього ( докладніше в Wikipedia ).

У відповіді warvariuc вже згадується використання 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.