2011年4月30日星期六

系统升级后对用户配置文件的处理

升级到Ubuntu 11.04后,Ubuntu Classic的桌面特效出问题了。在Launchpad上找了一圈,也没有看到有人汇报切合我问题的Bug,所以估计是特例,自己提交上去也得不到共鸣和解决。再次研究,终于搞定了。

我研究了家目录下的一些目录,比如.gnome2,删除掉compiz相关的目录。然后全面搜查一遍(要在家目录下):
tux@dell:~$ find . -iregex "\./\..*compiz.*"
在.gconf/apps里面还有东西。把找到的文件都删除掉,注销再登入就好了。如果还不行,可以grep -R *试试吧。

其实很多时候软件升级带来的Bug并不是软件本身的Bug,而是因为用户家目录下的配置文件造成的。也许是新的软件和老的配置文件不兼容,所以软件就会出毛病。如果配置文件不是特别重要,可以把所有在家目录下相关的配置都删除掉(做必要的备份),很可能就可以解决问题了。

我们不能指望发行版在升级软件的时候,还考虑到用户配置文件的迁移和升级,发行版只能考虑到系统配置文件的升级。我之前一直特别自豪于Linux下的配置文件可以用好几年。即使要重装系统,因为家目录总是单独分区的,所以用户配置还可以在新系统下接着使用。现在看来,系统升级后如果出现Bug,用户有必要对家目录下以点 (.)开头的配置文件进行必要的核查,并采取必要的措施。

2011年4月25日星期一

Ubuntu 11.04和GNOME3

一时无聊升级了到了Ubuntu 11.04(离正式发布还有几天),结果桌面特效不能用,而且不论是Unity还是Ubuntu Classic,对我双显示器的支持都有问题。好吧,那就试试GNOME3。又升级到了GNOME3,对双显示器的支持都很糟糕,而且界面很不习惯。我已经把GNOME 2调教得非常顺手和方便了,鼠标到桌面左下角显示桌面,桌面右下角显示窗口缩略图(Exposé),窗口直接在两个工作空间(Workspace)之间拖动。没有桌面特效这两个功能都没有了。

于是就把GNOME3降级到了GNOME2。把源改回10.10的,然后一个一个包地降级,竟然成功了。11.04的桌面特效也没有,就试着把11.04的桌面降级到10.10。折腾很久,无奈还是无法手动解决apt的dependency hell,就改回11.04的源,恢复到了11.04。没有桌面特效,很不爽!不折腾了,开始做事情。

2011年4月12日星期二

内存大小

经常看到有人询问Linux下的内存大小小于实际安装的内存。这是因为内核有保留部分内存使用。

台式机:
$ dmesg |grep Memory
[ 0.000000] Memory: 3457776k/4980736k available (5716k kernel code, 1313348k absent, 209612k reserved, 5375k data, 912k init)
3457776+1313348+209612=4980736

笔记本:
$ dmesg |grep Memory
[ 0.000000] Memory: 2002160k/2056956k available (5716k kernel code, 452k absent, 54344k reserved, 5375k data, 912k init)
2002160+452+54344=2056956

某VPS:
$ dmesg|grep Memory
[ 0.000000] Memory: 603080k/629760k available (2591k kernel code, 388k absent, 26292k reserved, 5287k data, 460k init)
603080+388+26292=629760

不过另一个VPS上的数据稍微有点出入:
$ dmesg|grep Memory
[    0.000000] Memory: 107040k/131072k available (5434k kernel code, 384k absent, 23488k reserved, 5022k data, 448k init)
107040+384+23488=130912

结论,系统保留的内存大小是absent+reserved的和。

最近在自己的Wiki上活跃了,那里更适合一些探索性的东西。

2011年4月1日星期五

Evince看PS文件

我用evince <(man -t man)来看PS格式的man page。这样evince可以正确显示页数,但是却加载不出来页面。我在Freenode的#bash里面请教,有人说可能是evince需要像lseek()一样对文件进行seek,可是对Bash的Process Substitution却无法seek。我觉得有可能是这个原因。