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