升级到Ubuntu 8.10

花了一天多的时间将笔记本(IBM Thinkpad T43)升级到了Ubuntu新发布的8.10版本。

升级过程很顺利(就是时间比较长),其间遇到了Network Manager小程序不停地弹出消息对话框,说“找不到所需的资源,无法继续”,但不影响升级包的安装。

重启系统后,Network Manager小程序居然不能加载了,在launchpad里搜索到解决办法是只在/etc/network/interfaces文件里保留下面这两行。

auto lo
iface lo inet loopback

第二个问题是,升级后无线网卡不工作了,用dmesg | grep ipw2200查看,有如下类似的信息:

ipw2200-bss.fw request_firmware failed: Reason -2
ipw2200: Unable to load firmware: -2
ipw2200: failed to register network

google后知道是firmware加载的问题,检查/lib/firmware目录,没在当前使用中的内核目录(/lib/firmware/2.6.27-7-generic/)里找到这些firmware文件。从ipw2200的网站上下载后解压到这个目录后重启就解决了。(补充:使用原来的2.6.24内核启动系统无线网卡是正常的)

今晚搞定了T43的bluetooth和infrared连接

蓝牙:

我用的是USB的蓝牙设备。执行完下列命令

$ sudo mknod /dev/rcomm0 c 216 0
$ sdptool add --channel=10 OPUSH
$ sudo rfcomm bind /dev/rfcomm0 00:15:A0:EF:D7:94 10

$ obexserver

就可以接收手机发过来的文件了。

参考了这两个帖子:
http://ubuntuforums.org/showthread.php?t=34740
http://forum.ubuntu.org.cn/about741.html

红外:

/etc/modprobe.d/irda-utils 里面添加这两行

alias irda0 nsc-ircc
options nsc-ircc dongle_id=0x09 io=0x2f8 irq=3 dma=3

/etc/modules 里添加一行

nsc-ircc

执行这个命令

$ sudo irattch irda0 -s

用这个命令测试

$ sudo irdadump

接收手机发来的文件

$ ircp -r ~/images

参考:
http://forum.ubuntu.org.cn/viewtopic.php?t=18877
http://www.thinkwiki.org/wiki/How_to_make_use_of_IrDA

ubuntu下使用T43的指纹识别设备

我参照这个Howto设置了T43上的指纹识别设备,在登录GDM时可以刷指纹了。

1. 安装bioapi framework

从http://www.qrivy.net/~michael/temp/下载bioapi_1.2.3_i386.deb


$ sudo dpkg -i bioapi_1.2.3_i386.deb

不用理会出现的"Ignore the warning about not finding /usr/lib/libqtpwbsp.so"这个错误信息
用ldconfig命令验证
$ ldconfig -p |grep bioapi
我这里的输出:

libbioapi100.so.0 (libc6) => /usr/lib/libbioapi100.so.0
libbioapi100.so (libc6) => /usr/lib/libbioapi100.so
libbioapi_mds300.so.0 (libc6) => /usr/lib/libbioapi_mds300.so.0
libbioapi_mds300.so (libc6) => /usr/lib/libbioapi_mds300.so
libbioapi_dummy100.so.0 (libc6) => /usr/lib/libbioapi_dummy100.so.0
libbioapi_dummy100.so (libc6) => /usr/lib/libbioapi_dummy100.so

2. 安装并配置指纹识别设备的驱动

2.1 安装驱动
从http://www.upek.com/support/dl_linux_bsp.asp下载TFMESS_BSP_LIN_1.0.zip
$ unzip TFMESS_BSP_LIN_1.0.zip -d tfmess
$ cd tfmess
$ sudo sh install.sh /usr/lib

2.2 配置权限使非root用户也可以使用

$ sudo addgroup --system bioapi
$ sudo addgroup --system usbfs
$ sudo adduser yournormaluser bioapi
$ sudo adduser yournormaluser usbfs

把yournormaluser换成你的用户名。
ubuntu Dapper使用了udev,所以按照howto里说的,修改/etc/udev/permissions.rules,添加一行
SUBSYSTEM=="usb_device", MODE="0660", GROUP="usbfs"

2.3 用TFMESS_BSP_LIN_1.0.zip带的工具测试

$ cd tfmess
$ cd NonGUI_Sample
$ vi main.c

注释掉这行 #include "port/bioapi_port.h"
编译$ gcc -o Sample main.c -L/usr/local/lib -lbioapi100 -DUNIX -DLITTLE_ENDIAN
应该有一个叫Sample的程序生成。用root身份运行这个程序
$ sudo ./Sample
出现一个菜单:
e .. Enroll
v .. Verify
m .. Verify Match
c .. Capture and Create Template
q .. quit
输入e,再按照提示给出你的用户名后就会出现一个输入指纹的小窗口,连续刷3次,你的指纹就录入到文件中了,文件名是你的用户名+.bir,输入v是检验已输入的指纹。

bioapi_enroll.jpeg

bioapi_enroll1.jpeg

3. 安装pam_bioapi
下载http://www.nax.cz/pub/bioapi/pam_bioapi/pam-bioapi_0.3.0.tar.gz

$ sudo apt-get install libpam0g-dev
$ sudo apt-get install sqlite3 libsqlite3-dev
$ tar xvzf pam-bioapi_0.3.0.tar.gz
$ cd pam-bioapi
$ ./configure --libdir=/lib && make
$ sudo make install

下面要取得指纹设备的序列号用来设置pam

$ SERIAL=`sudo BioAPITest | sed -ne "/Fingerprint/{n;n;s/^.*: \(.\{9\}\)\(.\{4\}\)\(.\{4\}\)\(.\{4\}\)\(.*\)/\1-\2-\3-\4-\5/gp}"`
$ echo $SERIAL

结果是像这样的一串字符 {5550454b-2054-464d-2f45-535320425350}
修改/etc/pam.d/gdm
把 @include common-auth 这行替换成下面两行,其中第一行中的第四列就是前面那个$SERIAL的值。

auth sufficient pam_bioapi.so {5550454b-2054-464d-2f45-535320425350} /etc/bioapi/pam/biopasswd.db :0
auth required pam_unix.so nullok_secure

然后用root身份执行test_enroll-pam_bioapi命令(在/usr/local/bin下)来保存用户对应的指纹信息。
$ sudo test_enroll-pam_bioapi
完成后,/etc/bioapi/pam下应该生成一个biopasswd.db的SQLite数据库文件,可以用sqlite3命令查看。

$ sudo sqlite3 /etc/bioapi/pam/biopasswd.db
sqlite> .schema
CREATE TABLE biodata (id INTEGER PRIMARY KEY,uid INTEGER,uuid TEXT,header BLOB,data BLOB,signature BLOB,type INTEGER,other BLOB);
sqlite> select count(*) from biodata;
3
sqlite> .quit

如果没有生成,就用sqlite3命令手工建立这个数据库。

$ sudo sqlite3 /etc/bioapi/pam/biopasswd.db
sqlite> CREATE TABLE biodata (id INTEGER PRIMARY KEY,
uid INTEGER,
uuid TEXT,
header BLOB,
data BLOB,
signature BLOB,
type INTEGER,
other BLOB);
sqlite> .quit

可以多次执行test_enroll-pam_bioapi命令为一个用户关联多个指纹。用test_verify-pam_bioapi命令验证指纹。
也可以安装pamtester针对某个pam service进行测试。

$ sudo pamtester gdm guoyong authenticate

没有问题的话,就可以退出Gnome测试一下了。
对于屏保解锁,目前只有针对xscreensaver的patch,需要重新编译xscreensaver。我试着编译了5.0的,发现解锁时还是要先输入字符到密码对话框,然后才验证指纹。目前还没有针对Gnome-screensaver的patch,所以就暂时放弃了。 http://bugzilla.gnome.org/show_bug.cgi?id=338635 这里有一些有关的讨论。