Регистрация расширений / типов файлов MIME в Linux

Я разрабатываю приложение для Linux, которое имеет свой собственный формат файла. Я хочу, чтобы мое приложение открывалось, когда вы дважды щелкаете по этим файлам.

Как я могу зарегистрировать расширение файла и связать его с моим приложением в Linux? Я ищу способ, который является стандартным (работает с системами на основе GNOME и KDE) и может быть сделан автоматически, когда моя программа установлена ​​или запущена в первый раз.

5 ответов

Решение

Использование xdg-utils от freedesktop.org Портленд.

Зарегистрируйте иконку для типа MIME:

xdg-icon-resource install --context mimetypes --size 48 myicon-file-type.png x-application-mytype

Создайте файл конфигурации (документация freedesktop Shared MIME):

<?xml version="1.0"?>
 <mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
   <mime-type type="application/x-mytype">  
   <comment>A witty comment</comment>
   <comment xml:lang="it">Uno Commento</comment>
   <glob pattern="*.myapp"/>
  </mime-type>
 </mime-info>

Установите файл конфигурации:

xdg-mime install mytype-mime.xml

Это позволяет распознать ваши файлы и связать их с иконкой. xdg-mime default может использоваться для связывания приложения с типом MIME после получения .desktop файл установлен.

Здесь есть две части. Вам необходимо зарегистрировать новый тип файла, а затем создать запись на рабочем столе для вашего приложения. Запись на рабочем столе связывает ваше приложение с вашим новым типом пантомимы.

Я думал, что и Gnome, и KDE (может быть, только 4+?) Использовали спецификацию freedesktop shared mime info, но я вполне могу ошибаться.

1) в linux это функция вашего рабочего стола, а не сама ОС.
2) GNOME и KDE имеют разные методы для достижения этой цели.
3) Ничто не мешает вам делать это в обе стороны.

Попробуйте этот скрипт: needs:

1. your application icon -> $APP               = FIREFOX.png 
2. your mimetype icon    -> application-x-$APP = HTML.png

в текущем каталоге:


#BASH SCRIPT: Register_my_new_app_and_its_extension.sh
APP="FOO"
EXT="BAR"
COMMENT="$APP's data file"

# Create directories if missing
mkdir -p ~/.local/share/mime/packages
mkdir -p ~/.local/share/applications

# Create mime xml 
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<mime-info xmlns=\"http://www.freedesktop.org/standards/shared-mime-info\">
    <mime-type type=\"application/x-$APP\">
        <comment>$COMMENT</comment>
        <icon name=\"application-x-$APP\"/>
        <glob pattern=\"*.$EXT\"/>
    </mime-type>
</mime-info>" > ~/.local/share/mime/packages/application-x-$APP.xml

# Create application desktop
echo "[Desktop Entry]
Name=$APP
Exec=/usr/bin/$APP %U
MimeType=application/x-$APP
Icon=$APP
Terminal=false
Type=Application
Categories=
Comment=
"> ~/.local/share/applications/$APP.desktop

# update databases for both application and mime
update-desktop-database ~/.local/share/applications
update-mime-database    ~/.local/share/mime

# copy associated icons to pixmaps
cp $APP.png                ~/.local/share/pixmaps
cp application-x-$APP.png  ~/.local/share/pixmaps

убедитесь, что бинарный файл FOO находится в /usr/bin (или в $PATH)

Это все существующие ответы, объединенные, дополненные и исправленные в один сценарий bash.

      #!/bin/bash
set -e # stop on error

APP=my-app
EXT=my-app
COMMENT=Comment
EXEC=/usr/bin/my-app
LOGO=./logo.png

xdg-icon-resource install --context mimetypes --size 48 $LOGO application-x-$APP

echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<mime-info xmlns=\"http://www.freedesktop.org/standards/shared-mime-info\">
    <mime-type type=\"application/x-$APP\">
        <comment>$COMMENT</comment>
        <icon name=\"application-x-$APP\"/>
        <glob pattern=\"*.$EXT\"/>
    </mime-type>
</mime-info>" > $APP-mime.xml

xdg-mime install $APP-mime.xml
rm $APP-mime.xml
update-mime-database $HOME/.local/share/mime

echo "[Desktop Entry]
Name=$APP
Exec=$EXEC %U
MimeType=application/x-$APP
Icon=application-x-$APP
Terminal=false
Type=Application
Categories=
Comment=$COMMENT
"> $APP.desktop
desktop-file-install --dir=$HOME/.local/share/applications $APP.desktop
rm $APP.desktop
update-desktop-database $HOME/.local/share/applications

xdg-mime default $APP.desktop application/x-$APP

Другие вопросы по тегам