如何将新的(自定义)mime 类型与文件关联(基于文件扩展名)?

如何将新的(自定义)mime 类型与文件关联(基于文件扩展名)?

这是第 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-keysmimetype。你可以在这里看到它:

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

https://gitlab.freedesktop.org/xdg/shared-mime-info/-/blob/6bf9e4ff0fb7eff11a02bd937045bf5dc291841a/data/freedesktop.org.xml.in#L282

或者在您自己的机器上:

/usr/share/mime/packages/freedesktop.org.xml

但是,它不使用*.pubglob 模式,可能是为了避免与 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 文件示例:

https://github.com/apache/tika/blob/0bf11aec86079b8f1ae2f1ea680910ba79665c4f/tika-parsers/src/test/resources/test-documents/testPUBLISHER.pub

您可以在此处使用 git 存储库自行尝试:

https://github.com/nbeaver/custom-pub-file-mimetype

相关内容