Nautilus 中文件的 MIME 类型和图标错误

Nautilus 中文件的 MIME 类型和图标错误

我正在使用 PyQt5 在 Python 中编写 GUI 应用程序,主应用程序名为main_app.py。尽管只是一个 Python 脚本,并file -i main_app.py返回正确的 MIME 类型text/x-script.python,但 Nautilus 中显示的图标不是 Python 脚本的图标,并且“属性”选项卡报告的 MIME 类型是text/x-qml屏幕截图 1

更令人困惑的是,检查/etc/mime.types文件时,没有text/x-qml!的条目。屏幕截图 2


在对文件进行了一些操作后,我发现此行为实际上取决于文件的内容。我的第一个非注释行是

from custom_parser import Parser
import html
import json
from PyQt5 import Qt, QtCore
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys

如果我删除所有 PyQt5 库的导入,Nautilus 会报告正确的图标和 MIME 类型。

最后一件可能很重要的事情:我有Qt 设计器之前安装在我的电脑上(通过sudo apt install qttools5-dev qttools5-dev-tools),但随后以apt同样的方式删除了它。我正在运行 Ubuntu 22.04.2 和 Python 3.10。


因此,我的问题是:如何防止 Nautilus 以这种方式更改 MIME 类型?我不需要支持这种额外的text/x-qmlMIME 类型,因此如果我可以从某个配置文件中删除它就可以了。

答案1

感谢@steeldriver 的评论和另一个答案我找到了一个解决方案。显然 Qt Designer 没有正确卸载自身,并text/x-qml在文件中留下了其 MIME 类型的规范/usr/share/mime/packages/freedesktop.org.xml

<mime-type type="text/x-qml">
  <comment>Qt Markup Language file</comment>
  ...
  <magic priority="80">
    <match type="string" value="/bin/env qml" offset="2:16"/>
    <match type="string" value="import Qt" offset="0:3000">
      <match type="string" value="{" offset="9:3009"/>
    </match>
    <match type="string" value="import Qml" offset="0:3000">
      <match type="string" value="{" offset="9:3009"/>
    </match>
  </magic>
  <glob pattern="*.qml"/>
  <glob pattern="*.qmltypes"/>
  <glob pattern="*.qmlproject"/>
</mime-type>

(请注意该<match type="string" value="import Qt" offset="0:3000">行,它可能是用于标识我的脚本的行,因为text/x-qml它与我的导入语句的第 4 行相匹配)。我只是从文件中删除了该条目,重新编译了 MIME 数据库,sudo update-mime-database -V /usr/share/然后一切都恢复正常。

相关内容