Registrar extensiones de archivos/tipos mime en Linux
-
09-06-2019 - |
Pregunta
Estoy desarrollando una aplicación Linux que tiene su propio formato de archivo.Quiero que mi aplicación se abra cuando hagas doble clic en esos archivos.
¿Cómo puedo registrar una extensión de archivo y asociarla con mi aplicación en Linux?Estoy buscando una forma que sea estándar (funcione con sistemas basados en GNOME y KDE) y que pueda realizarse automáticamente cuando mi programa se instale o se ejecute por primera vez.
Solución
Usar xdg-utils
de freedesktop.org Portland.
Registre el icono para el tipo MIME:
xdg-icon-resource install --context mimetypes --size 48 myicon-file-type.png x-application-mytype
Cree un archivo de configuración (documentación MIME compartida de freedesktop):
<?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>
Instale el archivo de configuración:
xdg-mime install mytype-mime.xml
Esto hace que sus archivos sean reconocidos y asociados con un ícono. xdg-mime default
se puede utilizar para asociar una aplicación con el tipo MIME después de obtener un .desktop
archivo instalado.
Otros consejos
Hay dos partes en esto.Necesitas registrar un nuevo tipo de archivo y luego cree una entrada de escritorio para su aplicación.La entrada del escritorio asocia su aplicación con su nuevo tipo de mime.
Pensé que tanto Gnome como KDE (¿tal vez solo 4+?) usaban el especificación de información mime compartida de freedesktop, pero puede que me equivoque.
1) en Linux, esto es una función de su entorno de escritorio y no del sistema operativo en sí.
2) GNOME y KDE tienen diferentes métodos para lograr esto.
3) No hay nada que te impida hacerlo en ambos sentidos.
Pruebe este script:necesidades:
1. your application icon -> $APP = FIREFOX.png
2. your mimetype icon -> application-x-$APP = HTML.png
en el directorio actual:
#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
Cerciorarse:El binario FOO está en /usr/bin (o en $PATH)