页面

2009年1月25日

让 Firefox 在内存上运行

Linux版Firefox的慢算是出名的了,在同一台机器上,windows版的要流畅很多很多……为什么Linux版会这么慢呢?我觉得有下面几点原因。
  1. nvidia显卡驱动的问题,这是驱动上有bug导致的,不过在180.22版驱动上已经好转很多了。
  2. 用户目录(~/.mozilla/firefox)下的缓存数据过于庞大,这个在windows版也会出现,但我用了2年的windows版firefox,感觉并不明显啊
  3. 编译的问题

尽管3.0版firefox有很大进步,但对于我这种firefox重度使用者,仍然是偏慢。在使用了TualatriX介绍的优化方法后,的确好转了很多。但在20个以上的标签页间进行切换,仍然是会出现缓慢的现象。于是狠下心来,将主目录下的 .mozilla 目录搬到内存上,发现切换标签页缓慢的现象还真的消失了!使用了一个多月,现在我打开30个以上的标签页也不会再慢下来了,感觉非常好!

下面介绍如何将 Firefox 运行在内存上。注意:下面提到的 /tmp 目录是使用 tmpfs 挂载的,如何使用 tmpfs 可以浏览这篇介绍,还有一句废话,你要有足够的内存,我的物理内存是2G。

首先将用户目录下的 .mozilla 目录备份,放到你喜欢的地方,例如放到 /var/local 下。推荐直接用tar打包,不要压缩,下面会说到好处,而放到 /var/local 下是为了配合下面的脚本。

cd $HOME && tar -cpf mozilla.tar .mozilla/*
mv mozilla.tar /var/local


在 /tmp 目录下创建一个目录,用于存放 .mozilla 目录下的文件

mkdir /tmp/.mozilla


然后将用户目录下的 .mozilla 目录链接到刚才创建的目录

ln -sf /tmp/.mozilla $HOME/.mozilla


解压刚才备份的tar包

tar -xpf /var/local/mozilla.tar -C /tmp


好了,现在打开 fireofx 看看,切换标签页的速度是不是有所提升了?我记得当时试验的效果是很明星的。如果你也满意,推荐用脚本直接在开机后就解压 tar 文件到 tmpfs 上,关机时就把 tmpfs 上的数据重新打包备份,多方便啊~。这时直接用tar打包的好处是,每当关机时不用等待压缩 .mozilla 目录的文件,我就曾经用7z压缩数据,那速度……

下面是我写的自动脚本,以 daemon 方式运行,能在 Archlinux 上使用,其他发行版可能需要稍加修改,我只有一个 Archlinux,没办法测试。

新建 /etc/rc.d/firefoxpro 文件,贴上下面的内容

#!/bin/bash

. /etc/rc.conf
. /etc/rc.d/functions

case $1 in
start)
stat_busy "Copying Firefox profile to tmpfs"
if [ ! -d "/tmp/.mozilla" ];then
mkdir /tmp/.mozilla
cp /var/local/mozilla.tar /tmp
tar -xpf /tmp/mozilla.tar -C /tmp
mv /tmp/mozilla.tar /var/local/mozilla-old.tar
chown clayton:users /tmp/.mozilla ###注意这里,需要将clayton改为你的用户名
add_daemon firefoxpro
stat_done
else
stat_fail
fi
;;
stop)
stat_busy "Backuping Firefox profile from tmpfs"
if [ -d "/tmp/.mozilla/firefox/njgmwi0t.default" ];then ###注意这里,要改为你的xxx.default目录名
cd /tmp && tar -cpf /tmp/mozilla-new.tar .mozilla/*
mv /tmp/mozilla-new.tar /var/local/mozilla.tar
rm -r /tmp/.mozilla
rm_daemon firefoxpro
stat_done
else
stat_fail
fi
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "usage: $0 {start|stop|restart}"
esac
exit 0


别忘了给于执行的权限

chmod a+x /etc/rc.d/firefoxpro


编辑 /etc/rc.conf ,把上面的脚本添加到 daemons 处,使其开机就执行

DAEMONS=( ... @firefoxpro ...)


ok,大功告成了。enjoy it 吧!

最后附上2个有用的小技巧。
  1. 压缩 .mozilla 目录下的sqlite3数据库
    首先把 firefox 关了,然后运行下面的命令,详见通过压缩数据库加速 Firefox
    for f in ~/.mozilla/firefox/*/*.sqlite; do sqlite3 $f 'VACUUM;'; done
  2. 分离 Firefox 的临时文件
    Firefox 会在 .mozilla 目录下的 Cache 里存储一大堆浏览网页时的临时文件,这些文件基本上可以无需备份,那我们何必还要将这些临时文件打包进tar包里呢?而且还能减少打包的时间。首先打开 about:config ,将 browser.cache.disk.parent_directory 的值改为 /tmp,没有就新建一个。重启 Firefox ,浏览一些网页后你会发现 /tmp 下多了这个 Cache 目录,里面就是这些杂七杂八的临时文件。


祝大家新的一年里,身体健康,万事如意!
Happy 牛 Year!!

2009年1月13日

转移系统到Archlinux x86-64

没错,这次我终于下定决心使用x86-64位系统。断断续续的使用Linux已经有差不多三年的时间了,我第一个正式使用的Linux系统是openSUSE 10,一直到现在我使用的Archlinux都是32位版的,不过自从Adobe发布了64位的flashplugin后,我就有了转移到64位下的想法。虽然,从32位转移到64位现阶段并不能带来多少性能上的提升,而且还会有一些小麻烦,例如普通情况下Archlinux64位版的源里是没有wine,Virtualbox等这些软件的,但64位毕竟是一种趋势,现在64位已经基本上到了实用的阶段了(指桌面),我想就差Sun的Java 6 SE Update 12发布了。

有了更多人投身到64位下,才能真正带动64位的普及,不是吗? : )

PS:不知是64位还是nvidia的180.22驱动在起作用,装上源里的64位版Firefox后,以前缓慢的现象消失了!

最后贴上我的64位Archlinux的一张截图。
我的64位Archlinux截图

链接:Archlinux64位问答

2009年1月12日

推荐GTK主题:Murrina Crystal

什么都不说,直接上图,嘿嘿,一张图胜过千言万语。而且这个主题还是国人制作的!

Murrina Crystal 效果图

下载地址:gnome-look
主题依赖gtk-engine-murrine引擎svn版,不是最新的svn版可能会出问题的。如果你也是Archlinux的用户,直接安装AUR上的gtk-engine-murrine-svn即可,如果是Ubuntu/Debian用户请直接下载这个deb包安装之。

我的截图

2009年1月8日

Gnome Panel上的倒计时工具

最近一直想找一个倒计时的工具,要求简单就好,像kde下的ktimer就不错,但却要装上kdeutils这个大包。于是继续找,结果给我找到了这个timer-applet小工具,集成在Gnome Panel上,使用很方便,只需简单的点两下鼠标。LinuxToy上也有介绍

下面是添加倒计时事件的界面,一目了然。
timer-applet添加事件界面

下面timer-applet的弹出提示,而且还能设置播放声音,很实用。
timer-applet提示界面

timer-applet的AUR地址
官网

2009年1月7日

第二次修改了文章的永久地址

离上一次改永久地址差不多有半年了,之前在yo2上一直用 “/year/month/day/postname/”这样的格式,后来不喜欢,于是改了“/category/postname.html”的伪静态格式,但发现,有一些文章说并不推荐包含category的永久链接……特别是一篇文章包含多个分类名的情况下。那好吧,我改,想了很久,决定改为“/archive/postname.html”的格式,有想过用“archive/post_id.html”这些简单的格式,但发现我的文章的ID居然去到60000以上了,我哪有写这么多文章啊……既然决定了永久链接格式,还需要做链接的301重定向。这样的插件有不少,我个人喜欢“Redirection“和“Dean's Permalinks Migration“。前者复杂功能多,后者简单功能单一,但Dean's Permalinks Migration这个插件在我这里死活都不成功,只好放弃,而Redirection又要写不少的正则表达式,还好坚持下来了,现在基本算完工了。

2009年1月4日

玩Quake4遇到的一些问题及解决方法

在Archlinux上玩Quake4有一段时间了。为了免得以后忘记,我把我在玩的时候遇到一些问题写下来做个备忘。

Quake4游戏封面

在Archlinux上安装Quake4很方便,AUR上就有人提供PKGBUILD,下回来makepkg之即可,但要确保 /tmp 有足够的剩余空间来解压程序,如果和我一样 /tmp 目录是挂载到 tmpfs 上的,空间不多的情况下需要自行修改解压的路径,下面是我改好的PKGBUILD(还需要配合AUR里的相应文件)。

# Contributor: Andrew Simmons 

pkgname=quake4
pkgver=1.4.2
pkgrel=1
pkgdesc="Quake 4 Engine. You need the retail .pk4 files to play."
url="http://www.quake4game.com/"
license=('custom:"Quake 4"' \
'custom:"PunkBuster"')
depends=('alsa-lib>=1.0.6' 'sdl>=1.2.0' 'libxext' 'libgl')
arch=('i686')
install=quake4.install
source=(ftp://ftp.idsoftware.com/idstuff/$pkgname/linux/$pkgname-linux-$pkgver.x86.run \
$pkgname.sh $pkgname-dedicated.sh $pkgname-smp.sh)
md5sums=('b186954ab5fbadd57f7ca9519b5b0503'
'54f7cdb2aa75c1cee9fcbef2a3af507d'
'62137ca958cc8b8d3d42a49a8ada1ec5'
'7a70531044dc207a57a3c3cc4ed78336')

build() {
cd $startdir/src
chmod +x $pkgname-linux-$pkgver.x86.run
mkdir -p $startdir/pkg/opt/$pkgname \
$startdir/pkg/usr/bin \
$startdir/pkg/usr/share/licenses/$pkgname \
$startdir/pkg/opt/$pkgname/q4base
./$pkgname-linux-$pkgver.x86.run --target $pkgname -- -i $startdir/pkg/opt/$pkgname -b $startdir/pkg/usr/bin
# ncurses & gtk installers don't return 1 when canceled, so check that files are installed
ls $startdir/pkg/opt/$pkgname/q4base || return 1

install -m755 -D $pkgname.sh           $startdir/pkg/opt/$pkgname/$pkgname
install -m755 -D $pkgname-dedicated.sh $startdir/pkg/opt/$pkgname/$pkgname-dedicated
install -m755 -D $pkgname-smp.sh       $startdir/pkg/opt/$pkgname/$pkgname-smp

ln -sf /opt/$pkgname/$pkgname           $startdir/pkg/usr/bin/$pkgname
ln -sf /opt/$pkgname/$pkgname-dedicated $startdir/pkg/usr/bin/$pkgname-dedicated
ln -sf /opt/$pkgname/$pkgname-smp       $startdir/pkg/usr/bin/$pkgname-smp
ln -sf /opt/$pkgname/License.txt        $startdir/pkg/usr/share/licenses/$pkgname/License.txt
ln -sf /opt/$pkgname/pb/PBEULA.txt      $startdir/pkg/usr/share/licenses/$pkgname/PBEULA.txt
}

安装完成后需要将游戏DVD里的 pak001.pk4 到 pak012.pk4 和 zpak_english.pk4 这些文件复制到 /opt/quake4/q4base 下,然后在终端运行 quake4 即可进入游戏。

如果喜欢作弊,只要在游戏中按着 Ctrl+Alt+~ 调出控制台,输入作弊码即可。比如输入 god 就是无敌,输入 give all 能得到所有武器和子弹。但每次子弹用完后又要打开控制台从新输入,太麻烦了,这时可以编辑『/home/YOURNAME/.quake4/q4base/Quake4Config.cfg』这个文件,在里面增加快捷键绑定,比如我添加了

bind "KP_HOME" "testlight"
bind "KP_END" "god"
bind "KP_DOWNARROW" "notarget"
bind "KP_PGDN" "give all"
bind "KP_5" "spawn char_marine_tech_armed"

以后只要按小键盘上对应的键就能实现这些功能了。

最后说一下,比如我想跳到某一关,例如最后一关,网上说的那些命令我试过了,不行的,但可以使用devmap这个命令。方法是在控制台输入“devmap gmae/地图名”,这个好理解,但地图名怎么知道呢?方法也很简单,同样的控制台,用 dir 这个命令,相信用Linux的人对这个命令不是陌生了。