所以我不得不卸载苯甲酸 版本的期刊并从中构建来源(带有修改)。现在 .xoj 文件会自动使用 KDE 的存档管理器 Ark 打开,当用户从 Dolphin 的右键菜单中选择“属性”时,这些文件会被识别为“Gzip 存档”类型:(
之前,.xoj 文件会使用 Xournal 打开,并被正确识别。)尽管存在以下所有情况,但这种情况仍然存在:
1) 复制源包附带的这些文件:
-xournal.xml
复制到 /usr/share/mime/packages/
-xournal.desktop
复制到 /usr/share/applications/
-x-xoj.desktop
复制到 /usr/share/mimelnk/application/
2)将该行添加
application/x-xoj=xournal.desktop;
到 ~/.local/share/applications/mimeapps.list
3)application/x-xoj
在文件关联系统设置
(具有适当内容):(
还请注意application/x-gzip
仅指定.gz 扩展名:
。)
4) 按照建议复制xournal.xml
到/usr/share/mime/application
这里
5)sudo update-mime-database /usr/share/mime
6)重新启动计算机
编辑并添加:
7)[右键点击一个.xoj文件]-->打开方式-->其他...-->[选择‘Xournal’],勾选‘记住此类文件的应用程序关联’也是无效的。
編輯結束
这是 Kubuntu 12.04。
那么,我遗漏了什么?
编辑添加
我发现file --mime-type [filename]
和mimetype [filename]
命令会产生不同的结果,例如这个问题:
archelon@ingelrayok:~/Documents/xournal$ file --mime-type 2014-02-22-Note-02-09.xoj
2014-02-22-Note-02-09.xoj: application/x-gzip
archelon@ingelrayok:~/Documents/xournal$ mimetype 2014-02-22-Note-02-09.xoj
2014-02-22-Note-02-09.xoj: application/x-xoj
但是,/etc/mime.types 中没有条目application/x-gzip
(该命令据称从中file
获取信息);而且,事实上,根据该文件开头的注释,那里也不应该有,其部分内容如下:
注意:诸如“gzip”、“bzip”和“compress”之类的压缩方案实际上不是“mime 类型”。它们是“编码”,因此必须不是此文件中有条目来映射其扩展名。编码文件的“mime 类型”是指已编码的数据的类型,而不是编码的类型。
该评论还说
用户可以根据需要在其主目录中创建“.mime.types”文件来添加自己的类型。其中包含的定义将优先于此处列出的定义。
目前没有这样的文件。我的主目录中有一些文件(我没有创建)显然与命令的输出有关mimetype
;这些文件包括
~/.local/share/mime/application/x-xoj.xml
、
~/.local/share/mime/packages/application-x-xoj.xml
和
~/.local/share/mime/types
仅包含文本的文件application/x-xoj
。
事实上,目录 ~/.local/share/mime/ 和其中的所有内容都具有相同的时间戳(昨晚 22:19),因此可能是由同一过程生成的。
在查看了模仿类型和文件,我决定检查环境变量$XDG_DATA_HOME
和$XDG_DATA_DIRS
,显然前者使用了它们,而后者没有。但我不知道如何报告环境变量的值,所以我尝试了cat $XDG_DATA_HOME
,它放值(为零)而不是报告它。 编辑以添加:或者我起初是这么认为的;实际上它已经取消设置,正如我们将看到的。正确的命令是echo $XDG_DATA_HOME
,正如我从阅读环境变量中了解到的那样这里。然后我发现$XDG_DATA_DIRS
设置为/usr/share/default:/usr/local/share/:/usr/share/
;其中第一个不存在。我认为这并不重要,但无论如何我运行了命令
XDG_DATA_HOME=$HOME/.local/share
和
XDG_DATA_DIRS=/usr/local/share/:/usr/share/
符合标准。我怀疑这一切都不会有什么不同,但我现在要尝试再次重新启动(尽管我认为那些环境变量无论如何都会自动重置)。下次编辑:是的;事实上变量XDG_DATA_HOME
现在又为空了。
无论如何,底线似乎是 KDE 使用的是file
正在使用的功能,而不是正在mimetype
使用的功能。如果我理解正确的话,这意味着它使用的是 magic 而不是 MIME 类型。我现在怀疑 magic 是造成整个问题的原因。
新编辑
所以file
手册页似乎是说这些是基线魔法文件:
/usr/share/misc/magic.mgc 默认编译的魔法列表。/usr/share/misc/magic
包含默认魔法文件的目录。
(我有这些;/usr/share/misc/magic 是指向空文件夹 /usr/share/file/magic 的链接,而 /usr/share/misc/magic.mgc 是指向文件 /usr/share/file/magic.mgc 的链接 - 后者是一个 2.1 MB 的文件,充满了胡言乱语)和以下文本:
识别这些文件的信息
(即“文件在文件开头附近的特定位置存储有一个‘魔术数字’”)
是从 /etc/magic 和已编译的 magic 文件 /usr/share/misc/magic.mgc 读取的, 如果已编译的文件不存在,
则从目录 /usr/share/misc/magic 中的文件读取。此外, 如果 $HOME/.magic.mgc 或 $HOME/.magic 存在,则会优先使用 系统 magic 文件。
(我已strace
按照建议向这里) 我的系统上既不存在 $HOME/.magic.mgc 也不存在 $HOME/.magic ;但是,由于 xoj 文件可能恰好包含导致文件被神奇地识别为 的胡言乱语application/x-gzip
,所以创建它们没有任何意义(如果我错了,请纠正我)。
那么,我正在寻找的解决方案就是让 MIME 类型规范覆盖给定文件扩展名的魔法;我以为我见过一些似乎可以提供如何实现这一点的提示的东西,但现在我找不到它。但肯定存在这样的方法。
答案1
这不是答案,只是评论:
尝试过
cat $XDG_DATA_HOME
,将值设置为(无)而不是报告它
cat
当然不会设置变量的值。cat
将打印您提供的文件的内容,或者在没有文件名的情况下,它将打印从标准输入读取的内容。此外,变量由您正在运行的 shell 扩展(通常是/bin/bash
),因此cat
甚至看不到变量的名称。
现在在您的具体情况下,变量似乎没有设置,因此扩展为无,因此cat
没有参数,因此cat
从 stdin 打印,我假设您必须Ctrl-C
-end 它,或者可能是Ctrl-D
(文件结束)。