Archive for June, 2010
改了下字体配置
起因是Xterm的一个小Bug, 结果折腾起来一发不可收拾.
.fonts.conf中去掉了微米黑, 启用hinting, 关闭autohint.
.Xresources设置默认使用Xft(xterm 261已修复), 改中文字体为文泉驿正黑.
xterm*renderFont: true
xterm*faceNameDoublesize: WenQuanYi Zen Hei Mono:pixelsize=15
xlock的键绑定加了字体参数
xlock -mode blank -dpmsoff 5 -font -misc-fixed-*-*-*-*-20-*-*-*-*-*-*
目前的字体显示不虚, 很清晰, 但是美感又稍差了些. 嗯, 慢慢调…
制作目标板flash镜像
今天接了个小任务, 写个程序用板子上的整个flash做个镜像, 量产的时候要用. 据说之前用那个专用软件读取超慢, 只有几K每秒.
我第一个念头就是可以用dd或者cat, 但总觉得没这么简单, 试过之后发现, 就是这么简单. 而且只要几秒钟, 整个镜像就做好了.
#!/bin/sh
PARTNUM=11
if [ -z $1 ]
then
echo ERROR: Please specify the output filename
exit 1
fi
for i in `seq 0 $[$PARTNUM - 1]`;do
#dd if=/dev/mtd$i >> $1
cat /dev/mtd$i >> $1
done
exit 0
PARTNUM是板子上的分区数, 我们这个项目是11个分区, 从0到10.
几点说明:
1, 参数只有一个, 即生成的目标文件路径, 可以写到外接usb设备或者nfs目录里.
2, 可以用dd if=/dev/mtd$i >>$1, 但是我马上要把dd从busybox中裁剪掉.
3, 可以用awk去处理/proc/mtd或者/proc/partitions, 那样就不必手动指定分区数和设备文件, 但是awk马上也要被裁掉.
4, 用mtd或者mtdblock都可以, 生成的文件是一样的, 但这个可能取决于具体情况.
nfs挂载之uid映射
开发的时候用nfs把主机目录挂载到板子上是很方便的, 我们就是如此.
nfs的配置文件是/etc/exports, 可以设置具体目录的具体参数, 包括只读或者可写. 一般情况下, 目录挂载为只读就可以, 但这几天有点新需求, 需要往nfs主机目录写文件, 于是问题就来了: 写入的文件的owner是root, 管理起来麻烦得很, 尤其我们的nfs主机是一台服务器, 我在上面只有普通帐户没有root权限.
研究了下exports的写法, 发现有个User ID Mapping的功能, 可以将客户端的操作请求视为主机上的某个用户, 例如:
/home/adam/nfs *(rw,sync,all_squash,anonuid=500,anongid=600)
重点在all_squash,anonuid=500,anongid=600这三个选项, 500和600是我在nfs主机上的用户id和组id. 这样一来, 写入的文件的owner就是我了, 可以任意操作了, 舒服.
PS: 改这个文件当然也得root出马, 但这是个一劳永逸的事儿.
PS2: 记得让root顺便执行下exportfs -rf.
Imagemagick之批量转换
最近朋友在做界面方面的开发, 帮她找了一堆SVG格式的矢量图标.
麻烦的是, 她在Win下没有能方便地查看svg的软件(IrfanView和XnView都得加个需要注册的插件才行), 只能用CroelDRAW或者InkScape一个个打开看. 而且这些图标最后要用的时候得转成分辨率为256×256的PNG, 文件夹又分得很细, Win下的批量转换软件用起来也很麻烦.
所以, 好人做到底, 有请无敌的Imagemagick:
find ./ -name *.svg -exec convert -resize 256x256 {} {}.png \;
只是这样会出现foobar.svg.png这样难看的文件名, 查了下, Imagemagick还有一个工具mogrify:
find ./ -name *.svg -exec mogrify -format png -resize 256x256 {} \;
方便吧? Imagemagick还有很多超强的工具和用法, 大家没事的时候可以研究下.
PS: convert能够处理.svgz这种压缩过的格式, mogrify不能. 所以可以先convert再用rename批量改掉.
关闭X的屏幕保护
这两天看世界杯的时候总是在精彩或者关键的时刻因为屏幕保护而黑屏, 太烦了.
Google如何关闭屏幕保护, 大多都是说关闭DPMS也就是Energy Star模块, 这个我之前试过, 不行. 但当时没什么需求, 所以就没管, 这个现在影响我了, 还是好好研究下吧.
查看xset的手册后发现屏幕保护是由X的两个部分控制的, 一个是BlankTime(较新的X中放在ScreenSaver选项中), 一个是DPMS. BlankTime设置的是黑屏, 也就是说只黑屏而不关显示器电源, 对于液晶显示器来说就是不关背灯. DPMS设置的是电源, 三个子选项Standby, Suspend和Off对于CRT显示器是一个逐步关闭电源的过程, 对于液晶显示器应该是一样的.
正因为X的屏幕保护由两部分控制, 单纯的关闭DPMS或者BlankTime都不行, 必须都关掉. 所以我在.xinitrc中加入了下面的命令, 具体解释和其它xset命令参数见Manual.
xset s off
xset dpms 0 0 0
但是这样暴力关闭显得不大环保, 尤其是整宿不关机下载的情况, 可以选择把DPMS和BlankTime的超时时间设置得久一点, 或者加一条alias用来手动关闭显示器电源(笔记本没显示器开关).
alias soff='sleep 5 && xset dpms force off'
之所以sleep 5是为了防止命令执行以后因为手抖或者合上笔记本的盖子而唤醒显示器. 同时这也解释了我为什么在上一步不用xset -dpms, 因为关显示器的时候会再次启用DPMS模块, 屏保又开始生效了, 而置0只是关屏保而不关DPMS, 留着这个模块用来关显示器. 还有一个原因在于有的桌面环境会不停得去检测并启用DPMS模块, 无法简单地关闭DPMS模块.
此外, 如果你的笔记本电脑合上盖子时dmesg能够检测到lid button信号, 可以在acpi的配置文件/etc/acpi/events/lm_lid设置相应的动作, 我的完全没有检测到, 也就没有细研究了.
————————————用来补充的分割线————————————
我用xlockmore锁屏幕的, 它有个-dpmsoff的参数, 后接秒数, 用来关屏幕电源. 这下方便多了, 现在的状态是: 平时没有屏保, 锁屏幕顺便关掉显示器电源.
PS: 貌似这个参数有个小bug, 它要求加个秒数, 但是不理会具体的值, 算了, 能关就好.
半夜流水帐
半夜, 突然想记录下这几天乱七八糟的事…
1, 最近没怎么有折腾的欲望, awesome也不想玩了, purge之.
2, 世界杯马上要开始了, 西班牙, 英格兰和阿根廷的一场也不放过.
3, 为了迎接游泳季节, 从上周开始每两天锻炼下. 今晚也是, 结果发现停水了, 一身臭汗.
4, 现在外面下雨了, 我喜欢下雨, 尤其是近一个月, 嘿嘿.
5, 希望这个月过得慢点, 再慢点, 我怕七月份, 很怕.
呃, 睡前许个愿, 希望早上不要还是停水…
——————悲剧的分割线——————
许愿果然是没有用的…
Yesterday’s nightmare
In the dream, I’m doodling in a terminal:
adam@debian:~$ F**k my life.
Oh, boy. What’s wrong?
adam@debian:~$ F**k my life.
That’s not a validated command, and I’m not a shell.
adam@debian:~$ What are you?
I am the LORD your God.
adam@debian:~$ Kidding? I don’t believe in God.
Put that aside. What happened to you?
adam@debian:~$ You said you are God, and you don’t know?
Ok, Ok, I know.
adam@debian:~$ So what you say?
Let it go.
adam@debian:~$ I can’t.
Let it go, what else can you do?
adam@debian:~$ Nothing.
So, let it go and move on. You will find a better girl. Trust me, I’m God.
adam@debian:~$ F**k you.
Oh oh oh, Gospel of John [8:24].
adam@debian:~$ What?
I said therefore unto you, that ye shall die in your sins: for if ye believe not that I am he, ye shall die in your sins.
adam@debian:~$ Bite me.
INIT: Switching to runlevel: 0
INIT: Sending processes the TERM signal
INIT: Sending processes the KILL signal
…
And I woke up with a startle.

