这是第 2 部分如何使用 CLI 工具在 Linux 系统上安装新的(自定义)mime 类型?
使用上述问题中接受的答案中的步骤,我创建了以下 mime 类型 mx-publickey.xml
<?xml version="1.0" encoding="utf-8"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type="text/x-publickey">
<comment>Custom type for public key files (plain text)</comment>
<glob-deleteall/>
<glob pattern="*.pub"/>
</mime-type>
</mime-info>
我使用以下命令在系统范围内安装了它:
# xdg-mime install --mode system mx-publickey.xml
我添加了所需的图标:
xdg-icon-resource install --context mimetypes --size 256 x-publickey-icon.png text-x-publickey
然后我测试了它。我的 '*.pub` 文件仍然具有旧的关联:
$ xdg-mime query filetype id_rsa_test.pub
text/plain
$ xdg-mime query default text/plain
org.kde.kate.desktop
需要执行哪些额外步骤才能将“*.pub”文件与我的新 mime 类型相关联?
编辑:
我执行了以下步骤,但*.pub
默认情况下,Electron 应用程序中的 Kate 仍未打开公钥文件。
# xdg-mime default org.kde.kate.desktop text/x-publickey
# xdg-mime query default text/x-publickey
org.kde.kate.desktop
$ xdg-mime query default text/x-publickey
org.kde.kate.desktop
接下来,我使用 GUI 工具(KDE 系统设置 > 应用程序 > 文件关联)并将*.pub
公钥文件与 Kate 相关联。Electron 应用程序仍然拒绝*.pub
使用 Kate 打开文件。
Electron 应用程序之前使用 Okular。执行上面所示的命令后xdg-mime default
,奥库拉协会已经消失,但没有任何东西可以取代它。 Electron 应用程序现在会显示一个 KIO 对话框,要求我选择要使用的应用程序。 (这比强迫我使用错误的应用程序要好,但这仍然不是正确的行为。看来 Electron 应用程序正在其他地方寻找文件关联。我想了解这一点。)
我是否.desktop
在某个位置丢失了所需的文件?
text/x-publickey
另一个想法:经过上述步骤后,我相信我现在应该看到in 的条目/usr/share/applications/mimeinfo.cache
。然而,没有一个。
答案1
这shared-mime-info
存储库
已经指定了application/pgp-keys
mimetype。你可以在这里看到它:
<mime-type type="application/pgp-keys">
<comment>PGP keys</comment>
<acronym>PGP</acronym>
<expanded-acronym>Pretty Good Privacy</expanded-acronym>
<sub-class-of type="text/plain"/>
<generic-icon name="text-x-generic"/>
<magic priority="50">
<match type="string" value="-----BEGIN PGP PUBLIC KEY BLOCK-----" offset="0"/>
<match type="string" value="-----BEGIN PGP PRIVATE KEY BLOCK-----" offset="0"/>
<match type="big16" value="0x9501" offset="0"/>
<match type="big16" value="0x9500" offset="0"/>
<match type="big16" value="0x9900" offset="0"/>
<match type="big16" value="0x9901" offset="0"/>
</magic>
<glob pattern="*.skr"/>
<glob pattern="*.pkr"/>
<glob pattern="*.asc" weight="10"/>
<glob pattern="*.pgp"/>
<glob pattern="*.gpg"/>
<glob pattern="*.key"/>
</mime-type>
或者在您自己的机器上:
/usr/share/mime/packages/freedesktop.org.xml
但是,它不使用*.pub
glob 模式,可能是为了避免与 MS Publisher 格式发生冲突。一种解决方法是将文件重命名为eg*.asc
文件。但让我们继续,假设重命名文件不是一个选项。这是我们需要的 mimeinfo 文件(注意它必须被命名pgp-keys.xml
):
$ cat pgp-keys.xml
<?xml version="1.0"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type="application/pgp-keys">
<comment>PGP keys</comment>
<acronym>PGP</acronym>
<expanded-acronym>Pretty Good Privacy</expanded-acronym>
<sub-class-of type="text/plain"/>
<generic-icon name="text-x-generic"/>
<magic priority="10">
<match value="-----BEGIN PGP PUBLIC KEY BLOCK-----" type="string" offset="0"/>
</magic>
<glob weight="10" pattern="*.pub"/>
</mime-type>
</mime-info>
“神奇”部分的优点是它会在文件的开头查找该字符串,然后根据它是否匹配来确定 mimetype。这意味着具有 mimetype 的文件application/vnd.ms-publisher
仍然可以具有该.pub
文件扩展名,并且与也具有该文件扩展名的公钥一起相对和谐地存在.pub
。为此,我们必须安装 mimeinfo 文件。
要为单个用户安装它:
xdg-mime install --mode user pgp-keys.xml
update-mime-database ~/.local/share/mime
要在系统范围内安装它:
sudo xdg-mime install --mode system pgp-keys.xml
sudo /usr/bin/update-mime-database /usr/share/mime
我已经使用此处的示例公钥测试了结果:
https://www.intel.com/content/www/us/en/security-center/pgp-public-key.html
以及此处的 MS Publisher 文件示例:
您可以在此处使用 git 存储库自行尝试: