Привет! Меня зовут Станислав Ермохин, я руководитель группы методического обеспечения в команде КОМПАС-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/
Testman2023
Да уже 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_(Русский)
red_cell
А где в перечисленных вами инструкциях указано, как именовать файл изображения?
По инструкции от Компас понятно, а в вашей нет.