这篇 post 居然是在今年 1 月份的时候放到 draft 里,到现在才 publish……
因为用 intel 的编译器,所以设置了 LD_LIBRARY_PATH 这个环境变量,但是每次启动 screen 后这个环境本来都会被 unset。google 到的结果。
screen 可执行文件是 setuid 的(为了 share session,debian 的 screen 安装时默认没有 setuid),glibc 对这样的可执行文件会把那些“危险”的环境变量去掉,所以出现了上面的情况
解决办法两个
1. 把 setuid 位去掉,当然这样 screen 的 share session 就不能工作了,还好一般用不到
2. 把 LD_LIBRARY_PATH 的设置放到 .zshrc/.bashrc 之类的文件里去,这样每次启动 shell 的时候自然会把这个环境变量读入的
if [ -z $LD_LIBRARY_PATH ]; then
export $LD_LIBRARY_PATH=XXX
else
export $LD_LIBRARY_PATH=$LD_LIBRARY_PATH:XXX
fi
LD_LIBRARY_PATH 这个环境变量设置起来还真的挺麻烦的,系统的库目录和自己的库目录下有同名不同版本的库的时候,不是自己的程序有问题就是系统的程序有问题。
After using Sawfish for some time and seeing the amazing new effects provided by compiz-fusion, I switched to compiz-fusion. (I switch window managers about every two months ;-) ) Every thing goes smoothly. The installation of compiz-fusion on Arch is simple, no extra configuration for X is needed since I’ve used beryl before. It just works :-)
One feature I love for compiz & beryl is window switching: You get a preview of each window so it’s much easier to select the desired window. However, the switching operation is not quite smooth on my box no matter what window switcher I am using. I tried to change the configuration for the shift switcher and found that using none overlay icon dramatically increases the performance. I tried this on other window switchers and it also works. Anyway, the overlay icon is not very useful to me, so I can still be happy without it.
Another option I suggest to toggle on is Mipmaps. You will get much better preview without any noticeable performance degeneration.
Vim 里面你怎么按 Esc 键?今天网上看到有人开玩笑说用巴掌拍过去,这个似乎暴力了点……
我是用左手小拇指按的,很神奇吧,那么远居然用小指按。
如果你看过 Vim Tips 的话可能就会知道怎么回事。其实我按的是 Caps Lock,利用 xmodmap 修改了 X window 下的键盘布局。因为我很少用到 Caps Lock 键,同时也为了方便按键,我交换了 Caps Lock 和 Esc 的位置。上代码,
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock
保存到某个文件,比如 ~/.Xmodmap,然后执行 xmodmap ~/.Xmodmap 就可以了。当然,我现在是每次启动 X 的时候都自动执行这条命令。开始会有些不习惯吧,但习惯以后肯定可以提高使用 Vim 的爽快感的。
Emacs 也有用户交换 Ctrl 和 Caps Lock 的,但个人感觉那样的话按 C-x 不是很不爽……
这次的作业里面要求修改 Linux 内核代码,统计系统调用执行的次数。看 《Linux Kernel Development》 的第一版(我买的早,所以是第一版),在 entry.S 里面加了几行代码,然后实现个系统调用把统计数据提供给用户空间进程,还是很简单的。
先说点题外话,《Linux Kernel Development》 一年前没有学过 Linux 编程的时候看不懂,现在再看感觉好多了,是本内核入门非常不错的书。
不过发现了点奇怪的现象。(无知,所以才觉得奇怪啊)测试程序里面用 C 库提供的 syscall 来调用自己写的系统调用,无论调用多少次,自己的那个调用的执行次数统计始终为 0。但是如果使用 _syscall 宏来调用自己的系统调用,每次调用统计次数都会增加。(我在 2.6.20 的内核 asm/unistd.h 中没有找到 _syscall 宏,拿了老版本代码里面的宏来用。)看 glibc 的 syscall 代码没有看懂(glibc 真是复杂,看的头大,不过倒是知道了什么是 weak symbol)。拿了 LKD 的第二版再来看,看到里面提到一句 Linux 的系统调用在 x86 上现在有了一种新的出发机制,名字就叫 sysenter。sysenter 进入内核的代码在 sysenter.c 里,我只改了 entry.S 所以如果用户空间进程以 sysenter 进入内核则系统调用的统计数据当然不会有变化。问题应该就是出在这里了。
于是就开始 Google 了,找到一些文章,ibm developer works 的介绍,ChinaUnix 的一篇文章。马上来 fix 它。
想起去年暑假 IBM 的工程师凌棕说的一句话了,工程师只要找到问题,接下来就好解决了,难就难在怎样找到问题。再一次体会到了,不过这次运气还行,找到问题过程还算顺利。
Recent Comments