一个动态设置壁纸的脚本的设计与实现

这是我想在Awesome的设置中添加的一个有特色的功能,壁纸随着时间变动,而且可以直观地感受到时间。我花了半天时间找了24张壁纸,都是一些CG图片,按照上面的光照什么的设定与其相对应的时间,与一天的24个小时一一对应。

原本的设计是用Awesome自己提供的一个定时器钩子函数来更新壁纸,这样最终是用的是Lua脚本,但是与Awesome耦合性太强。我觉得完全可以用一个Shell脚本来完成。这个脚本的主要流程是这样:

首先根据当前的时间来找到对应的图片然后设置之,然后隔一段时间到下一个整点,再更新之,以后都是休息一小时更新一次,为了增强效果,每次更新壁纸时都会发出“嘀”的一声。

这里有几点,一是如何设置壁纸。设置壁纸似乎有许多程序,我在Awesome默认的设置壁纸的脚本awsetbg里看了一下,发现它是通过探测系统中的壁纸设置程序来设置的,在我的系统中是使用的ImageMagick套件中的display来设置的。了解了这一点,就可以直接用display来设置了,不过如果KDE在运行,就直接使用kdesktop的DCOP接口来设置了,再调用play来播放声效。

第二点,就是保持此程序单实例运行,即任何时候此程序都只能有一个进程。我目前的实现是使用pgrep来获得最早运行进程的id,若与当前进程id相同则说明只有一个实例,反之则说明已有实例在运行,当前进程是重复进程,需退出。

还有一点,就是计算当前时间到下一个整点所需的秒数。能进行简单计算的程序很多。如expr,但这个程序是将所有的操作数和操作符作为他的参数,而很多操作符本身可能被Shell转义,如乘号*,这导致expr的使用非常麻烦。Lua也可以非常方便地计算,不过为了使用更为通用的程序,我选择了bc。这是GNU的一个并不太出名的程序,它可以计算任意精度的计算。其实还有一个dc,不过他的表达式是所谓的逆波兰式,也就是后缀表达式,写起来就特别怪异。

下面是完整的脚本: 

#!/bin/sh

function show_wallpaper() {
        if pgrep kdesktop >/dev/null ; then
                dcop kdesktop KBackgroundIface setWallpaper "$1" 1
        else
                display -sample 1440x900+0+0 -window root "$1"
        fi
    play "/usr/share/sounds/KDE_TypeWriter_Bell.wav" -q
}

if [ -n "$1" ]; then
    show_wallpaper "$1"
    exit 0
fi

function update_wallpaper() {
    wallpaper_path="$HOME/.config/awesome/wallpapers"
    hour=`/bin/date +%H`
    wallpaper="$wallpaper_path/$hour.jpg"
    show_wallpaper "$wallpaper"
}

update_wallpaper

# keep the previous running instance
[ `pgrep -f "$0" -o` != $$ ] && exit

# another way to using dc instead of bc is
# sleep `/bin/date "+60 %M - 60 * %S - p" | dc`s
sleep `/bin/date "+print((60-%M)*60-%S)" | bc`s

update_wallpaper

while true ; do
    sleep 1h
    update_wallpaper
done

 

Linux Comments(0) 2009年1月18日 03:34

读Guile的海龟作图有感

Guile是Scheme的GNU实现,在Guile的info文档里,有关于它的历史说明。本来TCL是扩展语言的一种广泛选择,可是Richard Stallman对TCL很不喜欢,它觉得用TCL不适合用于扩展语言,于是后来就弄GEL,再更名为Guile。Guile和Richard Stallman的大作Emacs的Emacs Lisp一样,也是函数式的编程语言,是Lisp的一个分支。我在Guile的官网上下载了它的一个海龟作图的教程,研究了一下。

这篇文章写得还行,它以LOGO语言的经典教程--海龟作图为例,由浅入门地说明了用Guile来写扩展的基本方法,虽说对于我来说有些啰嗦,不过总的来说很有用。不过书中直接使用了X来作为作图的工具。我在我的机器上并没有实现成功。而且还发现此教程还使用了一些过时的宏,看来此教程写得比较早,而且教程本身就说了,当时Guile的教程也比较少。不过作为作图而言,Scheme本身有它的GTK+的绑定,用GTK+的方法可能更为实用。

不过我目前看来,Scheme语言学术上看有意义,毕竟是函数式语言,可是在工业上运用上并不很广,它的语言看起来要怪异。而与Lua语言相比,Lua虽与C类语言有些差别,但是总的来说非常简单,而且学起来也很容易上用。就我目前所知,Lua有游戏,如魔兽世界,一些窗口管理器如Awesome,Ion现在以Lua为配置和扩展语言,另外一个新的TeX引擎--LuaTeX也内置了Lua编程语言。而Scheme我目前所知的就只有Gimp的Script-Fu扩展是基于Scheme。因此我个人觉得在扩展语言上,Lua比Scheme更有前途。

Linux Comments(1) 2009年1月09日 10:22

使用Awesome 3.1后的一些感受

最近一直都在研究配置Awesome 3.1,几天下来略有所得。总的感觉,awesome也算是有点复杂的窗口管理器,它有多种布局方式,而且有一套基于Lua的扩展机制,另外它还以tag代替workspace等一些思想。下面是一些各方面的感受。

首先是它的基于Lua的扩展机制,这一套机制据说是从3.0版本才引入的,而且似乎是受了ion 3的启发,我就是因为这点才吸引开始研究awesome 3的。与ion 3的Lua扩展机制相比,awesome 3显然要显得轻松和随意得多,它的所有的相关库名都是一些形容词,如awful,beautiful,wicked,naughty,tabulous,最近好像又加了一个叫shifty的东西。这显得很有意思,而ion 3的则要古板一些,都是些以W为前辍的一些类,还完整地用了一套面向对象的机制,显得很复杂,而且其配置手册我最近还专门打印一本,里面的内容还颇为详尽。Awesome的文档是用LuaDoc生成的网页,由于编译Awesome 3时我的机器里还没有装LuaDoc,所以其API文档只能在线浏览。Awesome有一个rc.lua文件,就是默认配置文件,总的来说,Lua本身来说是一门很优雅的语言,简单清楚,不过默认的配置文件虽然很好懂,可总显得不是漂亮,相比我从网上下载过的Emacs扩展脚本,代码都相当好看。我在这个配置文件的基础上再稍做整理,编写了属于自己的配置文件,而ion 3的配置我目前还没有研究,因为太复杂了,不过我觉得它的扩展能力应该比Awesome 3有过之而无不及。

Awesome 3里自带了一些简单的widget,如菜单,文本框等,可以用来作为扩展界面的一些基本部件。而其事件响应是通过hook以及键盘和鼠标的绑定来实现的,不过从命名风格上来说,并不太严谨,而且接口不太稳定,3.0和3.1就有一些不同,显然Awesome的作者毕竟是初次使用Lua,接口设计上不成熟。

Awesome 3与ion 3的界面上的不同点是其使用了xft,这使得中文的显示没有大的问题了,这一点也是我对ion 3不满的原因之一。ion 3的作者显然对xft一点都感冒,其实对于英文来说,X核心字体的确足够了,用Terminal字体就很好了,可是中文不行,非得用xft才能比较漂亮地显示。不过,awesome的中文常有乱码,这一点总是很麻烦。说起来,许多这样的软件对中文总有这样或者那样的问题,谁叫计算机不是我们发明的呢。我从网上听说Awesome 3是不多的使用了pango但没有使用gtk的程序之一,awesome的中文显示就是用pango来渲染的,pango据称是非常强大的国际化的文字渲染库,它的乱码不知道问题是出在哪里。

再说说我的配置,我的配置思想主要有三个:一是与已有的习惯相同或相近;二是尽量不要与应用程序的快捷键冲突,我的做法是所有的窗口管理器都是以Windows徽标键为修饰键,因为这个键一般不是应用程序快捷键,所以用它作为窗口管理器的专用修饰键是最好不过了;最后一个就是有规律,目前Win+字母键都是启动应用程序,Win+功能键是一些窗口操作,如关闭窗口Win+F4,Win+数字键是切换 tag,Win+左右方向是左右切换tag,Win+上下是切换布局,这些都很有规律。

到目前为止,Awesome 3还不是我心目中理想的窗口管理器,一个是乱码问题,第二个是配置文件显得不是那么优雅和强大,还有一个很大的问题就是如果配置文件出了运行时错误,则根本没有出错提示,这点比较麻烦,我只能往里面插入一些测试代码来查找错误。

Linux Comments(0) 2008年12月21日 06:33

Ion3相关术语及试用感受

光看Ion3的配置说明文档很难懂作者所设计的Ion3相关的术语,直到今天凌晨花了一些时间按照它的手册页对照快捷键试用之后,才慢慢明白相关的术语的含义,也明白了一些X Window相关的知识。

X Window对一些常见按键与我们的平时的说明不大一样,而Ion3的作者显然对X Window了解很深,他所设计的配置就与我们平时的说法不尽相同。首先是对几个重要的修饰键的叫法,Control和Shift叫法与我们的一致,但Alt键可能出现较晚或是有些键盘没有,它映射到Mod1上,而Windows徽标键则称之为Mod4。这与FluxBox里的一样。而鼠标的说法就更奇怪了,左中右依次称为Butto1,Button2和Button3。

下面是一些Ion3所涉及到的相关窗口术语:

Screen: Screen就是电脑的屏幕,它与物理上的显示器一一对应,显然X Window考虑到了一台主机有可能有多台显示器的可能,因此一台机器上就可能有多个Screen.

RootWindow: 对于一台主机始终只有一个。对于多个显示器来说,不同Screen是同一RootWindow所的不同部分,有一个叫Xinerama的库,它可以将整个大的内容分成几个显示器分别使用,不过我感觉这东西我生活中遇到的情况很少。

ClientWindow与Frame: 说起Window与Frame,在不同程序里说法不一样。在Emacs里,Frame就是指一个Emacs窗口,而Window则是Emacs里再分隔的窗格,而在网页里就正好相反,一个浏览器窗口里显示一张网页,如果这个网页是框架网页,那它就有若干个Frame,共同组成Frameset。在Ion3里,ClientWindow就是窗口的内容,而Frame就是在这些内容之外再加上外围一圈边界和标题栏。Frame有好几种状态,一种是一般的浮动状态,虽然Ion3是个平铺式的窗口管理器,但它还是可以允许窗口浮动;另外就是占用屏幕大部分的空间,就好像多标签页浏览器里的各个页面一样;还有就是几个Frame挤在一个屏幕里,就是下文中的Tiling,最后就是FullScreen,这时Frame只显示其内部的ClientWindow的内容,并占满整个屏幕。前一种称为Float/Detached,后面两种都是Tiled状态。

Workspace: 就是所谓的虚拟桌面,Ion3默认启用了三个。这个东西是UNIX桌面的特色,在Windows里要使用专门的软件才行。不过我对这东西不感冒,一般都只用一个桌面。

Tiling: 这个东西是Ion3的核心,tile就是瓦片,它是若干个Frame以无缝隙无重叠并尽量占满空间的组合。其布局与网页中的Frame和Emacs里的Window完全一致。

Tag: 就是对窗口进行标记。

Attach: 若A attach B,C,就是把B和C拉到A一起,A不同,B,C变成与A相同的状态,与逆操作是Detach。

Multiplex: 指的是若干对象互斥显示的组合,一次只能显示一个对象。各个Workspace之间,几个Frame被Attach在一起,都是这种组合。

Empty Frame: 是一种特殊的Frame,它内部没有任何ClientWindow,纯粹是为了占空间,算是Frame的Placeholder吧。当它Attach某个不是Empty Frame的Frame时,就等于用那个Frame覆盖自己。Ion3启动时,每个Workspace里就有两个Empty Frame水平并列。另外,当将一个没有与其Attach的Tiled Frame分割时,也会产生一个Empty Frame。

其实Ion3最吸引我的是它的Lua编程,并非是它的tiling风格,可是Ion3的标题栏总是有乱码,这一点有点烦心,而作者在主页上对antialiasing等字体技术破口大骂,说什么是ugly self-defeating kludge,看来一时半会让Ion3用上漂亮的字体恐怕比较麻烦了。相比Awesome,它的Lua编程似乎要复杂得多,不过它的界面布局特别是那个底栏命令输入栏我还是比较喜欢,只不过界面比较守旧,所以它不大可能成为我心目中理想的Window Manager。

Linux Comments(0) 2008年12月13日 18:28

Ion 3与Awesome 3.1

Ion和Awesome两个都是平铺式的窗口管理器(Tiling Window Manager),我先知道ion3,在IBM DeveloperWorks上有一篇中文的文档。让我最感兴趣的是它的配置文件是用Lua所写,而Lua就是我个人比较熟悉和喜爱的脚本语言之一。这引起了我很大的兴趣。于是专门研究了一番,而awesome是从Linuxtoy上看到了,从下面的评论来看,似乎也是个不错的平铺式窗口管理器,而且到awesome3时,其配置文件也是用Lua所写,现在Lua的配置文件方面的优势终于被这些开源软件所认识到了。

Lua作为配置文件的的确非常方便,它语法虽与主流的C系语言有些差别,但总体来说还是很容易上手的,而且语法特别简单,但表现力又非常丰富,作为扩展语言的确不错。而且它本身也有函数式的编程特点,而GNU主推的Guile与其相比就差了些,它的语言对于熟悉函数式语言的也许很友好,但是对于大多数程序员来说还是显得陌生了些。呵,扯远了。下面是我对两者的一些感受:

先说安装,这两个我都是采用源码编译安装。Ion3的编译也比较简单,直接make就行了,连./configure也省了。而awesome的安装就要相对麻烦一些,它使用了cmake来构建,由于使用了xcb,而且版本是1.1,而我的系统已装上的是xcb-1.0,又得上freedesktop上下载并编译之,而且awesome还需要xcb-util和libev,这两个东西又得下载编译,在编译过程中还发现我的pango有问题,awesome使用了pango里的一个叫pang_layout_set_height的函数,而我的系统里那个pango版本里并没有定义,我只好又从pango的官网上下载编译之。既然awesome这么折腾,相对而言它所使用的技术也许有过人之处,不过我从网上听说xcb的兼容性较差,使得我对awesome的稳定性捏了一把汗。

再说界面,ion3的标题栏中文支持不好,需要使用特殊的字体,所以界面并不吸引人,这与它的作者是实用主义者有关,ion3的设计理念就是实用为主,界面则次要些,其实对我来说,ion3的界面还行,还能看。而且总体的布局我还算满意。而且操作感很好,按F3就在下面弹出类似Emacs的minibuffer之类的东西,可以输入命令,这一点很好。而且最下面的状态栏直接显示当前的时间,以后也许还能配置成显示其它有用的信息。

awesome的界面比ion3要“现代”得多,它的中文支持很好。但是在布局设置上不如我意,它居然在左上角给我开了九个工作区(桌面),我个人不喜欢多个桌面,许多Linux发行版默认有四个桌面,而MagicLinux减到了两个,我还嫌多,直接减少到只剩一个。多桌面许是Linux桌面系统的特色,但是我一直用不习惯,可能是受Windows毒害太深了吧。awesome有一个很无聊的地方是在其右上角显示时间的地方居然用C语言的time函数的返回值!这个值是返回从1970年1月1日0时0分到系统的当前时间所经过的秒数,鬼才知道现在是几时几分!。awesome默认使用焦点跟随鼠标,其实很多其它的窗口管理器也有这个选项,只是默认没启用而已,我觉得果然好用。

最后说一下配置,虽然这两者都是使用Lua,但是awesome简单一些,它的配置文件相对简单而且易懂,我现在只看了前面一点点内容,觉得很好理解。而ion的扩展层次可能要强大一些,作者专门写了一篇文章来讲述,可能是作者本身是芬兰人的原因吧,我对他的文风真不敢恭维,很多句子我都不能读透,而且他定义的名字真是很难理解,下面仅举一例:"WRootWin is the class for root windows of X screens. It is an instance of WScreen",WRootWin是一个类,可是后面说是一个WScreen的一个instance,我只听说XX对象是某个类的instance,没听说某个类是另外一个类的instance。而且他所描述的类的层次我看了很久都不明白,不过有点可以肯定的是,它的类层次与X Window本身的设计有关,我对X Window系统本身理解不深,这使得我理解有困难吧。

Linux Comments(1) 2008年12月13日 09:24

降级系统为MagicLinux 2.1 beta

  自从上次装了MagicLinux 2.1 RC3以后,发现系统里问题不断,原来的问题通过重装没有解决,而后来用apt-get upgrade后,连声音就启动不了了。真是麻烦,简单说来,系统里有以下故障:
    - OpenGL不可用,我原以为是换了显卡以后,缺少驱动程序的问题。这个问题导致我无法在Linux里开发骨架提取程序。
    - 启动udev时,系统弹出一大堆警告,这些警告似乎不影响系统。但是每次启动看到那些警告可真是烦人。
    - 网络自启动时失败,我记得启动slpd成功后,会说Multicast Route Enabled,可是系统中却失败了。害得我总是启动时用ifup eth0手动激活网卡。
    - 还有系统启动时,会自动恢复会话。这个选项我都不知道从哪里找起,搞得我很烦。MagicLinux的升级系统真是麻烦,出事好多次了,我以后再也不用它这个apt-get upgrade了。
现在我重新装了老一点的版本,为了作为以后安装修改配置的参考,我把修改默认配置的过程记载了下来如下:

* 桌面环境
 - 将快速启动栏与任务栏改大,并去掉不常用图标
 - 将 Konqueror 的图标设为横向巨大并保存默认
 - 配置 Konqueror 显示关闭按钮而不是网站图标
 - 将 Konsole 的颜色设为黑底白字并将标签栏放在顶部,并设其字体为 Courier 10-Pitch
 - 设置窗口修饰为“塑料”主题
 - 图标设置
   - 安装 Novola 图标并设为默认
   - 删除 Amarok 在 Nuvola 中的默认图标,这样 Amarok 的图标将会变回自带的狼头
   - 用备份的 xcursor 目录来代替 /usr/share/icons/xcursor 以修改默认鼠标主题
   - 复制 Firefox 和 Skype 的图标到 Nuvola 文件夹
 - 关闭启动反馈
 - 字体配置
   - 安装一系列中文字体: ZhunYuan, etc
   - 将字体配置中的 Tahoma 和 NSimSun 改成 Verdana
   - 将桌面字体设为 Bitstream Charter 12
 - 登录管理器
   - 安装 Clean KDM 主题并设为默认,将其它主题删除
   - 背景设为“线条族”
   - 在“便利-预先选择用户”设为上一次,并勾上“聚焦于密码域”
 - 设置 -> 区域和辅助功能 -> 键盘快捷键 -> 面板 -> 切换显示的桌面, 添加备选键 Win+D

* 应用程序
 - 卸载软件:
   - kdebluetooth
   - synatics(ksynaptics,libsynaptics)
   - wlassistant
   - qterm
   - kdenetworkconf
   - usermode-gtk
   - hplip-gui
   - Magiconf
 - 用 RPM 包安装:
   - gcc-4
   - glibc-2.7
   - kmess
   - bash-completion
   - skype
   - Adobe Reader 8.1.3,安装完成还原PDF文件的关联,仍默认使用KPDF打开
 - 用 apt-get install 安装:
   - cmake
   - gimp
   - ImageMagick
   - FreeType2
   - Qt4
 - 复制安装 TexLive
 - 升级 kde 和 scons
 - 编译安装
   - Emacs
   - 数学计算环境
     - gnuplot,绘图工具,octave需要其作为绘图前端
     - umfpack, 此包的安装需要回答一些机器配置问题,比较麻烦
     - COLAMD,CCOLAMD,CXSparse,UFConfig,此四包乃佛罗里达大学计算机信息科学与工程系所开发,编译时四包在同一目录下,安装时则将头文件与静态库复制至系统相关目录即可,而非make install
     - glpk, GNU 子项目,使用一般GNU开发约定
     - octave,交互式数值计算软件,需要先安装前面所有的工具,方能对稀疏矩阵的计算支持尽可能完备

* 配置文件
 - /etc/fstab
 - /etc/apt/sources.list.d/magic.list
 - ~/.bashrc:
   - 去掉 mv, cp, rm的别名,免得处理文件要反复确认
   - 设置 PS1 环境变量,去掉用户名和主机名,因为对于我的工作环境一直都是一样
   - 将 TexLive 的 bin 路径加入环境变量 PATH

* 关闭服务
 - bluetooth, 不需要蓝牙
 - ipw3945d, 没有无线网卡
 - smb, 不需要与局域网中的 Windows 机器共享文件
 - hidd, 蓝牙的 HID 设备守护进程,没用

Linux Comments(0) 2008年12月10日 07:45

使用scons软件构建工具

  scons是一个比较有意思的软件构建工具,其本意是想替代著名的autotools系列,我没有用过autotools,不过看到网上的autotools使用教程就头晕,后来听说了scons,就仔细下载了它的文档看了一下,觉得很符合我的口味。scons与autotools和cmake等工具不同的是,它并不是从一个类似工程配置的文件中生成Makefile,再调用make进行编译,而是直接控制编译器,从这个意义上来说,它其实并不是替代autotools,而是make!下面是一个简单的例子,如果你想编译著名的hello.c文件:

  1. #include <stdio.h>
  2.  
  3. int main(){
  4.     printf("hello,world\n");
  5.     return 0;
  6. }

  只需在hello.c的当前目录下建立一个叫SConstruct的文件:

  1. Program('hello,'hello.c')

  然后运行scons就可以了,scons会自动调用gcc(不是make)来编译生成可执行程序hello。如果hello.c中引用了foo.h这个头文件,而foo.h声明的函数定义在foo.c,则SConstrut可以写成:

  1. Program('hello',['hello.c','foo.c'])

  Program的第一个参数是目标,后面可以是单个源文件名或源文件名数组。注意,scons是很智能的,它知道hello.c依赖于foo.h,所以当foo.h发生改变时,就会重新编译hello.c。这个依赖关系不需要我们额外写代码。如果源文件太多了,全写在那个数组里太长了,而源文件都是在同一个目录以.c为后辍时,我们可以简写如下:

  1. Program('hello',Glob("*.c"))

  如果程序引入了其它的库,库名为libbar.a,库的目录为/usr/local/lib:

  1. Program('hello',Glob("*.c"),LIBS='bar',LIBPATH='/usr/local/lib')

  如果使用了pkg-config来管理库,可以用环境(Enviroment)如下,例如我使用了GTK+ 2.0:

  1. env=Enviroment()
  2. env.ParseConfig("pkg-config --libs --cflags gtk+-2.0")
  3. env.Program('hello',Glob("*.c"))

  scons除了可以编译C/C++程序以外,它还可以编译LaTeX,如

  1. DVI('paper.dvi','paper.tex')

  就可以用latex命令来编译paper.dvi文件,scons还可以编译Java等其它类型的程序,具体内容见scons的官方文档。
   scons本身有一些设计得很好的地方,SConstruct的本身是一个合法的Python程序,它并没有像c,make那样使用自有的配置文件格式,可以使用所有Python的实用库来完成更高级的运用。还有它判断文件更改是默认情况下不是根据时间戳,而是MD5码!所以上面foo.h被touch了,并不会导致重新编译。scons的缺点是其效率太低,速度太慢。
  scons还可以与现有的一些IDE整合,如Eclipse,KDevelop,Visual Studio等。见这里

 

Linux Comments(1) 2008年9月12日 10:18

无福消受的KDE4

  KDE4我以前也不是没有用过,主要是通过Kubuntu这个发行版来感觉。不过感觉都不好,字体等等各方面都不如意。今天一时心血来潮,就从MagicLinux的网站上通过apt-get下载了一下。
KDE4的RPM包是nihui编译的,其它的基于KDE4的发行版有很多配置上的问题,不过对于MagicLinux,我就放心多了。KDE4还依赖于Qt4,这是必然的,不过我的机器上已经自行编译好了Qt4.4,可apt-get依然给我下载了Qt4的编译包。
KDE4+Qt4比我预想的要小,只有200多M,我装好后,退回KDM,进入KDE4,启动画面真不错,黑色的基调,鼠标也是水晶黑,出来的图标也有模糊淡入效果,非常漂亮,只不过速度太慢了些。进入桌面,桌面的背景也非常好看,至于Oxygen主题,也是很不错,可是本来桌面上有一些原来的桌面图标,不过字体是文泉驿,因为都是英文,所以显示起来不好看。那些图标全放在一个框里,我本想把那个框拉大一点,结果出来什么Plasma崩溃什么的,一下子那个装图标的框就没了。
接着,我又去点KDE4的开始菜单,结果一点整个屏幕就白了,然后弹出一个Plasma的崩溃提示信息,连点几次也是这样。我于是右击把它改成经典菜单,结果就可以了,大部分的软件都在,只不过有些菜单项的图标是问号,还有几个有乱码。忍了。
然后开始启动Konsole,这个程序是我进KDE必启动的程序之一。它默认启动的是KDE4的那个Konsole,字体也是文泉驿,由于终端里主要的信息都是英文,所以显示起来也非常不好看,我于是改了一下设置,想改成Courier 10-Pitch,改是改成了,可是字体根本没变,真该死!字体不好看是一点,输入光标总与实际位置要往右偏,这也是一个问题,真麻烦。
然后我又启动了我写那个Qucifer播放器,结果它启动的是Bespin风格,这是我的Qt4程序风格设置不正确时的默认选择,真麻烦,可能是两个Qt4有冲突吧。
真麻烦,这个KDE4我是无福消受了,于是我就把花了半天心思建立起来的KDE4又给卸载了

Linux Comments(3) 2008年8月24日 04:01

更新GCC和Glibc

  前几天上linuxfans.org,发现sejishikong已经更新了GCC 4和Glibc2.7,于是下回了RPM包,先更新glibc,以前编译和运行Linux程序,总是抱怨glibc的版本太低,很多软件都不能运行,而这个库又极为重要,不能随便更新,稍有不慎就会系统无法使用。这次是MagicLinux的官方补丁,应该可以放心地安装了。
  不过下载RPM包后,如何安装就成了一个问题,一般的RPM包都是rpm -ivh 完成安装,rpm -Uvh完成升级,可是glibc太重要了,Linux里几乎所有的程序都依赖于此库,能动态地更新吗?我怕直接更新有问题,就犯了一个严重的错误,居然用rpm -e glibc --nodeps来卸载,结果一下子系统里什么程序都不能使用了。完了,我只好重新启动系统,用MagicLinux的急救盘想chroot来把RPM包装上,结果根本不行。chroot说/bin/sh不存在,可是这个程序明明存在的,这下惨了。我最终想了一个方法,就是把原先的rpm包里的东西解压出来,然后全部复制到根分区里。事实证明,此方法可行!
  后来,我在那个帖子后面找到里最方便更新glibc的方法,就是使用rpm的--aid选项,这个选项可以成功地更新glibc,而且不用重启。我按这一方法果然可行。Linux真强大,原来连安装glibc这样的库都可以不用重启。
  之后,我启动了原来需要glibc2.6以上版本才能运行的Linux版QQ,说实话,不满意,腾讯就折腾出这样一个东西,比eva差远了。
  后来,我接着更新了gcc,原来是gcc3,现在是gcc4,gcc4相对于gcc3,编译的速度好像并没有什么本质的上升,不过好像更严格了,而且里面的出错信息全成了中文。GCC出错信息变中文,感觉有点怪怪的,里面的话听起来总觉得有些别扭。用它编译fltk时,它还出一个很奇怪的警告:“提领类型双关的指针将破坏强重叠规则”,这句话完全不知道它说什么,感觉还有点搞笑。

 

Linux Comments(0) 2008年8月19日 08:37

重新编译Linux内核

  最近我们在搞系统软件课程设计,一共有七个实验,其中第一个不用实际做东西,也就是一共有六个实验需要做,我一周多一点就完成了三个实验,现在只剩下三个了。我估计这个学期还没结束就可以全部搞定了。其中有一个实验是要为Linux添加新的系统调用,这其中就需要重新编译Linux内核。
  虽然我用Linux也有不短的时间了,但是重新编译内核还是头一回。我下载的版本是Linux 2.6.25,这个内核比我原来的内核还新一些。我照着网上说的,先make xconfig,Linux内核就会利用源代码中一个基于Qt 3.x的源码配置器的源代码还编译生成一个源码配置器,这个源码配置器还很复杂,选项很多。我先按照它的默认设置。生成了一个配置文件。然后敲入make,然后开始编译了,Linux内核编译的时间非常长,大概有一个小时吧。(其实Qt 4.4更长,达四个多小时)。
  编译完内核,就会在源代码根目录下生成一个叫vmlinux的文件,那就是Linux的内核了,再make bzImage,这时将会生成一个bz2格式压缩的内核,除了内核本身处,还得编译内核的模块,make modules就行了,然后再写make modules_install就可以了。说起来简单,做起来其实有一番麻烦的。即使我每一步都小心翼翼,总是有一些问题。事实上,从网上搜索到的很多都不能完全照搬,例如很多网上资料说到先make dep,但是我输入这一命令时,程序却提醒我已经不必了。而且我下载的安装将已经非常智能了,我原先以为还要手工做初始化内存盘映像,还要手工复制内核并修改grub的配置文件,现在已经都不需要了,程序会自动生成初始化内存盘映像和复制文件,还会自动将新的内核加入grub的引导菜单。
  现在想起来网上的资料真是很乱,搜来搜去也就那几篇,而且转贴的网站一般都有一堆恶心的广告,排版又非常差。
  

Linux Comments(0) 2008年5月19日 03:14