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

山X

这是如何使用CLI工具在Linux系统上安装新的(自定义)MIME类型的第2部分

使用上述问题的可接受答案中的步骤,我创建了以下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一起使用。电子应用程序仍然拒绝*.pub使用Kate打开文件。

电子应用程序以前使用Okular。按照xdg-mime default上面显示命令,Okular关联已消失,但是没有任何东西可以代替它电子应用程序现在显示一个KIO对话框,要求我选择要使用的应用程序。(这比强迫我使用错误的应用程序要好,但是这仍然不是正确的行为。Electron应用程序正在寻找其他地方进行文件关联。我想了解这一点。)

.desktop在某个位置缺少所需的文件吗?

另一个想法:经过上述步骤,我相信我现在应该text/x-publickey在中看到的条目/usr/share/applications/mimeinfo.cache但是,没有一个。

纳撒尼尔·比弗(Nathaniel M.

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

但是,它不使用*.pub全局模式,可能是为了避免与MS Publisher格式冲突。一种解决方法是将文件重命名为*.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。这意味着具有mimetypeapplication/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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android-从文件获取MIME类型,无需扩展名

在Linux中注册文件扩展名/ MIME类型

在Windows中将自定义文件扩展名与Java应用程序关联

使用.NET,如何根据文件签名而不是扩展名找到文件的mime类型

Laravel 5-从文件扩展名获取MIME类型

SQL查询带有自定义文件扩展名的平面文件时出错

自定义文件名,同时保留扩展名

如何在CKAN扩展名中自定义authz.py文件?

如何将文件扩展名与电子应用程序关联(多平台)

如何编写和读取具有自定义扩展名的文本文件?

具有多个扩展名的mime类型的Unix文件关联

将文件类型关联到我的vscode扩展名,例如项目文件

读取文件类型扩展名关联列表

如何为特定应用程序关联文件扩展名(而非文件类型)?

您如何将.exe文件扩展名与Windows中的程序相关联?

文件扩展名/ MIME类型/图标/默认应用程序如何关联?

如何将具有MIME类型的文件扩展名与Cheyenne关联?

如何通过文件扩展名确定mime类型?(露比)

vim查找与文件类型关联的所有扩展名

有没有一种方法可以将文件压缩为自定义扩展名?

如何通过文件扩展名获取电子邮件附件的MIME类型?

将新文件扩展名添加到现有(MIME)类型

将Notepad ++自定义文件扩展名设置为普通文本

是否可以基于文件名而不是扩展名来自定义Atom语言识别?

如何将自定义文件类型与自定义可执行文件相关联?

如何将扩展名添加到未知扩展名文件

Spark 使用自定义扩展名写入文件

如何在 MediaWiki 上跳过 .OFT 文件扩展名的 MIME 类型检查

如何为您的 tkinter 程序 python 制作自定义文件扩展名