Mime-Types

如何將新的(自定義)mime 類型與文件關聯(基於文件副檔名)?

  • May 18, 2020

這是如何使用 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。但是,沒有一個。

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

引用自:https://unix.stackexchange.com/questions/565353