2008年12月4日星期四

Synaptics及其他:xorg.conf一些新旧设置

Archlinux的xorg-server升级到1.5.3了,最大的变化是默认启用了hotplugging,简单说就是支持输入设备的热插拔了。各位可以去wiki看看,有很清楚的说明。

反映到xorg.conf就是所有的InputDevice都不需要了,扔这儿吧:

Section "InputDevice"
Identifier "Keyboard0"
Driver "keyboard"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "us"
Option "XkbVariant" ""
EndSection

Section "InputDevice"
Identifier "Serial Mouse"
Driver "mouse"
Option "Protocol" "Microsoft"
Option "Device" "/dev/ttyS0"
Option "Emulate3Buttons" "true"
Option "Emulate3Timeout" "70"
Option "SendCoreEvents" "true"
EndSection
Section "InputDevice"
Identifier "PS/2 Mouse"
Driver "mouse"
Option "Protocol" "auto"
Option "ZAxisMapping" "4 5"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "true"
Option "Emulate3Timeout" "70"
Option "SendCoreEvents" "true"
EndSection

Section "InputDevice"
Identifier "USB Mouse"
Driver "mouse"
Option "Device" "/dev/input/mice"
Option "SendCoreEvents" "true"
Option "Protocol" "IMPS/2"
Option "ZAxisMapping" "4 5"
Option "Buttons" "5"
EndSection
Section "InputDevice"
Driver "synaptics"
Identifier "Touchpad"
Option "Device" "/dev/input/mouse1"
Option "Protocol" "auto-dev"
Option "LeftEdge" "1700"
Option "RightEdge" "5300"
Option "TopEdge" "1700"
Option "BottomEdge" "4200"
Option "FingerLow" "25"
Option "FingerHigh" "30"
Option "MaxTapTime" "180"
Option "MaxTapMove" "220"
Option "VertScrollDelta" "100"
Option "MinSpeed" "0.06"
Option "MaxSpeed" "0.12"
Option "AccelFactor" "0.0010"
Option "SHMConfig" "on"
# Option "Repeater" "/dev/ps2mouse"
Option "CircularScrolling" "on"
Option "CircScrollTrigger" "0"
EndSection
当然,别忘了删除ServerLayout字段中的相关内容。

触摸板synaptics驱动需要安装xf86-input-synaptics,老的不知在哪一次升级的时候被卸掉了,害我折腾了一会儿,也怪我没重新看一下wiki。以下是我的新配置文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.touchpad">
<match key="info.product" contains="SynPS/2 Synaptics TouchPad">
<merge key="input.x11_driver" type="string">synaptics</merge>
<!-- Arbitrary options can be passed to the driver using
the input.x11_options property since xorg-server-1.5. -->
<!-- EXAMPLE:
<merge key="input.x11_options.LeftEdge" type="string">120</merge>
-->
<merge key="input.x11_options.Protocol" type="string">auto-dev</merge>
<merge key="input.x11_options.LeftEdge" type="string">1700</merge>
<merge key="input.x11_options.RightEdge" type="string">5300</merge>
<merge key="input.x11_options.TopEdge" type="string">1700</merge>
<merge key="input.x11_options.BottomEdge" type="string">4200</merge>
<merge key="input.x11_options.FingerLow" type="string">25</merge>
<merge key="input.x11_options.FingerHigh" type="string">30</merge>
<merge key="input.x11_options.MaxTapTime" type="string">180</merge>
<merge key="input.x11_options.MaxTapMove" type="string">220</merge>
<merge key="input.x11_options.VertScrollDelta" type="string">100</merge>
<merge key="input.x11_options.MinSpeed" type="string">0.06</merge>
<merge key="input.x11_options.MaxSpeed" type="string">0.12</merge>
<merge key="input.x11_options.AccelFactor" type="string">0.0010</merge>
<merge key="input.x11_options.SHMConfig" type="string">true</merge>
<merge key="input.x11_options.CircularScrolling" type="string">on</merge>
<merge key="input.x11_options.CircScrollTrigger" type="string">0</merge>
<merge key="input.x11_options.TapButton1" type="string">1</merge>
<merge key="input.x11_options.TapButton2" type="string">2</merge>
<merge key="input.x11_options.TapButton3" type="string">3</merge>
</match>
<match key="info.product" contains="AlpsPS/2 ALPS">
<merge key="input.x11_driver" type="string">synaptics</merge>
</match>
<match key="info.product" contains="appletouch">
<merge key="input.x11_driver" type="string">synaptics</merge>
</match>
<match key="info.product" contains="bcm5974">
<merge key="input.x11_driver" type="string">synaptics</merge>
</match>
</match>
</device>
</deviceinfo>
默认配置是/usr/share/hal/fdi/policy/10osvendor/11-x11-synaptics.fdi,复制到/etc/hal/fdi/policy/,再把老的配置项添加进去。型号(如SynPS/2 Synaptics TouchPad)可以用以下命令查到(参见wiki):
hal-device|grep -B 15 input.x11.driver
如我的机器上显示是这样的:
--
input.x11_options.MaxTapMove = '220' (string)
input.x11_options.VertScrollDelta = '100' (string)
input.x11_options.MinSpeed = '0.06' (string)
linux.sysfs_path = '/sys/class/input/input8/event8' (string)
linux.device_file = '/dev/input/event8' (string)
input.x11_options.MaxSpeed = '0.12' (string)
info.parent = '/org/freedesktop/Hal/devices/platform_i8042_i8042_AUX2_port' (
string)
input.x11_options.AccelFactor = '0.0010' (string)
input.x11_options.SHMConfig = 'true' (string)
input.x11_options.CircularScrolling = 'on' (string)
input.x11_options.CircScrollTrigger = '0' (string)
input.device = '/dev/input/event8' (string)
input.x11_options.TapButton1 = '1' (string)
input.product = 'SynPS/2 Synaptics TouchPad' (string)
input.x11_options.TapButton2 = '2' (string)
input.x11_driver = 'synaptics' (string)


论坛上也有一些配置(15楼)可以参考。

另外,再附送一个小脚本,可以快速开关Synaptics,我把它绑定到了Fn+1:
#!/bin/bash

Status=$(synclient -l | grep TouchpadOff | tr -d [:blank:])

eval $Status

if [ "$TouchpadOff" = "0" ]
then
synclient TouchpadOff=1
elif [ "$TouchpadOff" = "1" ]
then
synclient TouchpadOff=0
fi
另外,好象已经可以不用xorg.conf了,但我的还不行,不知是否没装开源ati驱动的缘故(只有fglrx)。

KDE快捷键与keyboard layout的问题

近日arch的xorg-server升级到1.5.3,默认使用hotplugging。问题是方向键等许多按键失灵了,论坛上说需要在KDE系统设置->地区和语言->键盘布局中使用键盘布局"Evdev-managed keyboard",一试之下,果然好多了。只是系统的一些快捷键依旧无法使用,比如无须确认注销。

系统设置->键盘和鼠标->键盘快捷键重新设置一下,又可使用了。想起这个问题以前配置xmodmap时就碰到过。简单测试一下后,可以确认,键盘布局(映射)必须在KDE启动之前应用,否则就会出现这种情况。虽然有一些其他的考虑,如键盘布局切换后,按键都变了,原来的快捷键可能不是你需要的。但我依然认为这是个Bug(我已经去官网确认了),我们需要全局快捷键机制(比如用于快速切换键盘布局,有人就遇到了麻烦),每个键盘布局也应该可以有自己的快捷键,而不是象现在这样直接罢工。

解决很简单,在上述系统设置中禁用键盘布局,而把它放到.xinitrc中,下面是我的配置:

# SCIM
export LC_ALL=zh_CN.utf8
export XMODIFIERS=@im=SCIM
export GTK_IM_MODULE="scim"
export QT_IM_MODULE="scim"
scim -d

# 键盘设置
xmodmap ~/.Xmodmap

# 关闭触摸板
synclient TouchpadOff=1

# 键盘绑定
xbindkeys &

setxkbmap -keycodes evdev -model evdev

exec startkde

2008年11月19日星期三

欲练神舟,必先自宫

我的神舟笔记本买了2年多了,一直没什么大问题,只是对Linux的支持不太友好,以下几个问题一直没解决:

  • 关机时不能切断电源,尝试过各种命令和内核参数(acpi=off noapic)。在休眠时也有这个现象。
  • 在启用acpi的情况下,Fn组合键调节屏幕亮度、关闭显示器等无效。
所有这些问题,其实只要一个内核参数就可以解决,只是你要先自宫,把你的双核变单核。

在你的grub配置文件menu.lst中kernel字段添加:
kernel /vmlinuz26 root=/dev/sda2 ro nosmp
nosmp也可以换成maxcpus=0,经尝试maxcpus=1虽然cpuinfo显示cpu cores为1,但似乎cpu编号为cpu1而非cpu0,老问题依然存在。

对于日常的普通应用,应该影响不大,除非你用的是gentoo,经常要编译东西。

我曾经尝试过acpi解决(有修订)而未果,最近似乎找到了原因,结合上述关闭acpi的实践,应该可以确认是dsdt的一个error引起,但目前没有解决办法。详情还请看那篇文章中错误信息第3条。

所以,自宫似乎是目前最好的解决办法。

2008年11月17日星期一

Archlinux上编译自己的QT

Arch更新频繁,为了保持稳定和可控,决定自己编译该死的QT。

首先chroot到移动硬盘上的测试系统

sudo chroot /mnt/ /bin/su - foo
qt的源码包比较大(99M),建议单独用下载工具下载,下载PKGBUILD,修改以符合自己需要,我这里去掉了几个快捷方式(desktop文件)以及安装(make install)后的处理,同时编译demos、examples和docs:
# $Id$
# Maintainer: Pierre Schmitz

pkgname=qt
pkgver=4.4.3
pkgrel=2
_qtcopyver=880178
pkgdesc="The QT gui toolkit."
arch=('i686' 'x86_64')
url="http://www.trolltech.com/products/qt"
license=('GPL3')
options=('!libtool' '!docs')
depends=('libpng' 'libxi' 'mesa' 'fontconfig' 'libxrandr' 'glib2' 'libtiff' 'libmng' 'sqlite3' 'dbus' 'libxcursor' 'libxinerama')
optdepends=('postgresql-libs' 'libmysqlclient' 'unixodbc')
makedepends=('inputproto' 'postgresql-libs' 'mysql' 'unixodbc' 'cups' 'libxfixes')
provides=("qt4=${pkgver}")
replaces=('qt4')
conflicts=('qt4')
_pkgfqn=qt-x11-opensource-src-$pkgver
# svn export -r -${_qtcopyver} svn://anonsvn.kde.org/home/kde/trunk/qt-copy/patches/ qt-copy-patches-${_qtcopyver}
source=("ftp://ftp.trolltech.com/qt/source/${_pkgfqn}.tar.bz2"
"ftp://ftp.archlinux.org/other/qt/qt-copy-patches-${_qtcopyver}.tar.bz2")
md5sums=('00e00c6324d342a7b0d8653112b4f08c'
'd3a40d783528a86174b62ecfc136b031')

build() {
# 按源码的INSTALL文件,其实不需要为编译设置变量
unset QMAKESPEC
export QT4DIR=$srcdir/$_pkgfqn
export PATH=${QT4DIR}/bin:${PATH}
export LD_LIBRARY_PATH=${QT4DIR}/lib:${LD_LIBRARY_PATH}

cd $srcdir/$_pkgfqn
for i in $srcdir/qt-copy-patches-${_qtcopyver}/*; do
echo "applying $i"
patch -p0 -i $i || return 1
done

# remove unwanted mkspecs
cd mkspecs/
find . -maxdepth 1 -regextype posix-egrep -type d ! -regex "./linux.*|./common|./features|./qws" -exec rm -rf "{}" \;
cd qws
find . -maxdepth 1 -regextype posix-egrep -type d ! -regex "./linux.*" -exec rm -rf "{}" \;
cd ../../

sed -i 's|-cp -P -f|-cp -L -f|' qmake/Makefile.unix
sed -i "s|-O2|$CXXFLAGS|" mkspecs/common/g++.conf
# fix postgres build
sed -e '/pg_config --libs/d' -i configure
# do not compile demos, examples and docs

# prefix很重要,qt严重依赖,且以后不能更改
./configure -confirm-license \
-prefix /home/foo/qt4.4.3 \
-no-exceptions \
-plugin-sql-{psql,mysql,sqlite,odbc} \
-system-sqlite \
-dbus-linked \
-webkit \
-no-separate-debug-info \
-assistant-webkit \
-system-libpng \
-system-libjpeg \
-system-zlib \
-openssl-linked \
-cups \
-reduce-relocations \
-xinerama \
-xcursor \
-xfixes \
-optimized-qmake || return 1

make || return 1
make INSTALL_ROOT=$pkgdir install || return 1
}
开始编译:
makepkg -s -r
人品不好,一开始就报错
/dev/null: Permission Denied
knoppix的wiki上有详细的说明,简单说就是,mount的时候需要dev参数:
mount -o remount,dev /dev/hda1
接下来,就一切顺利了,2个多小时后,顺利生成qt-4.4.3-2-i686.pkg.tar.gz,你可以使用pacman -U安装,不过我是解压后移动到相应目录。

2008年11月16日星期日

Qt的安装路径问题

真他妈BS啊,许多关键的路径居然都是绝对路径且hard coded,将安装目录换个地方就出错,唯一的值得安慰的是商业版也这样

Hi,

I had that problem with Commercial Edition as well. I asked Trolltech for
support, they told me, I'd have to recompile all but examples, tutorials
and demos :-(

sorry to say that,
regards,
Malte
qtcn上也有人问起,结论也是NO WAY!

这些家伙脑瓜进水了么,知道编译一次要多少时间吗?

2008年11月15日星期六

emacsclient(w)和gnuclient(w)

Emacs有一个Server-Client模式,如果你是码字狂人,同时编辑好几个文件,这就很有用了,比如你在网上发帖子,就可以在Firefox中将文本发送到Emacs中进行编辑,是的,我知道你离不开Emacs,人不能没有信仰啊。


Windows上,我原本使用的是gnuclient(w),XEmacs自带的。我在Live Drive上有个备份,安装很简单,exe文件放bin目录,el文件放到site-lisp目录就可以了。在配置文件中添加如下代码:
(load "gnuserv")
(gnuserv-start)
启动的时候,用gnuclientw.exe -s代替runemacs.exe启动。

事实上,Emacs自22.1以后也自带了类似工具:emacsclient(w),虽然有点小问题,不过个人还是倾向于使用原配,纯粹个人喜好,就象我使用Windows画图多过photoshop。既然是自带的,就没有安装问题了,配置也很简单,只要1句配置就可以使用了:
(server-start)
只有把Emacs集成到Windows右键菜单,这一切才算完整。你需要的只是一个注册表文件,下面是gnuclient(w)的:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell]
@="*"

[HKEY_CLASSES_ROOT\*\shell\emacs]
@="用Emacs打开..."

[HKEY_CLASSES_ROOT\*\shell\emacs\command]
@="D:\\Programs\\ntemacs23\\bin\\gnuclientw.exe -s \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs]
"HOME"="D:\\foo\\Home"
emacsclient(w)的如下:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell]
@="*"

[HKEY_CLASSES_ROOT\*\shell\emacs]
@="用Emacs打开..."

[HKEY_CLASSES_ROOT\*\shell\emacs\command]
@="D:\\ntemacs\\bin\\emacsclientw.exe -a \"D:\\ntemacs\\bin\\runemacs.exe\" \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs]
"HOME"="D:\\foo\\Home\\"
上面提到过emacsclient(w)有点小问题,就是这里设置的HOME目录似乎对emacsclient(w)不起作用,必须设置HOME变量才可以,还有就是如果Emacs事先未打开,会弹出一个对话框报告connet: No error,确定后就可以正常打开了,不过这个文件不是通过emacsclient(w)打开的,而是runemacs,所以关闭该buffer用的也不是C-x #,这点gnuclient(w)做得完美,反正只要用gnuclient(w)替代runemacs启动就可以了,它的buffer关闭也跟普通buffer一样,而不是C-x #

不过我觉得这是个小问题,不是么?而且可能跟我用的Emacs 23比较老有关,ntemacs很久没更新了,emacs.cn又挂了:( ,因为我看到了这个讨论,不过也并不完全一样,我是在废话么......

2008年11月9日星期日

老爷机是每个高手的恶梦

帮同事的电脑重装了一下系统,差点毁了我“电脑高手”的一世英名,谨以此文记之。

一台老爷机,联想天禧6220,赛扬II 800M CPU,128内存,20G硬盘。

差点毁在硬盘上,还兼有灵异事件发生。一开始就发现硬盘有问题,因为启动时会进行分区自检,而且是检查到一半就不动了,有时想跳过自检都不行,明明按任意键取消自检还有5-6秒,可不知是键盘失去了相应还是什么原因,还是开始自检了,然后死机,于是反复重启若干遍,终于侥幸进入了系统,但桌面出来后,等待系统相应鼠标事件还是曼德拉,无奈重装系统。使用雨林木风的ghost光盘系统,每次都在5%的地方出错,然后重启。无法进入PE系统,应该是内存不够。用PQmagic 8.5 分区,依然如故。用DM 9.57分区,终于顺利通过了那该死的5%,以为OK了,出去抽了根烟回来,发现又自动重启了,没ghost完。只能尝试安装版,手头没XP的,用了一张2000 sp4的,虽然很慢,还是顺利装上了。进入系统,磁盘管理,分区,然后就是直接不能格式化,除非把这些问题分区隐藏或删除,否则系统就会不时卡住。事件日志里记录了两件事:硬盘的fireware太老可能会影响性能,硬盘有block错误。用系统自带的chkdsk在最后一步检查空闲空间时过了50%就很慢,最后90%多终于象是死了,我要下班了,关机。

看到一款软件HD Tune,试用之下非常棒,当然我知道我火星了,用它查硬盘坏扇区(快速检查)速度飞快,摸清了10G以后的地方已是满目苍痍,不堪复用,再度祭出DM 9.57,修改了硬盘的容量参数,彻底跟那后10G说拜拜。再度尝试ghost,还是失败,现在是连ghost都进不去了,一切似乎更糟了。再次重装被破坏的2000,还好这招依然有效,进入磁盘管理分区,一切顺利。装上maxdos 7.0,将镜像文件拷贝的D盘,使用maxdos引导,手动ghost,等待,5分钟后,本电脑高手的名节终于保住了。

装的是XP SP3,除了在设备管理器里根本看不到网卡,一切完美。长江后浪小谢查察之下说那是内置猫,没有XP下的驱动,下了几个都装不上。不管它了,反正事主根本不要求上网。查看内存使用,开机后什么都不做,稳定下来后在70M左右,令人称奇。发现原配显示器应该是15寸的,把分辨鋝调到800x600后,一般的文件夹操作简直可以用比较流畅来形容了。

后记:后来发现雨林木风光盘ghost失败还是一桩疑案,进入winpe桌面,将gho文件拷到硬盘,在PE中进行ghost,则一切正常,此案疑点在于若是光盘错误,gho镜像文件如何拷得出?若是机器问题,则试过新老多款机器,问题都一样。

Flash的10全9美

Flash Player 10 For Linux推出已经有一段时间了,有人在欢呼“Linux在Flash播放器领域终于成为了主流的操作系统了”,昨日试用之下,优点还没发现,倒是一上优酷就会崩溃,这可是我现在的主力视频站点。其他如56去了一趟火星之后,已经处女膜修复了,tudou速度慢,视频大小也似乎有限制,经常集分上下,youtube也是这个问题。

于是毫不犹豫换回了flash 9.0.124,不过找这个版本可是花费了一段时间,有同样需要的朋友可以看这里,虽然官网上已经找不到链接了,看来文件还在。

Update:再一次Arch升级后,一播放flash video,Firefox就僵死,初以为Firefox或flash player版本问题,遂皆升级到最新版,问题依旧,又一日,在次系统升级后,问题解决。所以现在我也已用上了flash 10.0.15

2008年10月11日星期六

wine成功魔兽争霸

我用的是1.20d绿色免CD版,注意2个问题:

  1. 将Movies文件夹改名或者干脆移除。这里面都是开场动画,Divx格式的,目前wine还不支持(据说Cedega有支持)。如果你运行后发现有声音无画面(黑屏),就是这个原因了。
  2. 如果游戏非常卡,请使用opengl。魔兽争霸默认使用DirectX,这个对wine来说,有点勉为其难了。
    WINEDEBUG=-all wine "C:\\Program Files\\Warcraft III\\Warcraft III.exe" -opengl
    使用该参数还有一个好处,如果你使用的是ATI闭源驱动,KDE4下开启特效也不会屏闪了。
顺便找了几个图标作快捷方式。

2008年9月23日星期二

挂载archlinux的img文件

1. 先查看第一个空闲loop设备
sudo losetup -f
/dev/loop0
2. 使用上一步得到的设备名,第一次创建loop设备
sudo losetup /dev/loop0 archlinux-2008.06-core-i686.img
3. 查看信息
sudo fdisk -lu /dev/loop0

Disk /dev/loop0: 322 MB, 322469376 bytes
53 heads, 12 sectors/track, 990 cylinders, total 629823 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0x00000000

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *          63      629822      314880   83  Linux
Partition 1 has different physical/logical beginnings (non-Linux?):
     phys=(0, 1, 1) logical=(0, 5, 4)
Partition 1 has different physical/logical endings:
     phys=(39, 52, 12) logical=(990, 15, 3)
我们可以看到,该镜像只有一个分区(loop0p1),从第63扇区开始(Start列),每扇区512字节(Units = sectors of 1 * 512 = 512 bytes),我们算出offset,下面mout命令会用到:
63*512=32256
4. mout
sudo losetup -o 32256 /dev/loop1 archlinux-2008.06-core-i686.img
sudo mount -o loop /dev/loop1 /mnt/
ls /mnt/
addons  archlive.sqfs  boot  lost+found
事实上,fdisk可以直接查看img文件(虽然功能不全,下面会说到),mount可以自动创建loop设备,所以上面步骤可以简化为:

I. 查看信息
sudo fdisk -lu archlinux-2008.06-core-i686.img
You must set cylinders.
You can do this from the extra functions menu.

Disk archlinux-2008.06-core-i686.img: 0 MB, 0 bytes
53 heads, 12 sectors/track, 0 cylinders, total 0 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0x00000000

                          Device Boot      Start         End      Blocks   Id  System
archlinux-2008.06-core-i686.img1   *          63      629822      314880   83  Linux
Partition 1 has different physical/logical beginnings (non-Linux?):
     phys=(0, 1, 1) logical=(0, 5, 4)
Partition 1 has different physical/logical endings:
     phys=(39, 52, 12) logical=(990, 15, 3)
第一行抱怨不能得到cylinders,原因是普通文件上没有实现ioctl操作,我们可以看到0 cylinders,但这对我们不重要,关键是我们依然可以得到第一个分区(archlinux-2008.06-core-i686.img1)的偏移值

II. 直接mount
sudo mount -o loop,offset=32256 archlinux-2008.06-core-i686.img /mnt/
ls /mnt/
addons  archlive.sqfs  boot  lost+found

2008年7月2日星期三

FireFox 3.0 升级手记

第一时间就下载了FF3,为了共襄盛举,还特意用“右键另存为”下载,不敢用迅雷之类的下载工具(其实至少迅雷是支持只从原始链接下载的,不过也算帮助节约点带宽吧)。原来还以为只有中国人迷吉尼斯呢。

对于我来说,生活就是一连串的“最后”组成的:小学毕业,我是最后一届“五年制”的;中学毕业,新的教学试验大楼刚刚造好,最后在老教学楼出来的一群人;大学刚毕业,学校就改了名字,我们是最后一届杭大毕业生;朋友们都已娶妻生子,我还是孤单北半球,最后的单身汉;刚入股市,就碰到530,算是摸到了牛市的尾巴,哦,这次,我不是最后的SB。

让我也在“最后”来说说升级到Firefox 3.0的一些事吧。

安装很简单,解压出来,直接运行firefox,其实它是个脚本。

每一次升级前,记得备份~/.mozilla,第一次使用最好开个终端来运行,观察输出,比如有没有报缺少java插件之类的。

一路使用Firefox,最难以忍受的是它的内存消耗,最割舍不下是它的扩展:
  • chatzilla,irc聊天客户端,opera自带,但有了它,opera就没什么好留恋的了。不过平时我把它禁用了,使用Konversation
  • colorzilla,网页颜色提取
  • copylinkname,复制链接名称而不是地址,有时候你想选中链接名称还真不是一见容易的事,仿佛选中国男足主帅
  • CustomizeGoogle,使用Google服务时的一些增强和辅助设置,如指定使用https访问Google Reader,因为我订阅了BBC新闻。
  • Delicious Bookmarks,美味书签
  • FireFTP,使Firefox成为FTP客户端,平时禁用了,因为很少用到。
  • FireGestures,鼠标手势,原来用的All-in-One Gestures当时还没更新,就改用这个了,不能根据用户画手势生成配置,没有斜向手势,但简单实用,够了。更新太慢就会失去用户,这方面我见过最变态的是魅族的M8
  • flashgot,调用外部下载工具,平时我也禁用了,应该可以节省内存资源吧?
  • Forecastbar Enhanced,天气预报,感觉比较准
  • FoxyProxy,原来用得是Torbutton,升到FF3.0后,默认配置增加了安全性,使得切换前后,原来已登录的网站需要重新登录一遍,如果说这个可以通过降低安全性解决的话,与Taboo的冲突我一时找不到办法,放弃了。FoxyProxy支持直接使用Tor,我把Privoxy也删了,支持url匹配,类似于Gladder,我没功夫去搞,听说未来支持为单个网页使用proxy,等这个了
  • Google Toolbar for Firefox,谷歌工具栏
  • Greasemonkey,用户脚本管理器,脚本通常用来预处理一些Windows IE专用网页,如我就有一个脚本帮助浏览btchina,当然如果是在Windows下,还是建议使用IE tab;也有一些是功能增强的,如有一些针对Gmail的,我不太喜欢,多余
  • It's all text!,调用外部编辑器编辑网页文本框中的内容,比如我习惯用Emacs,写blog的话,Emacs有专门针对Google的g-client扩展。新的0.8.5虽然支持FF3,但它的语言文件编码有问题(用的是big5),扩展无法使用,BabelZilla的质量真是不敢恭维。其实xpi文件就是一zip压缩包,自己手动改一下,简体中文就把繁体的文件复制一下,然后用MS Office进行简繁转换(有些习惯用语也转换的非常到位),网上找个软件,将编码统统转换成utf-8,重新打包,就可以正常使用了
  • Mediaplayerconnectivity,检测网页中的多媒体文件,可以调用外部播放器播放它们,我上百度mp3就靠它调用Amarok了,最近刚刚兼容FF3。由于使用较少,虽然升级的时候还不兼容,也没太在意。
  • Paragrasp,帮助阅读很长的网页
  • Pearl Crescent Page Saver Basic,将网页保存为图片,方便立此存照,比如有人在博客上说周正龙的华南虎是真的,若干月后,警察叔叔出来说是假的,这时,他即使删了那几篇文章,耍赖说没写过,我们也不怕,有图为证
  • Right Encoding,右键菜单中添加改变网页显示字符编码功能
  • ScribeFire,写博工具,正如我在写下这些文字时正在使用的
  • Split Browser,分割当前窗口,同一视图下显示多个页面,校对,翻译,比较网页时很有用
  • Tab Mix Plus,去它的官网下的dev版,支持FF3
  • Taboo,最初是在小众上看到的,一用之下,爱不释手,为此舍弃了TorbuttonTree Style Tab。同时打开很多标签页,再也不怕没时间看了
  • Weave,mozilla实验室作品,Google为此放弃了Google Browser Sync,可以方便的在多台PC之间同步Firefox状态,包括扩展,历史,书签等等
不管路边的野花香不香,我还是收集了许多,除了上面介绍的,基本上都只用过一次。如果机器猫口袋里没有了宝贝,连一只普通的猫都不如,居然还怕老鼠。如果Firefox没有了扩展,也好不到哪儿去。

FF3相比FF2,的确快了许多,如果一定给出一个数字,我希望是3

“给我一个浏览器,我就可以玩转整个地球”,Google已经将Earth装进了浏览器,Google要开发基于WebKit的浏览器,浏览器已然成了屠龙刀和倚天剑,谁都想掌握在自己手中。未来很近,mozilla的路还很远。

2008年4月22日星期二

del.js

由于网吧里的机器E盘没有还原保护,许多顾客下很多东西在上面,中个autorun病毒更是家常便饭,于是想在开机通道中进行E盘清理,直接用批处理的话发现对于大部分病毒,需要先去掉它的系统、只读属性才可以删除,否则报找不到文件,实现起来觉得麻烦。

当初装机时,记得网吧保护锁中自带了开机通道,可以使用javascript或vbscript,两个我都不会。但鉴于javascript更通用(跨平台),以及以后搞ajax会用到(私心),决定使用javascript。网上找了一本电子书,就开工了:

var fso, f, fc, s, t;

fso = new ActiveXObject("Scripting.FileSystemObject");

f = fso.GetFolder("E:\\");

fc = new Enumerator(f.SubFolders);
for (; !fc.atEnd(); fc.moveNext())
{
s = fc.item();
t = fso.GetFileName(s);
if (t != "System Volume Information" && t != "RECYCLER")
{
fso.DeleteFolder(s, true);
}
}

fc = new Enumerator(f.files);
for (; !fc.atEnd(); fc.moveNext())
{
s = fc.item();
t = fso.GetFileName(s);
if (t != "pagefile.sys")
{
fso.DeleteFile(s, true);
}
}

在自己的机器上测试成功后,拿到客户机上一试,脚本宿主被禁用了。唉,什么叫敝帚自珍呢,虽然自知没有一点技术含量,扔回收站里还是觉得可惜,扔博客上吧

2008年4月21日星期一

Vista自动更新的最后更新

以前记过怎样解决Vista无法检查更新的问题,自己也感觉解决的不彻底,值此SP1发布之际,问题重现,无论是自动更新还是下载后手动安装,都会失败。一番搜索后,终于找到了答案,我希望是这个问题的最后更新:

你可以尝试以下的一些方法,我相信可以解决问题。

1.在具有管理权限的命令行窗口(右键-以管理员身份运行)中输入net stop wuauserv 和 net stop cryptsvc,然后删除
c:\windows\softwaredistribution和 c:\windows\system32\catroot2两个文件夹。

2.在文件夹c:\windows\winsxs中查看是否有Pending.xml和Pending.grl文件,有的话就取得文件的相 应权限后删除它们。同时检查注册表的
HKLM/Components下是否有下面的内容

• PendingXmldentifier
NextQueueEntryIndex
• AdvancedInstallersNeedResolving

同样,见一个删除一个。

3.在命令行窗口中(需要管理员权限),输入:
reg delete HKLM\COMPONENTS /v StoreDirty

重启电脑,运行自动更新以确认是否好了。

如果问题依然存在,可以继续下面的步骤:

1.安装WindowsUpdateAgent30-x86.exe ,最好在命令行(需要管理员权限)上手动安装,
并使用/wuforce参数


2.卸载所有第三方杀毒软件和防火墙。

(译注:在卸载前,可以先尝试在配置工具msconfig中禁用所有非windows自带服务以及启动项)

2.5 (译注:呵呵,这个是我添加的)
搜索一下错误代码,看能否确认错误原因,错误代码一般windows update页面会显示,也可以到事件查看器中查看:Windows日志-安装程序-在右边“操作”窗口中选择“筛选当前日志”,然后事件来源中选择WUSA,不过这里显示的都是手动安装补丁时的出错信息

检查一下windows installer、Background Intelligent Transfer Service、Windows Update等服务是否已经正常启动

3.在一个WinRE环境中尝试扫描系统文件 ( sfc /scannow /offbootdir=C:\
/offwindir=C:\windows )

2008年4月5日星期六

绿色emule,黄色emule

我只有在找A片时才会想到电驴,Verycd上的东西直接交给迅雷了,但迅雷上搜索A片不方便,这时候,就该色驴上场了。我通常直接从官网上直接下一个最新版的zip包,解压后直接使用,非常绿色,当然,在炒股时,我也是这样。

我看A片一般是不认人的,觉得好就多留一段时间,不喜欢直接删了,最初用的关键词也很简单,从“强奸”“少女”“人妻”之类开始,然后举一反三,挑几个名字有诱人的开下。后来有专家朋友给了我一个亲自整理女优及论坛清单,搜索时就更加得心应手了。

不过今天想看看韩寒的最爱,下了Emule0.48a后运行,发现已经是中文版的了,而且会自动在下载目录下生成emule目录,不会是迅雷给我张冠李戴了吧?直接用“目标另存为”下,结果还是一样。中毒了?用360安全卫士查看了一下进程,发现使用的语言文件来自C:\programdata,再次搜索后发现,原来从0.48a开始,emule在Vista上,默认是每个用户一个配置,所以会在用户的下载目录下生成emule目录以保存下载文件,而每个用户的配置文件是在C:\Users\Username \AppData\Local\eMule,用户无关的如语言文件则保存在 C:\ProgramData\eMule,真是狡驴三窟。要恢复原来默认的绿色配置,需要到扩展配置里去更改(大约在最后的位置)。

搞清了来龙去脉,突然没了看A的兴致,到这里来博一下。

2008年3月14日星期五

Vista的自动更新问题

家里的Vista自动更新已经出问题一段时间了,包括Defender,试了网上的一些方法,如删掉softwaredistribution文件夹之类,统统无效,看着系统托盘中的提示图标,别提多郁闷了。

今天下午花时间找了一下,在一个老外的帖子找到了解决办法(抱歉我现在找不到了),真的很简单,只要在自动更新的设置中,不选择“下载、安装或通知更新时包括推荐的更新”就OK了

2008年2月10日星期日

当爱已成网事

当性爱已成网事
哎..已经顾不了太多
因为我的爱 阿娇
已经赤裸裸

暴露了内幕真相
陈冠希 你就急着防备抵抗
可我知道这结果
那他妈的没有意义
你不必为谁道歉
只要我们能够看得清楚
照片我会好好收藏


想看的看了
让手纸在前面等我

2008年2月9日星期六

Kubuntu Hardy Alpha 4 硬盘启动及试用问题

上一次我介绍了怎样通过移动硬盘启动Ubuntu的Live CD,当时,我是拿kubuntu-kde4.0-i386.iso来试的。可事情没有这么简单,如果你使用一周前刚刚发布的Ubuntu 8.04 Hardy Heron Alpha4来测试,会发现每次启动不到一半就挂了。

通过检查initrd.gz,终于发现,原来Hardy Alpha 4要进行启动设备的uuid验证,而如果变量$IGNORE_UUID不是空字符串或者/conf目录下没有uuid.conf文件则会跳过该检验,那个Kde4.0 LiveCD就是后一情况,对于我们来说,最简单的方法就是设置变量IGNORE_UUID,所要做的只是编辑一下syslinux配置文件,给内核传递一个ignore_uuid参数:

append file=/cdrom/preseed/kubuntu.seed boot=casper initrd=/casper/initrd.gz ignore_uuid splash --
如此一番修改后,终于可以成功启动系统了,但最终还是倒在了xorg上,在命令行运行startx、X或者xinit都失败了。还有,对我来说,已经是老问题了,关机时依然不能自动关闭电源。

以上是在我的笔记本上测试的结果,显卡是ATI X1600,在单位的Dell机上测试,运行良好。

2008年2月8日星期五

syslinux应用简介

syslinux是一个轻量级的启动装载器,只用Windows的人可能不明白是什么东西,如果玩过Linux,一定知道lilo和grub,是的,所谓轻量级我想就是跟grub们相比而言的,尤其是grub2。

syslinux有很多变种(都是官方的)适用于各种媒质,如syslinux用于从微软的文件系统fat 16/32引导,isolinux用于从光盘引导,pexlinux用于从网络引导,extlinux用于从ext2/3文件系统引导。

从这也可以看出,syslinux对于各种设备的兼容做的很细致,据grub4dos的人说,用于兼容性方面的代码甚至超过了程序主要功能的实现代码。

Ubuntu的Live CD就是使用isolinux来引导的,如果你不想为了一个Alpha版本而浪费一张光盘,可以将iso镜像文件放在U盘或移动硬盘上,轻松的换用syslinux来引导。

  1. 将iso镜像中的casper和isolinux文件夹拷贝到移动硬盘的fat32分区根目录,这对于引导系统,只想体验一下LiveCD来说已经足够了,如果你还要进行系统安装等,可能还要其它文件。
  2. 将isolinux文件夹改名为syslinux,现在将syslinux文件夹中的isolinux.cfg文件改名为syslinux.cfg。
  3. 安装syslinux到移动硬盘。如果是在Windows下,使用下面的命令:
    syslinux.exe /mfa G:
  4. a表示激活分区,f是force的意思,m是写mbr,G:是移动硬盘分区的盘符。运行后会在根目录生成一个ldlinux.sys的隐藏文件。

    Ubuntu的Live CD使用的isolinux打了gfxboot补丁,如果你使用官方版本的syslinux,启动后就没有菜单以及语言选择等内容。所以建议大家使用同样打了补丁的Ubuntu版本的syslinux:
    sudo aptitude install syslinux mtools
    sudo syslinux -f /dev/sdb1
    需要mtools是因为要修改fat32文件系统上的文件属性。/dev/sdb1是移动硬盘fat32设备的文件名,不需要mount。
好了,现在插上移动硬盘,将电脑设置为从USB设备启动,OK?如果启动失败,很有可能是分区表的原因,想想当初,我将移动硬盘上的第一个分区设为主分区,fat32格式,也许是个英明的决定。

附记:除了gfxboot,syslinux也有自己的菜单系统这里有一个样例配置文件,在它的邮件列表上,说起gfxboot,有人似乎很不屑suse写的代码。

2008年2月7日星期四

Linux flash插件更新及最新sources.list

今天更新了几个软件,发现其中flashplugin-nonfree更新失败

正在设置 flashplugin-nonfree (9.0.48.0.2+really0ubuntu12.1) ...
Installing from local file /var/cache/flashplugin-nonfree/install_flash_pla
yer_9_linux.tar.gz
md5sum mismatch install_flash_player_9_linux.tar.gz
The Flash plugin is NOT installed.
网上搜了一下,原来是个Bug

解决办法是:删除/var/cache/flashplugin-nonfree/目录中的文件,按Bug report中给出的方法“IMPORTANT NOTICE no.2”,清除cache,purge掉flashplugin-nonfree,为了保证源是最新的,我注释掉了cn99的源,使用了archive.ubuntu.com的,重新update后,再全新安装flashplugin-nonfree,一切还算顺利,有个小尾巴是,最后检查的时候发现还是从cn99下的:
apt-cache policy flashplugin-nonfree
flashplugin-nonfree:
已安装:9.0.48.0.2+really0ubuntu12.1
候选的软件包:9.0.48.0.2+really0ubuntu12.1
版本列表:
*** 9.0.48.0.2+really0ubuntu12.1 0
500 http://debian.cn99.com gutsy-updates/multiverse Packages
500 http://debian.cn99.com gutsy-proposed/multiverse Packages
100 /var/lib/dpkg/status
9.0.48.0.2+really0ubuntu12 0
500 http://debian.cn99.com gutsy/multiverse Packages
不清楚是怎么回事。更新是确实的,因为上news.163.com不再崩溃了,为了看“老衲”以及诸位淫才的评论,昨晚还崩溃了一次,呵呵。

另附上我自己使用的sources.list:
# For available mirrors, you can check the url:
# https://launchpad.net/ubuntu/+archivemirrors
deb http://debian.cn99.com/ubuntu/ gutsy main restricted universe multiverse
#deb-src http://debian.cn99.com/ubuntu/ gutsy main restricted universe multiverse
deb http://debian.cn99.com/ubuntu/ gutsy-security main restricted universe multiverse
deb http://debian.cn99.com/ubuntu/ gutsy-updates main restricted universe multiverse
deb http://debian.cn99.com/ubuntu/ gutsy-backports main restricted universe multiverse
deb http://debian.cn99.com/ubuntu/ gutsy-proposed main restricted universe multiverse

# The Official repos, always up-to-date, but slow
# So we comment out it for daily use.
#deb http://archive.ubuntu.com/ubuntu/ gutsy main restricted universe multiverse
#deb http://archive.ubuntu.com/ubuntu/ gutsy-security main restricted universe multiverse
#deb http://archive.ubuntu.com/ubuntu/ gutsy-updates main restricted universe multiverse
#deb http://archive.ubuntu.com/ubuntu/ gutsy-backports main restricted universe multiverse
#deb http://archive.ubuntu.com/ubuntu/ gutsy-proposed main restricted universe multiverse

# wine
deb http://wine.budgetdedicated.com/apt gutsy main
#deb-src http://wine.budgetdedicated.com/apt gutsy main

# skype
#deb http://download.skype.com/linux/repos/debian/ stable non-free

#VirtualBox
deb http://www.virtualbox.org/debian gutsy non-free

#bzr
#deb http://bazaar-vcs.org/releases/debs/feisty ./

2008年1月4日星期五

几个Linux内核模块管理工具

介绍几个Linux内核模块管理的相关工具。

首先是lsmod,我们用它来查看当前加载的模块。

rmmod可以帮我们卸载某个模块,如果该模块被其它模块使用,就会卸载失败,可以查看lsmod输出的第4列来确定模块被哪些模块依赖,先卸载它们,最后卸载被依赖的模块。

modprobe用来加载某个模块,如果该模块依赖其它尚未加载的模块,则一并加载。

depmod用来生成modules.dep文件,modprobe就是通过它来确认模块之间的依赖关系。我们知道,内核和模块都提供了许多符号可供第3方使用,depmod正是依据A模块是否使用了B模块的符号来确定它们的依赖关系的。

depmod -a
Ubuntu中有一些个脚本,如lrm-managerlrm-video,是用来管理版权受限的模块的,lrm的意思是linux restricted modules,如Nvidia的视频驱动。

关于受限驱动模块,你还可以看一下/etc/default/linux-restricted-modules-common文件,在这里可以设定禁止加载哪些模块。

关于启动时哪些模块被加载,或者加载细节等等的一些配置,可以看一下/etc下的modprobe.dmodutils目录和modules文件。

deb文件制作与修改初级

deb文件是Debian/Ubuntu系统的软件包分发格式,就象RedHat/Fedora的rpm。

首先我们来看一下deb包的结构。

随便找一个deb文件,比如说foo.deb:

dpkg -e ../foo.deb
dpkg -x ../foo.deb .
第1条命令在当前路径生成了有一个DEBIAN目录,它是deb包中的控制部分,目录中一般有这么几个文件
  1. control文件中记录了该deb包的元信息,如软件包名,版本,谁打的包,与哪些软件包冲突等等。
  2. md5sums文件中是该软件包要安装到系统中的文件的md5值。
  3. preinst文件是安装之前预处理的脚本。如安装新版本的Apache服务器时可能要先停止正在运行的服务。这个和以下的几个文件都是shell脚本。
  4. prerm文件用于安装前删除一些文件。
  5. postinst文件用于安装后的处理脚本。继续上面的例子,你可以在这里启动新版本的Apache服务。
  6. postrm文件用来在安装后删除一些文件。
第2条命令在当前目录解压了要安装到系统的数据文件,如果以当前目录为根目录,它们的路径就是被安装到系统的路径。

另外再介绍两个解压deb包的命令
ar p ../foo.deb control.tar.gz | tar zxvf -
ar p ../foo.deb data.tar.bz2 | tar jxvf -
这里第1条命令与上面略有不同,它直接将DEBIAN目录下的文件解压到当前目录,而不生成DEBIAN目录,如果你最后还要还原成deb包的话,这会有点不方便。第2条命令的效果则和先前的一样。

你可以按照你的要求,随意增加、删除、修改所有这些文件。如果你要为一个解压即可以运行的软件制作一个deb包,你要做的一般就是安排好目录,添加几个快捷方式。如果是用make;make install自己编译的,我的办法是先用checkinstall生成一个deb包,然后再解开来做一些修改,如果需要的话。

最后再将它们打包成deb文件
cd ..
dpkg -b 待打包目录 软件包名
如上所述,待打包目录形如foo/DEBIAN,foo/usr/bin/... ,这也是为什么上面讲解压时,命令中的deb包都放在上层目录的原因。

2008年1月3日星期四

System.map文件:内核符号-地址转换表

赵炯编译的文章-《System.map文件的作用》 几乎把什么都说了,我就这里做个摘要吧

  1. System.map是在编译内核时自动生成的,由于编译器,内核版本,编译平台等因素,每次编译后的System.map都会不同。
  2. 内核自身并不使用System.map
  3. 所谓内核符号就是变量、函数名等等,它们在内核中的地址可能是这样的:c03441a0
  4. klogd之类的程序使用System.map将内核消息中的地址转换成符号名,以方便人们理解。
  5. /proc/ksyms在2.6内核中换成了/proc/kallsyms,在内核初始化时创建,是当前内核实时的符号-地址表
  6. 应用程序如klogd,会自动在相应目录查找System.map。

initrd.img:内核初始化过程中使用的内存文件系统

initrd.img是一个gzipcpio双重打包的文件,如果你把它解开就会发现,其实它包含了一个微型的根文件系统:

mkdir initrd
cd initrd
cp /boot/initrd.img-2.6.22-14-generic ..
zforce ../*
gunzip ../initrd.img-2.6.22-14-generic.gz
cpio -i -F ../initrd.img-2.6.22-14-generic
ls
其中包含了一些常用的命令,许多脚本,内核模块等等。内核在启动过程中,会将它解压到内存,建立一个临时的用户环境,利用这些工具处理一些必须在这个阶段完成的任务,如加载根设备驱动等等。

重新打包可以这样:
find . | cpio -o -H newc | gzip -9 > ../initrd.gz
Ubuntu上建议用户使用update-initramfs来维护和生成initrd.img,高级用户可以使用mkinitramfs。以前的标准工具mkinitrd似乎不再被使用。其实它们都是一些脚本。
sudo update-initramfs -u -k all
我们可以通过Grub或Lilo给内核传递参数,告诉它应该使用哪一个initrd.img文件:
initrd /boot/initrd.img-2.6.22-14-generic