2011年11月27日星期日

又是显示器刷新率

之前就折腾过刷新率。17寸CRT显示器的分辨率是对的:1024x768,可是刷新率是60不是85,GNOME 3的设置里面都不能直接刷新率呢,只能改分辨率。刚用Linux的时候,也有这样的问题,那时候用Modeline来指定刷新率,现在都懒得研究Modeline了,不想花时间在这个上面。

开了Supertux后崩溃退出,显示器变成800x600@85的了。我想会不会好了呢。在GNOME 3里面把分辨率改成1024x768,刷新率竟然没有变!嗯,就这样用Supertux把显示器的刷新率设置好了。

2011年11月24日星期四

Thunderbird自动归档Gmail邮件?

通过Gmail的标签看邮件,发现只有最近一两个月的邮件在Inbox里面,别的都没有这个标签,等于是被归档了:


好几个标签都有这样的问题。根据Google的帮助,检查了一下几个filter都没有设置自动归档。后来怀疑是不是Thunderbird干的,因为我同时也在Thunderbird里面用IMAP查收邮件。搜到一个碰到同样问题的哥们,但是Mozilla的人澄清了Thunderbird是不会自动归档的,帮助里面特意强调:Messages can only be archived manually, not automatically。

不管怎么说,我把Thunderbird的归档功能禁用掉(方法在此),再观察几个月看看。用的软件越多,出问题的机会就越多,付出的维护时间就会越多。还是越简单越好!

2011年11月19日星期六

坑爹的Ubuntu

最近被Ubuntu的几个地方坑了,上来抱怨一下。

用interfaces文件配置网络接口的话,开机启动要等2分钟才能进去,显示"Waiting for network configuration...",过1分钟再显示"Waiting up to 60 more seconds for network configuration..."。这是一个影响很多人的bug,而开发者竟然说这是他们设计的特性。最后我只能是用NetworkManager来启用我的无线和有线网卡。

然后帮一个朋友恢复重装Windows之后损坏的GRUB。我很久不干这个了,因为早就不这样双系统安装了。要制作一个USB启动盘。可是dd if=file.iso of=/dev/sdX做出的启动优盘不能启动,而usb-creator-gtk选了ISO文件和优盘后,创建的按钮还是灰色的。后来从官方文档了解到,制作这个优盘启动盘需要:
  • 优盘要分区
  • 第一个分区(启动分区)要格式化成FAT16或者FAT32文件系统
  • 这个分区要加载上
真是坑爹啊,学到的标准的方法在Ubuntu这里是不适用的。

做好优盘系统进去后,按照官方文档修复GRUB。推荐的Boot-Repair根本找不到GRUB的安装。又用命令行修复,可是重启后只能进入GRUB的rescue模式,而且不能加载normal模块,说文件找不到。

后来找到原因了。正常的Linux,root文件系统进去就是标准的目录,bin、usr什么的。这个朋友用了btrfs文件系统,root文件系统进去有个@目录,@目录下才是bin、usr什么的。GRUB在(hdX,Y)找不到root,在(hdX,Y)/@才能找到root,所以Boot-Repair找不到GRUB,rescue模式下也找不到模块文件。另外,官方文档说的是(hdX,Y),而我在GRUB的rescue模式下,用ls分区发现根分区是(hdX,msdosY)这样的,所以要(hdX,msdosY)/@这样指定根分区才能找到root。

修复了GRUB后搜索,发现这是11.04及其后对btrfs文件系统特有的设计。又是Ubuntu一大奇葩的特色,打破常规,让你学到的东西在Ubuntu里面再次失效。

2011年11月14日星期一

换行符引起的麻烦

用sed处理一个hosts文件,内容都是类似下面的行:
203.208.46.180 www.google.com
203.208.46.180 music.google.com
203.208.46.180 music.googleusercontent.com
203.208.46.180 music-streaming.l.google.com
203.208.46.180 large-uploads.l.google.com
IP地址和域名之间是用Tab分割的。想用sed把这个文件处理成dnsmasq的DNS记录配置内容,用如下的命令:
sed -e 's|^\(.*\)    \(.*\)$|address=/\2/\1|g'
两个引用的中间是一个TAB。期望的结果如下:
address=/www.google.com/203.208.46.180
address=/music.google.com/203.208.46.180
address=/music.googleusercontent.com/203.208.46.180
address=/music-streaming.l.google.com/203.208.46.180
address=/large-uploads.l.google.com/203.208.46.180
但实际结果出乎意料:
/203.208.46.180ogle.com
/203.208.46.180google.com
/203.208.46.180googleusercontent.com
/203.208.46.180streaming.l.google.com
/203.208.46.180uploads.l.google.com
不但IP和域名的顺序没有调换,域名前面的几个字符还被覆盖了。后来想是不是因为文件换行符的问题。用Vim打开发现果然是DOS格式的换行符。把脚本改一下就可以得到正确结果了:
sed -e 's/^M$//g' -e 's|^\(.*\) \(.*\)$|address=/\2/\1|g'
错误结果也比较好解释了。Windows下的换行符是Carriage Return + Line Feed(\r\n),Linux下的换行符是Line Feed(\n)。Carriage Return就是打字机的打印头回到行首,Line Feed是指纸出来一行,这样打印头就处在下一行的同一个位置了。sed命令中的第二组引用不但包括了域名,还包括了紧随其后、位于 \n前的\r,这样本来应该位于\2后面的/\1,现在要从\2的开头开始打印了,于是就覆盖了域名的前面几个字符。例如对第一行:
address=/www.google.com/
/203.208.46.180
把开头的address=/www.go都覆盖了,所以结果就是:
/203.208.46.180ogle.com
后面的也都要覆盖掉IP长度+1(/)的字符。

2011年7月11日星期一

No input file specified错误解决方法

用的Nginx和php-fastcgi,如果URI是不存在的PHP文件,那么浏览器显示"No input file specified." 这个错误(应该)是php-fastcgi找不到对应文件出现的。解决办法是让nginx知道这个错误。参见Stackflow上的解决办法

Nginx的404问题

在本机(Ubuntu 11.04)上装了个nginx来预览主页内容,发现没有404页面,乱敲个URI都显示的是首页。我自然就去找404相关的设置了。加上如下配置:
error_page 404 /404.html;
location = /404.html {
    root   /usr/share/nginx/html;
}
之后还是没有变化。然后发现了这样一段配置:
location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to index.html
    try_files $uri $uri/ /index.html;
}
把这段注释掉就好了,404也正常了。 Ubuntu为啥要默认这样的坑爹配置呢?CentOS 5.5没有这个问题。

2011年5月31日星期二

死机问题解决

笔记本电脑十几天没有关机了(只休眠),今天恢复后输入无线路由器密码(有bug记不住密码),然后就死机了,内核挂了。重试多次都这样。用网线连接后检查升级,也没有可用的升级。无奈用台式机登录,把无线路由器的信道由自动换成一个固定的后重启路由器,结果笔记本发现不了无线路由器。又把信道换回自动再重启路由器,笔记本连接无线路由器后再没有死机。

解决这个问题的核心,是找到问题出在wifi上。不能变动(升级)内核,那就变动无线路由器来尝试解决。