Привет! Меня зовут Станислав Ермохин, я руководитель группы методического обеспечения в команде КОМПАС-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/

Комментарии (3)


  1. Testman2023
    14.11.2024 16:32

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

    Да уже Debian (Bookworm) 12.8

    в Рунете не удалось найти достаточно полного описания, как назначать пользовательские иконки для файлов. Вся информация разрозненная, отрывочная или устаревшая.

    "...Кто ищет - тот всегда найдет..."
    Ярлыки приложений
    https://wiki.archlinux.org/title/Desktop_entries_(Русский)
    XDG MIME Applications
    https://wiki.archlinux.org/title/XDG_MIME_Applications_(Русский)
    xdg-utils
    https://wiki.archlinux.org/title/Xdg-utils_(Русский)


    1. red_cell
      14.11.2024 16:32

      А где в перечисленных вами инструкциях указано, как именовать файл изображения?

      По инструкции от Компас понятно, а в вашей нет.


  1. pechkinkorp
    14.11.2024 16:32

    я вот надеюсь, что иконки файлов компас добавит сам.