我正在开发一个具有自己的文件格式的Linux应用程序。我希望当您双击这些文件时打开我的应用程序。
如何注册文件扩展名并将其与 Linux 上的应用程序关联?我正在寻找一种标准的方法(适用于基于 GNOME 和 KDE 的系统),并且可以在我的程序首次安装或运行时自动完成。
使用来自
freedesktop.org 波特兰的
xdg-utils
。
注册 MIME 类型的图标:
xdg-icon-resource install --context mimetypes --size 48 myicon-file-type.png x-application-mytype
创建配置文件(freedesktop 共享 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
文件后,.desktop
可用于将应用程序与 MIME 类型关联起来。
这有两个部分。您需要注册新的文件类型,然后为您的应用程序创建桌面条目。桌面条目将您的应用程序与新的 mime 类型相关联。
我认为 Gnome 和 KDE(也许只有 4+?)都使用了 freedesktop 共享 mime 信息规范,但我很可能是错的。
1) 在 Linux 中,这是桌面环境的功能,而不是操作系统本身的功能。
2) GNOME 和 KDE 有不同的方法来实现这一点。
3) 没有什么可以阻止你双向进行。
尝试这个脚本:需要:
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
请注意,此解决方案适用于“本地用户”安装。这是系统范围安装的方法:
set -e
install -D -m 0755 $APP /usr/bin/$APP
install -D -m 0644 assets/$APP.png /usr/share/icons/hicolor/48x48/mimetypes/application-x-$APP.png
install -D -m 0644 assets/$APP-mime.xml /usr/share/mime/packages/
install -D -m 0644 assets/$APP.desktop /usr/share/applications/
umask 0022
# Depending on your distribution, also run:
update-mime-database /usr/share/mime
update-desktop-database /usr/share/applications
gtk-update-icon-cache -f -t /usr/share/icons/hicolor