Register file extensions / mime types in Linux

LinuxInstallationMimeFile Type

Linux Problem Overview


I'm developing a Linux application that has its own file format. I want my app to open when you double-click on those files.

How can I register a file extension and associate it with my application on Linux? I'm looking for a way that is standard (works with GNOME and KDE based systems) and can be done automatic when my program is installed or run for the first time.

Linux Solutions


Solution 1 - Linux

Use xdg-utils from freedesktop.org Portland.

Register the icon for the MIME type:

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

Create a configuration file (freedesktop Shared MIME documentation):

<?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>

Install the configuration file:

xdg-mime install mytype-mime.xml

This gets your files recognized and associated with an icon. xdg-mime default can be used for associating an application with the MIME type after you get a .desktop file installed.

Solution 2 - Linux

There are two parts to this. You need to register a new file type and then create a desktop entry for your application. The desktop entry associates your application with your new mime type.

I thought that both Gnome and KDE (maybe only 4+?) used the freedesktop shared mime info spec, but I may well be wrong.

Solution 3 - Linux

  1. in linux this is a function of your desktop environment rather than the os itself.
  2. GNOME and KDE have different methods to accomplish this.
  3. There's nothing stopping you from doing it both ways.

Solution 4 - Linux

Try this script: needs:

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

in the current directory:


#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

make sure: FOO binary is there in /usr/bin (or in $PATH)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionamarillionView Question on Stackoverflow
Solution 1 - LinuxskolimaView Answer on Stackoverflow
Solution 2 - LinuxKaiView Answer on Stackoverflow
Solution 3 - LinuxJoel CoehoornView Answer on Stackoverflow
Solution 4 - LinuxfastrizwaanView Answer on Stackoverflow