+ -
当前位置:首页 → 问答吧 → 终于搞定了文件关联!

终于搞定了文件关联!

时间:2004-08-24

来源:互联网

测试环境: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是管文件描述、关联、图标等。

作者: osfans   发布时间: 2004-08-24

作者: babo   发布时间: 2004-08-26

具体是怎么搞?

作者: dengwangxi   发布时间: 2004-08-26

有请说具体一点。

作者: e_liming   发布时间: 2004-08-26

不太明白
请解释一下

作者: athlon_r   发布时间: 2004-08-28

没看懂是什么意思,能不能解释一下是做什么的?
估计是好文章,顶一下

作者: zonzi   发布时间: 2004-08-28

[回顾]
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>
]>
其中的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> 
那些注释就别管它了,而且在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> 
如果不想重启而看到效果,运行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 
现在知道在哪改程序名了吧?也知道怎样让程序关联更多的文件类型了吧?
这个比较简单,而且即刻生效。
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=图像 
所以,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看网上直播,很爽啊。
反过来说,如果文件类型没有在第一类文件中注册过,即使在“文件类型和相关程序”关联过,也没用。

[总结]
因此,类型注册是在第一类文件中,程序注册及关联是在第二类中,类型描述图标程序列表等在第三类中,而第四类是唬弄人的。

作者: osfans   发布时间: 2004-08-29

怎么好的文章没人顶?
我顶!!!!

作者: ak70   发布时间: 2004-08-29

好东西,顶!!!

作者: yanwuhuan   发布时间: 2004-08-30

**,困扰了我好久的问题终于解决了:)

作者: 至尊宝   发布时间: 2004-08-30

我觉得还是 KDE 方便一些

作者: jhuangjiahua   发布时间: 2004-08-30

这方面据说GNOME 2.8做了改进,期待中

作者: hzhr   发布时间: 2004-08-30

好文章 顶

作者: athlon_r   发布时间: 2004-09-22

谢谢共享经验:)

作者: ahr   发布时间: 2005-07-05

引用:
作者: ahr
谢谢共享经验:)
现在应该不用这样了吧,在2.8以后的版本里,右键菜单里有打开方式的设置。

作者: starboys   发布时间: 2005-07-08

引用:
作者: osfans
[回顾]
gnome2.6中的nautilus如何为新文件类型建立关联


那些注释就别管它了,而且在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> 
如果不想重启而看到效果,运行update-mime-database /usr/share/mime即可。不过nautilus可能得重启一下下。
我也是按楼主得方法作的,注册了新的mime类型后,需要重启nautilus才能打开该类型的文件,不知道nautilus和mime数据库之间是不是有通信机制?就是说nautilus能知道有这个类型了,找到这个机制,是不是就不用重启nautilus?

作者: fzhyeale   发布时间: 2006-05-19

好文章,谢谢分享

作者: aps   发布时间: 2006-05-19

热门下载

更多