LinuxTOY 是一个致力于提供 Linux 相关资讯的专题站点。如果您发现了好用好玩的 Linux 东东并愿意发扬自由、分享的精神,可以点击顶部导航 Contact 按钮进行投稿。

Recommended books

Popular entries

删除软件后 GConf 中无用项的清理

{ 撰文/jqxl0205 }

不知道大家有没有这样的经历,删除某个使用 GConf 的软件后,通过 gconf-editor 你会发现在左侧边栏中与它相关的内容仍然存在。

比如我使用 Archlinux 安装了 Compiz 后,它会在 GConf 的 /apps 中生成一些东东。删除 Compiz 后那些东东还是存在于 GConf 中,虽然这不影响使用,但看着还是挺不舒服的。Archlinux 下安装 iBus 然后卸载后也会出现这种情况。(呵呵,删除 ~/.gconf 也不顶用)

通过 Goolge 搜索一番,找到 gconf-cleaner 这个软件(呵呵,估计它已经处于半死不活状态)。怀着试一试的心态 yaourt -S gconf-cleaner 安装了这个软件,可惜使用后还是不能解决上面的问题。

想一想,这种情况肯定是系统某处对那些东西进行了缓存,又 Goolge 之,终于找到一个方法可以解决上面出现的问题(可在 Archlinux 中使用,其他发行版也可,但需要自己更改相应路径)。

方法如下:


    #!/bin/bash
    
    rm /etc/gconf/gconf.xml.defaults/*
    
    export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
    find /usr/share/gconf/schemas -name "*.schemas" | xargs \
      /usr/bin/gconftool-2 --makefile-install-rule > /dev/null
    
    chmod 755 /etc/gconf/gconf.xml.system
        
    PID=`pidof gconfd-2`
    if [ ! -z "${PID}" ]; then
        kill ${PID}
    fi

使用 root 用户运行上述 shell 即可。

{ Thanks jqxl0205. }

Read More:

41 Comments

  1. 1 tumashu Commented @ 2009-12-26 11:18Reply to this comment

    楼主注意了,你已经有了计算机洁癖,另外附加一点强迫症。。。。

  2. 2 tumashu Commented @ 2009-12-26 11:21Reply to this comment

    再者,如果删除了软件后又想删除配置的话,应该删除你个人目录里 的gconf吧,如果软件清除以后还在/etc下留下东西的话,这 好像是包的bug吧。。。。

  3. 3 syrano Commented @ 2009-12-26 11:23Reply to this comment

    同意楼上

  4. 4 princelai Commented @ 2009-12-26 11:38Reply to this comment

    艾,就这样把,反正我不用DE,用wm都是自己写菜单,反正看不到

  5. 5 fanhe Commented @ 2009-12-26 12:05Reply to this comment

    这么没啥必要吧 ubuntu的apt里面的软件都可以删除etc里面的配置文件的 只要清除用户目录对应的.XXXX文件夹就行了

  6. 6 autoxbc Commented @ 2009-12-26 12:08Reply to this comment

    如果你必须用复杂的操作才能完成简单的任务,那应该想想的是,一定是哪里出问题了。

  7. 7 zmwgreenrain Commented @ 2009-12-26 12:17Reply to this comment

    呃,据我所知,gconf-editor编辑的就是.gconf中的xml文件

  8. 8 hantsy Commented @ 2009-12-26 12:52Reply to this comment

    gconf 应该被删除掉,搞得像注册表一样。。。GNOME 3 还在讨论中,估计最后还是会保留。 再者,xdg已经定义了一些规范和目录,为什么不用呢?.cache,.local, .config 等。

  9. 9 Iven Commented @ 2009-12-26 12:59Reply to this comment

    有时候不同版本的程序在 gconf 上会因为冲突而无法启动,所以这个还是很有用的……不过,chmod 755 这种方法科学么……

  10. 10 junglevass Commented @ 2009-12-26 13:04Reply to this comment

    gconf应该被删掉,遵守xdg规范就好了。

  11. 11 Lucseeker Commented @ 2009-12-26 13:12Reply to this comment

    @hantsy: 严重同意

  12. 12 jqxl0205 Commented @ 2009-12-26 13:18Reply to this comment

    @Iven: "chmod 755 这种方法科学么",上面的shell我是从Archlinux的gconf的.INSTALL中修改和抄过来的。

    tumashu说,那个“如果软件清除以后还在/etc下留下东西的话,这好像是包的bug吧。。。。”,其他的发行版我不只道是什么情况,但是至少Archlinxu的好多包就是这种情况。gedit,eog,ibus,compiz,anjuta……

    “应该删除你个人目录里的gconf”,这个上面说了删除~/.gconf*,那些东西还存在。

    其实我个人跟倾向于这个文体是软件本身的文体(或者说是gconf的问题),因为自己也通过手工gconftool-2 --makefile-uninstall-rule,但依然删除不了诸如ibus在/apps下生成的ibus及其子目录。

  13. 13 jqxl0205 Commented @ 2009-12-26 13:19Reply to this comment

    抱歉,上面好几处错别字。

  14. 14 lh Commented @ 2009-12-26 13:52Reply to this comment

    你删除了.gconf后如果系统没有安装软件的话,比如ibus,是不会仍然存在ibus的键值的,你需要重新启动gconfd-2或者注销才能看到效果。

    而且没看出那段脚本的作用。。

  15. 15 jqxl0205 Commented @ 2009-12-26 14:13Reply to this comment

    @lh: 这个你确定??

    估计我说的不是很清楚,那个还存在的应该不能叫“键值”,软件删除了,“键值”的确不存在,我说的是:你打开gconf-editor左侧那个树状的东西(这个名字叫什么呢?应该是叫子目录吧)

    用法: gconftool-2 [选项...] - 用于修改 GConf 配置的工具 --all-dirs 显示某个目录下的所有子目录。

    运行gconftool-2 --all-dirs /apps,你就会发现那些子目录还存在,比如:/apps/ibus, /apps/anjuta

    我上面说的是Archlinux下的情况,有使用Archlinux的出来说说。

  16. 16 junglevass Commented @ 2009-12-26 15:14Reply to this comment

    fedora没有这种情况

  17. 17 zakarum Commented @ 2009-12-26 15:18Reply to this comment

    我是及其讨厌gnome这种配置机制,尤其是如果不开启gnome-settings-deamo进程,在Gconf中注册过的gtk程序是不会读取用户的个人设置的,只会去遵守/etc/gtk-2.0/gtkrc的设置,非常之让人讨厌。

  18. 18 danath Commented @ 2009-12-26 19:35Reply to this comment

    唉,有点像注册表了

  19. 19 grissiom Commented @ 2009-12-26 23:42Reply to this comment

    gconf 这种恶心的东西,ibus 依赖,chromium 依赖…… 真是无语了……

  20. 20 flydragon Commented @ 2009-12-27 6:22Reply to this comment

    楼主说的没错。
    我查了偶的系统如下:
    $> gconftool-2 --all-dirs /apps
    /apps/gconf-editor
    /apps/evince
    /apps/gnome-keyring
    /apps/gksu
    /apps/shotwell
    这个shotwell就是垃圾,俺从aur安装的,早已删掉。
    不过奇怪的是俺的系统有ibus,咋的没出现呢?

  21. 21 flydragon Commented @ 2009-12-27 6:40Reply to this comment

    楼主啊,这个脚本其实很简单啦。
    它就是删掉 /etc/gconf/gconf.xml.defaults 就行了

    从此 gconftool-2 --all-dirs /apps 就空了

    后面的语句是重建该目录,只添加该有的项。
    export GCONF_CONFIGSOURCE=`gconftool-2 --get-default-source`
    的意思是说把gconftool-2的输出值赋给该变量,我手动改了:
    export GCONF_CONFIG
    SOURCE=“xml:merged:/etc/gconf/gconf.xml.defaults”

    不过添不添加好像无所谓,偶的evince运行的好好地。

  22. 22 flydragon Commented @ 2009-12-27 6:43Reply to this comment

    哦对了,这些操作都要su到root账户来运行哦,sudo不行,因为export变量时只对当前账户有效。

  23. 23 flydragon Commented @ 2009-12-27 6:45Reply to this comment

    还有奇怪的是,俺的系统ps -ef |grep gconf 根本没有 gconfd 在运行啊,哪里需要kill它呢?

  24. 24 flydragon Commented @ 2009-12-27 6:54Reply to this comment

    哦我知道了。。。我都没装gnome,我只用fluxbox的啦,又小又快。
    所以不用重建也不所谓啦。
    如果有谁需要的话:
    用root登陆,export那个变量,然后:
    #> cd /usr/share/gconf/schemas
    #> gconftool-2 --makefile-install-rule evince.schemas
    把这个目录底下的 .schemas 都来一遍就行了.

    大家的明白?

  25. 25 flydragon Commented @ 2009-12-27 6:57Reply to this comment

    唉用了井号那行命令就消失了. 把命令再发一遍: 如果有谁需要的话: 用root登陆,export那个变量,然后: cd /usr/share/gconf/schemas gconftool-2 --makefile-install-rule evince.schemas 把这个目录底下的 .schemas 都来一遍就行了.

  26. 26 xhh Commented @ 2009-12-27 10:59Reply to this comment

    yaourt -Rn 不是可以一起删除配制文件吗? 否则应该是包的问题

  27. 27 ibear Commented @ 2009-12-28 10:10Reply to this comment

    windows下注册表的种种弊端再现

    我们公司还曾经要求把一些配置文件(二进制的)都放到注册表中,而且说这是MS的规范——也不知是哪里找来的,我立马晕倒!

  28. 28 huangda1982 Commented @ 2009-12-28 10:15Reply to this comment

    邪恶的注册表啊

  29. 29 linooxlee Commented @ 2009-12-28 22:44Reply to this comment

    @huangda1982: 看不出注册表有什么邪恶的。注册表只是一个系统信息的数据集合,它是供系统各个部件使用的共享信息。现在桌面系统设计是任务可以由多个软件协同完成的,要实现协同工作这样的共享信息是必不可少的。window 95起采用二进制的数据库集中管理共享信息,编程和管理方便,操作效率高,希望linux桌面也引进类似的机制。

  30. 30 chi Commented @ 2009-12-28 23:01Reply to this comment

    @linooxlee: /etc不是挺好么?

  31. 31 黑日白月 Commented @ 2009-12-29 2:02Reply to this comment

    gconf 是基于 XML 的,和 Win32 的二进制注册表不一样的……

  32. 32 Roller Commented @ 2009-12-29 3:01Reply to this comment

    @linooxlee: Linux桌面又不是没有类似的机制,问题是Gnome抛开Freedesktop的标准XDG另搞一套,这就令人厌恶了。

  33. 33 huangda1982 Commented @ 2009-12-29 9:24Reply to this comment

    就像grissiom说的,输入法浏览器你依赖那玩意干啥?注册表本身不邪恶,但是被邪恶了。

  34. 34 linooxlee Commented @ 2009-12-29 9:51Reply to this comment

    @chi: 1、共享信息对桌面系统是必须的;2、共享信息数据的储存可以是各种各样的形式,但有一个标准规范更容易能被使用者利用;3、windows注册表是一个有标准规范严格定义的集中式二进制数据库,相对/etc的松散结构的文本文件的形式其先进性是显而易见的;4、由于软件设计不规范、恶意软件、病毒木马等原因会出现共享信息数据与系统实际情况不一致,但这不是由共享信息本身来解决。5、手动和自动更正采用数据库存储形式的windows注册表要比松散结构的/etc更简单容易。

  35. 35 幽隱之賢 Commented @ 2009-12-29 10:00Reply to this comment

    KDE用户飞过,KConfigXT的config文件和相应包捆绑,删包就删全局设置,非常干净。愿意的还可以去.kde4/share/config再清理,非常干净。KDE现在很干净的说,最多说个他包比较多,设计什么确实好。没有办法的说。

  36. 36 chi Commented @ 2009-12-29 10:52Reply to this comment

    @linooxlee: 我什么技术也不懂,也没接触过注册表,不敢多说。但就作为一个普通linux桌面用户来说,纯文本的配置文件改起来很方便,而且灵活。看过一点文本与二进制格式的讨论,个人认为文本有portability这优点。至于标准什么的,楼上Roller同学提到了freedesktop,不知道你觉得xdg怎么样。

  37. 37 Grissiom Commented @ 2009-12-29 14:23Reply to this comment

    支持 xdg,赞 KDE~;)

  38. 38 linooxlee Commented @ 2009-12-29 15:47Reply to this comment

    @chi: Freedesktop太弱了,kde和gnome都不完全遵循xdg。kde和gnome不死一个linux桌面是没有活路的,多嘴了:-)

    纯文本的配置文件并不比数据库方便,方便的仅是你可以随手取得修改工具-文本编辑器。linux桌面的共享信息分布在多个目录上百个文件中,试想像360、迅雷之类的软件把它们恶意修改了,你得打开上百个文件确认变更并修复它们这是多么繁重的工作--你还得非常小心,文本编辑器没有数据校验功能的。

  39. 39 zakarum Commented @ 2009-12-29 23:19Reply to this comment

    @linooxlee: 只能说各有利弊,二进制数据库文件的单点失效问题也是非常恐怖的。 我比较喜欢AIX的方法,重要的系统设置是被权限保护的数据库,其他设置是文本。

  40. 40 Grissiom Commented @ 2009-12-30 14:55Reply to this comment

    @linooxlee: 如果是文本文件,那么可以修改他的就不只是“文本编辑器”,你还有 sed、awk、what ever you name it...(当然也可以说他们是广义的文本编辑器……)为什么一定要手工一个一个改呢?呵呵……

  41. 41 Pepino Commented @ 2009-12-30 16:10Reply to this comment

    Linux发行版是来源复杂的无数包组成的,不比AIX和Win,就是一家公司的团队写的,要他们都把配置信息都写到某个数据库里怕是很难办到啊……连Freedesktop这样的组织都没有约束力,只能各人自搞一套了……