2008年12月4日星期四

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的路还很远。