LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 9030|回复: 16

终于搞定了文件关联!

[复制链接]
发表于 2004-8-24 13:59:36 | 显示全部楼层 |阅读模式
测试环境:Slackware10,Gnome2.6.2

对于nautilus识别为application/octet-stream的文件如.rmvb,.mo,.lrc等,
用系统自带的工具(Applications->Desktop Preferences->Advanced->File types and programs)关联好程序图标等,在Nautilus中还是无法识别。

几经周折,终于找到了/usr/share/mime/packages/
于是,一切迎刃而解了。管它什么后缀关联,还是Magic关联。

我是这么理解的:
/usr/share/mime是管文件类型注册的,(文件头或者后缀)
/usr/share/mime-info是管文件描述、关联、图标等。
发表于 2004-8-25 20:09:23 | 显示全部楼层
发表于 2004-8-25 22:01:16 | 显示全部楼层
具体是怎么搞?
发表于 2004-8-26 00:50:03 | 显示全部楼层
有请说具体一点。

发表于 2004-8-27 21:07:02 | 显示全部楼层
不太明白
请解释一下
发表于 2004-8-27 21:23:34 | 显示全部楼层
没看懂是什么意思,能不能解释一下是做什么的?
估计是好文章,顶一下
 楼主| 发表于 2004-8-28 21:18:06 | 显示全部楼层

文件类型与程序关联

[回顾]
gnome2.6中的nautilus如何为新文件类型建立关联
http://freedesktop.org/Standards/AddingMIMETutor
可以下载一个mime-editor,针对扩展名建一个新的mime类型。

文件关联问题
我的系统是debian testing,gnome
到现在nautilus还是不认rmvb文件,只认rm,就连“RM”都不认。那位大侠能帮忙解决一下?


[前言]
迟迟没写,是因为发现比较复杂,不容易研究透彻。有太多的文档要看。
一来没时间,二来没什么基础,所以,深度还不够。

[问题]
(Slackware10+Gnome2.6.2+osfans的组装机,不知问题是否具有普遍性)
1.nautilus已经能够识别大多MIME类型,对于不能识别的或者识别为application/octet-stream(八位二进制流程序)的文件,
  如何创建新类型?
2.利用“文件类型和相关程序”关联程序后,仍无法打开文件。
  如关联好RMVB文件后,双击文件仍没有反应或者提示要关联应用程序。
3.右键文件属性的MIME类型,与“文件类型和相关程序”识别的类型不一致。
  如ape文件,nautilus的文件属性识别为“application/octet-stream”,但关联程序转到“文件类型和相关程序”时
却为application/x-ape(Monkey音频)。
  比如用XMMS关联后,出现第二个问题。
4.nautilus右击文件,“打开方式”列表混乱。
  如有两个“The GIMP”,“Real Player”和“realplayer”同时存在。
5.“打开方式”的程序名如何设定。
  如在utf8下,用“env LANG=zh_CN beep-media-player”关联mp3文件,
但是不想用命令而想用“Beep Media Player”或“BMP”作程序名。
6.图片和文本文件,默认是“查看”动作,但设为“程序”动作后,很难还原。
7.更为严重的是,将文件夹的默认动作关联为“gThumb”或“terminal”后,很难还原。
最后被逼无奈,当然不是重装系统了,而是“rm $HOME/*”──新的开始。

[解决]
下面就讲讲我的做法吧。

关键文件
1./usr/share/mime/packages/*.xml
2./usr/share/application-registry/*.applications
  (~/.gnome/application-info/*.applications)
3./usr/share/mime-info/*.keys
  (~/.gnome/mime-info/*.keys)
4./usr/share/mime-info/*.mime
  (~/.gnome/mime-info/*.mime)

第一类文件(/usr/share/mime/packages/*.xml)就是用来注册MIME文件类型的。
其文件头如下:[PHP]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mime-info [
  <!ELEMENT mime-info (mime-type)+>
  <!ATTLIST mime-info xmlns CDATA #FIXED "http://www.freedesktop.org/standards/shared-mime-info">

  <!ELEMENT mime-type (comment|glob|magic|root-XML|alias|sub-class-of)*>
  <!ATTLIST mime-type type CDATA #REQUIRED>

  <!ELEMENT comment (#PCDATA)>
  <!ATTLIST comment xml:lang CDATA #IMPLIED>

  <!ELEMENT glob EMPTY>
  <!ATTLIST glob pattern CDATA #REQUIRED>

  <!ELEMENT magic (match)+>
  <!ATTLIST magic priority CDATA #IMPLIED>

  <!ELEMENT match (match)*>
  <!ATTLIST match offset CDATA #REQUIRED>
  <!ATTLIST match type (string|big16|big32|little16|little32|host16|host32|byte) #REQUIRED>
  <!ATTLIST match value CDATA #REQUIRED>
  <!ATTLIST match mask CDATA #IMPLIED>

  <!ELEMENT root-XML EMPTY>
  <!ATTLIST root-XML
          namespaceURI CDATA #REQUIRED
        localName CDATA #REQUIRED>

  <!ELEMENT alias EMPTY>
  <!ATTLIST alias
          type CDATA #REQUIRED>

  <!ELEMENT sub-class-of EMPTY>
  <!ATTLIST sub-class-of
          type CDATA #REQUIRED>
]>[/PHP]
其中的glob可以用来注册新的扩展名类型,而magic则可用来注册新的文件头类型。
当然,可以两者都用,不过,后者优先于前者。
nautilus则相反,但当点击选中文件时,则会用后者识别文件类型。如Rar文件的描述:
(我的是0.14版本的shared-mime-info)[PHP]<mime-type type="application/x-rar">
    <comment>RAR archive</comment>
    <comment xml:lang="cy">Archif RAR</comment>
    <comment xml:lang="nn">RAR-arkiv</comment>
    <comment xml:lang="no">RAR-arkiv</comment>
    <comment xml:lang="sr">РАР архива</comment>
    <comment xml:lang="sv">RAR-arkiv</comment>
    <magic priority="50">
      <match offset="0" type="string" value="Rar!" />
    </magic>
    <glob pattern="*.rar" />
</mime-type>[/PHP]
那些注释就别管它了,而且在Gnome中也没有用,Gnome另有方法描述文件类型。
我们可以看到这里用了两种方法识别rar文件,也就是说可以分别用这两种方法创建rar文件:
1.打开gedit,在里面顶格输入“Rar!”几个字(引号中部分),然后保存文件,随便用什么后缀名。
2.在 nautilus 里,右键创建空文件,加上rar后缀。
所以,为了让系统能够识别rmvb文件,加上一段即可:[PHP]<mime-type type="application/vnd.rn-realmedia-vbr">
    <comment>RealAudio/RealVideo VBR</comment>
    <glob pattern="*.rmvb" />
</mime-type>[/PHP]
如果不想重启而看到效果,运行update-mime-database /usr/share/mime即可。不过nautilus可能得重启一下下。

第二类文件(/usr/share/application-registry/*.applications)是用来注册程序的。
看一段就明白了:[PHP]xmms
        command=xmms
        name=X Multimedia System
        can_open_multiple_files=true
        expects_uris=true
        requires_terminal=false
        supported_uri_schemes=http,ftp,file
    mime_types=audio/x-mp3,audio/x-mpeg,application/x-ogg,
application/ogg,audio/x-wav,audio/x-riff,audio/mpeg
[/PHP]现在知道在哪改程序名了吧?也知道怎样让程序关联更多的文件类型了吧?
这个比较简单,而且即刻生效。
gnome-vfs.applications和gimp.applications重复注册,所以会在打开方式中出现两个“The GIMP”。
反正gimp.applications只是个链接,就把它删了。

第三类文件(/usr/share/mime-info/*.keys)功能不少:类型描述,分类,图标,动作,是否显示在打开方式列表中,等等。
如:(只保留中文描述)
[PHP]image/x-png
        description=PNG image
        [zh_CN]description=PNG 图像
        default_action_type=component
        short_list_component_iids=OAFIID:GNOME_EOG_Control
        short_list_component_iids_for_novice_user_level=OAFIID:GNOME_EOG_Control
        short_list_component_iids_for_intermediate_user_level=OAFIID:GNOME_EOG_Control
        short_list_component_iids_for_advanced_user_level=OAFIID:GNOME_EOG_Control
        short_list_application_ids_for_novice_user_level=eog,electric_eyes,gimp
        short_list_application_ids_for_intermediate_user_level=eog,electric_eyes,gimp
        short_list_application_ids_for_advanced_user_level=eog,electric_eyes,gimp
        icon_filename=gnome-image-png
        category=Images
        [zh_CN]category=图像[/PHP]
所以,PNG文件属性中,类型被描述为“PNG 图像”,“文件类型和相关程序”中被分在“图像”类,
默认动作为“GNOME_EOG_Control”组件查看。打开方式列表中有eog(Eye of Gnome)和gimp(The GIMP),
因为系统没装electric_eyes,所以没有出现在列表中。
而因为gthumb(gThumb)和display(ImageMagick Display)在第二类文件中注册了,
所以出现在其它应用程序列表中,而不在打开列表中。

第四类文件(/usr/share/mime-info/*.mime)真的没什么用,只是罗列了各种类型文件对应的扩展名。
删掉之后不影响nautilus文件关联,不影响文件描述,只影响“文件类型和相关程序”。
我把.mime都移走后,就只剩下Internet服务了,倒也挺不错,挺干净,要注册什么协议就用它,
这次看奥运会用mlayer等关联mms看网上直播,很爽啊。
反过来说,如果文件类型没有在第一类文件中注册过,即使在“文件类型和相关程序”关联过,也没用。

[总结]
因此,类型注册是在第一类文件中,程序注册及关联是在第二类中,类型描述图标程序列表等在第三类中,而第四类是唬弄人的。
发表于 2004-8-29 18:53:36 | 显示全部楼层
怎么好的文章没人顶?
我顶!!!!
发表于 2004-8-30 13:01:17 | 显示全部楼层
好东西,顶!!!
发表于 2004-8-30 17:22:33 | 显示全部楼层
我靠,困扰了我好久的问题终于解决了:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表