Random Tech Thoughts

The title above is not random

搞定Linux下共享Internet连接了

因为宿舍只有一个电话,adsl的话只能有一个人用,所以大家上网都是共享的。我用Linux上网的时候一直都是一个人用,总觉得这样不好,所以用过一段时间squid,把自己的机器当代理服务器来用。但那样对别人很多限制,而且要配置代理,不方便。

最近看了Gentoo wiki里面的Home Router Howto换到iptables,还算顺利。现在跟舍友共享上网只要他们改无线连接的默认网关和dns了。跟用windows共享没有区别了。

以前为同学写过一个如何共享上网的说明,可惜这里不能上传那个pdf文档。关于Linux的看Gentoo的Wiki吧,会有一点麻烦。暑假有空准备翻译一下那篇Wiki。

开始看SICP

开始看 Structure and Interpretation of Computer Programs,真的是一本不错的书!准备好好看,作些笔记。Lisp真是让人开眼界!

原来准备看How to design programs 的,但是看了一点感觉有点简单,而看 SICP 的时候感觉很需要动脑,也很受启发,不只是关于程序设计的,还有不少其他方面的启发。所以还是决定看SICP。

看这本书可以明显感觉到国外(至少说是MIT)在计算机教育上的理念与国内的不同了……

回答同学关于SuSE的几个问题

有同学新装了SuSE,问我问题,我就在这里回答了,这样对别人也有点好处吧。

第1个是中文字体的问题。我现在机器上能使用的中文字体只有宋体和楷体2个,怎么样才能把windows中的字体弄过来?

开个终端(konsole,gnome-terminal,urxvt之类),为说明方便起见,以下说明都是su切换到超级用户以后进行的,”#“为超级用户提示符。

  • 先挂载windows分区。 #mkdir winc #mount /dev/hda? winc
  • 问号换成你的Windows分区对应的分区号码。如/dev/hda1,/dev/hda2。

    顺便对Linux下的分区名做一下解释吧,没有耐心就跳过好了。Linx下对的一块IDE硬盘叫/dev/hda,第二块叫/dev/hdb,如果时SCSI的硬盘叫/dev/sda,/dev/sdb等,优盘也时作为SCSI设备的,所以插上优盘的时候你会看到/dev/sda。对每一个硬盘的分区安装顺序分别在刚才的设备名后加一个数字,如第一块IDE硬盘的第一个主分区为/dev/hda1,第二个主分区为/dev/hda2,而第一个扩展分区是/dev/hda5,第二个是/dev/hda6。这是因为主分区最多只能有四个。在进行分区的时候强烈推荐用fdisk进行,并且对自己的分区表最好有一个记录以备不时之需。(我曾经用cfdisk将扩展分区的开头一部分变为主分区时遇到过诡异的问题导致丢失2个分区的数据!当时也没有分区表的记录所以出了问题没有办法补救,至少我不知道怎么补救)

  • 拷贝你需要的字体到目标目录,一般放在/usr/share/fonts下,可以在该目录下建一个子文件夹,如winfonts。 #mkdir /usr/share/fonts/winfonts #cp winc/WINDOWS/Fonts/{sim,tahoma,arial*}.ttf /usr/share/fonts在这里换成你需要的字体
  • 接下来就是生成必要的字体描述文件了,并: #cd /usr/share/fonts/winfonts #mkfontscale #mkfontdir #fc-cache
  • 一般上面几步就可以了,如果要使这些字体在xlsfonts中也能看到的话(也就是使那些使用X字体的程序可以使用的话),还需要编辑/etc/X11/xorg.conf,在FontPath中加入/usr/share/fonts/winfonts。如果使用KDE的话可以用KDE的控制中心添加字体,那个只要点鼠标就可以了。

    薛瑞妮的网页里面看到的一个字体配置文件,我一直用着,基本上没有修改过,但是效果很好。放到$HOME下面就可以了。

    第2个是显卡的驱动问题。我的显卡是ATI的X700移动版,在WINDOWS下面可以支持3D加速的,但是在SUSE下面不支持了。

    这个问题解决不是那么方便的。没有3D加速是因为没有安装驱动的原因。SuSE下面安装显卡驱动有她自己的方法,具体你要看/usr/share/doc/suse-releasenotes里面怎么说。(具体的文件名我忘了,大概就是在那个目录下,安装过程里面你如果注意的话其实已经看到的了)我用SuSE 10的时候只有一次成功安装ATI的显卡驱动,后来的安装都失败了。Gentoo下面装ATI的显卡驱动倒是一直很顺利。我的是显卡mobility radeon 9700,不知道你的显卡现在ATI的驱动支不支持。

    对我来说ATI的显卡驱动装不装无所谓,xorg里面的ati的驱动已经有2D加速了,我在Linux下面没有什么要显卡3D加速的程序要跑,所以一般都不装ATI的驱动了。而且如果用了ATI的驱动的话会无法使用suspend2来休眠(好像在xorg.conf里面不使用dri的话就没有问题),而休眠对我来说比较重要。

    第3个是视频的播放问题。我怎么样才能安装好MPLAYER?

    SuSE下安装MPlayer的话可以使用YaST,不过先要设置好源,而且要能上网,这两个问题解决的话安装软件就非常方便了,基本不用担心依赖性问题。具体办法如下:

  • 打开YaST控制中心,在软件那一项下单击“安装源”,然后到这里来找源并添加,注意选择对应你的SuSE版本的目录。一般用Packman和Guru那2个源就可以了,不过Packman有时候连不了导致后面安装软件时老是刷新不了软件包列表,所以一般就不要添Packman,只用Guru就够了,这个源里面常用的软件都有了。
  • 添加完安装源点完成以后再在控制中心里面单击“软件管理”,会用比较长的时间启动,启动后会刷新安装源的软件包列表之类的。启动完以后有搜索软件包的功能,在里面填入你要搜索的软件包名字然后在右边的列表中选中安装,然后点完成,接下来YaST就会自动下载并安装你选中的软件包了。
  • 这个源的MPlayer自动依赖于win32codecs的,所以选择安装MPlayer时自动就会安装win32codecs的,这样在安装完MPlayer以后基本上所以的媒体格式用MPlayer都可以播放了。包括rmvb,avi等。个人更推荐使用xine-libs加一个图形化前端。一是因为xine-libs作为一个库有更多的软件可以使用她,如amarok就可以使用她从而播放wma(当然也需要win32codecs);二是因为她播放媒体时使用的资源更少一些,跟人感觉更平顺,尤其时对某些rmvb格式的电影时;三是她支持DVD的导航菜单。图形前端推荐kaffeine(KDE下的),totem(GNOME下),gxine等(我的选择,因为没有KDE,也没有GNOME)。不过SuSE光盘里面安装的kaffeine和xine-libs功能受到很多限制,要在源上更新以后才可以利用起win32codecs里面的那些解码器的功能,要看DVD的话还需要安装一个libdvdcss。

    最后如果想学习Linux的话还是先看一点书吧(非常推荐《UNIX教程》,英文版的名字是UNIX the text book),学一些基本的命令,搞明白一些系统的知识很有必要。改变一下习惯和Windows式的思维方式也有必要。有问题先上网搜索,好好利用Google!其实上面我说的这些网上都有,感觉有点重复劳动了。

    祝好运!:–)

    关于Gentoo的更新

    我的系统以前都是一个月更新一次,也就是说运行emerge -avuD world。用的是~x86,每次都有很多更新,这次更是有400M!有点怕编译时间了。其实升级的软件包有很多都是小版本号的改动,r1到r2或者其他什么的,对这些升级没有那么必要。所以这次决定自己决定要升级哪些包了,那些只是小版本号改动的软件就不升级了。这样虽然麻烦了一点,但是就不用等那们久来编译了。等有空的时候再来做整个系统的更新好了。

    修改udev Rules来改变网络接口的名字

    我的无线网卡接口的名字一直是eth1,想把它改成wlan0,在gentoo-help mailing list里面看到只要修改udev rule就可以了。具体方法:在/etc/udev/rules.d下面创建一个文件,文件名随意,注意文件名开头的数字是用来控制文件读取的顺序的,小数字先被读取。udev使用最先发现的规则,之后的都会被忽略。我在该目录下有2个文件,分别是05-udev-early.rules和50-udev.rules,我创建的是10-local.rules。然后在文件中加入一行

    DRIVER==”ipw2200”, NAME=”wlan0”

    重启以后就生效了。

    Boost Serialization库使用中的一点问题

    • 使用stl容器还有string时需要包含serialization库中封装过的头文件,不能直接使用容器原来的头文件。

    • 保存非const对象时遇到编译时错误。比如如下的代码:
          T t; // No problem if use "const T t;"
          std::ofstream ofs(filename);
          boost::archive::text_oarchive oa(ofs);
          oa << t; // Cause compile time error.
      
      这个在boost serialization的文档中rationale下有说明,主要是因为Object tracking而引起的。Object tracking通过跟踪指针地址来防止对同一个对象的多次保存。我的解决办法是
      1. BOOST_CLASS_TRACKING(classname, boost::serialization::track_never)宏来禁止对类的Object tracking。不过这样就失去了Object tracking的功能,如果通过指针来保存对象可能会产生问题。
      2. 需要保存或恢复对象的时候使用专门的函数。如:
        template
        void save(const Obj& s, const char* filename) {
            std::ofstream ofs(filename);
            boost::archive::text_oarchive oa(ofs);
            oa << s;
        }
        
        template
        void restore(Obj& s, const char* filename) {
            std::ifstream ifs(filename);
            boost::archive::text_iarchive ia(ifs);
            ia >> s;
        }
        
        这样就不会产生编译时错误了。不过我对C++的了解实在是太少了(实际使用的过程中感觉尤其明显),看了例子以后虽然知道这样做可以解决问题,但是不知道究竟是为什么。

    XCDRoast

    前段时间买了两张The Corrs的专辑,想拷到电脑里,才发现没有合适的易用的软件。(好像系统里本来就有cdda2wav,不过从来都不知道,是后来才发现有这么个命令行的东东)上网搜这方面的软件,结果发现不是依赖gnome就是kde,想放弃了。然后想起电脑上还没有一个图形化的刻录软件,cdrecord虽然已经装了,但是懒得去学命令行的用法了,所以就改变了目的。看过一篇介绍Linux下刻录软件的文章,里面提到了XCDRoast,因为它依赖的东西少,而且功能看似不错所以就emerge了它了。真是惊喜,这个软件不仅提供刻录的功能,而且还支持CD抓轨,真是瞎碰碰上了。马上把CD抓成wav,然后是转成ogg。哈哈,一个软件解决了我两个需求,真是太好了。

    使用过程中遇到了一些问题。XCDRoast安装完先要进行配置,配置只能在root用户下面才可以进行。sudo启动图形化的应用程序好像有问题,所以还是用su切换到root用户。如果程序没有检测到你的光驱可以手工添加,指定/dev/hdc就可以了,不要管它说的什么scsi之类的内核配置方面的东西。

    它的抓轨其实用的是cdda2wav,刻录用的是cdrecord。cdrecord的作者是个德国人,他的主页上有个很有意思的地方,如果你看到那个FreeBSD的gif图片不要忘了点击一下,会有一张有意思的图片出来的 :–)

    Emacs Unicode的中文字体……

    因为要unicode的支持,我一直都是用的Emacs 23,也就是Emacs unicode branch。虽然还是alpha阶段,但是直到上个星期它一直都很好的工作着。上星期趁着系统更新重新emerge了emacs-cvs,结果发现更新以后的Emacs中文显示很小,看上去像是楷体,根本没有办法看(不过有一点,在LaTeX模式下面发现中文字体有大小区别了,不在像以前那样始终只有一个大小,或许是Emacs 23的新特性吧) :–( 哭啊,Google好久,怎么设置都没有办法让中文显示的好一点。早知道就不重新emerge了,以前什么设置都没有做中文照样工作的很好的。唉,再也不乱随便更新了……

    上linuxsir发了帖子求助,现在用一下的.Xdefaults配置凑合着能用了。

    Emacs.Font: fontset-chinese Emacs.Fontset-0: -adobe-courier-medium-r-*-*-14-*-*-*-*-*-fontset-chinese,\ ascii: -adobe-courier-medium-r-normal–14-*-*-*-*-*-iso10646-1,\ chinese-gb2312:-*-simsun-medium-r-*-*-16-160-72-72-p-160-iso10646-1

    过一段时间再emerge吧,反正已经不好了,也不怕了。

    换了一个鼠标的主题

    发现Gentoo里面提供了几个鼠标的主题,几个是kde-look.org的,还有一个叫gentoo-xcursors。emerge了gentoo-xcursors和blueglass-xcursors,都不错,其他没有试。要使用的话编辑/usr/local/share/cursors/xorg-x11/defaults/index.theme,在里面加入

    Inherit=gentoo-blue # 可惜不知道怎样修改大小

    也可以编辑~/.Xdefaults(不过这样效果就只对当前用户有效,而且我发现这样的话firefox里面的鼠标指针还是原来的),在里面加入

    Xcursor.theme: gentoo-blue Xcursor.size: 32 # 控制指针大小的

    然后重启X就可以看到漂亮的鼠标指针了。呵呵,桌面又漂亮了一点了 :–)