Как стать автором
Обновить
103.22
АСКОН
Разработчик инженерного ПО и ИТ-интегратор

Добавление пользовательских иконок для типов MIME в Linux

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров2.1K

Привет! Меня зовут Станислав Ермохин, я руководитель группы методического обеспечения в команде КОМПАС-3D.

По ходу подготовки версии КОМПАС-3D для Linux мы встречаемся с «очевидными и невероятными» ситуациями. Решением одной из них решили поделиться. Тем более, что в Рунете не удалось найти достаточно полного описания, как назначать пользовательские иконки для файлов. Вся информация разрозненная, отрывочная или устаревшая. 

Задача

КОМПАС-3D во время своей работы позволяет создавать собственные документы:

  • Деталь

  • Сборка

  • Чертеж

  • Фрагмент

  • Текстовый

  • Спецификация

    и другие специальные документы.

Каждый из типов документов имеет свою иконку, когда мы просматриваем файлы в Проводнике.

Кроме этого, система работает со множеством собственных служебных файлов (стили линий, стили оформлений документов, пользовательские меню и др.), у которых тоже свои иконки.

Это мы смотрели в Windows. А вот, например, как файл .a3d (КОМПАС-Сборка) отображается в моём файловом менеджере в Debian 12.6.

Иконка совсем не отражает сути содержимого файла. А наши пользователи в Windows привыкли к отображению иконок предопределённых файлов, и мы не хотим их лишать этой возможности.

Решение

Во-первых, делаем расширение файла известным для ОС.

А это делается созданием файла .xml в папке -

/usr/share/mime/packages

Для каждого типа файла, к которому мы хотим добавить определение и значок, необходимо добавить соответствующий xml-файл. Давайте посмотрим на файл m3d.xml, который я создал для демонстрации:

<?xml version="1.0" encoding="UTF-8"?>

<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
   
  <mime-type type="model/m3d">
   
    <comment>КОМПАС-Деталь</comment>
       
     <glob pattern="*.m3d"/>
   
    </mime-type>

 </mime-info>

Важная часть здесь:

  • <mime-type type="model/m3d"> - это MIME-группа и MIME-тип, который совместной образуют общий MIME-тип

  • <glob pattern="*.m3d"/> - указатель расширения файла.

Обновим базу данных MIME, чтобы присвоить определённые нами типы MIME файла, заканчивающиеся на указанные нами расширения. Это можно сделать с помощью команды -

sudo update-mime-database /usr/share/mime

Это сгенерирует папку с нашим определением типа MIME xml в /usr/share/mime/

Примерно так это выглядит у меня:

[root@vbox mime]# tree model
model
├── 3mf.xml
├── gltf-binary.xml
├── gltf+json.xml
├── iges.xml
├── m3d.xml

Последний шаг — подготовка иконки .svg и подключение её к нашему типу MIME.

И здесь очень важно следовать синтаксису наименования файла, который доложен строить так <mimetype-group>-<mimetype>.svg , где:

  • <mimetype-group> - тип группы, в нашем случае model

  • разделитель "дефис"

  • <mimetype> - тип файла, в нашем случае m3d

Получился файл model-m3d.svg, который мы копируем в /usr/share/icons/hicolor/scalable/mimetypes/. Иконки кладём в hicolor , потому что они применяются ко всем темам, которые не имеют своей иконки с таким же именем и не надо мучить темы.

И напоследок нам нужно обновить базу данных иконок. Для этого вводим в Debian/Ubuntu или их аналогах -

sudo update-icon-caches /usr/share/icons/*

в Red Hat/Fedora или их аналогах -

sudo gtk-update-icon-cache /usr/share/icons/*

Исходник решения найден в статье https://luca-junge.de/posts/adding-custom-icons-for-mime-types-on-linux/

Теги:
Хабы:
Всего голосов 16: ↑15 и ↓1+17
Комментарии3

Публикации

Информация

Сайт
ascon.ru
Дата регистрации
Дата основания
Численность
1 001–5 000 человек
Местоположение
Россия