AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 565353
Accepted
MountainX
MountainX
Asked: 2020-02-02 18:35:19 +0800 CST2020-02-02 18:35:19 +0800 CST 2020-02-02 18:35:19 +0800 CST

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

  • 772

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

使用上述问题的已接受答案中的步骤,我创建了以下 mime-type 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 打开文件。

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

我是否.desktop在某个位置缺少所需的文件?

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

xdg-open mime-types
  • 1 1 个回答
  • 1999 Views

1 个回答

  • Voted
  1. Best Answer
    Nathaniel M. Beaver
    2020-05-19T11:56:50+08:002020-05-19T11:56:50+08:00

    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 格式冲突。一种解决方法是将文件重命名为例如*.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

    • 1

相关问题

  • mime 设置的配置文件

  • 如何将午夜指挥官设置为默认文件管理器?

  • 如何为特定文件引发系统本机 OpenWith 对话框?

  • xdg-open 阻塞直到生成的进程被杀死

  • 单击 MIME 类型执行脚本以打开文件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve