低级错误
27/01/2010今天犯了一个很好玩的低级错误.
一直想把主要操作系统转到 Archlinux, 两次尝试都因为与显卡驱动有关的原因失败了. 这一次在 Wish 的怂恿和协助下, 终于成功完成了安装. Arch 的 Wiki 非常的丰富, 基本所有遇到的困难都能够解决. 因为对 KDE 和 Gnome 的庞大感到畏惧, 我选择了 lxde 这个轻巧的桌面环境 (默认 openbox 作为窗口管理器使我对它有了很好的初印象). 现在已经完全可以沉浸在Arch下, 能够这样随心而容易地定制鼠标和键盘设置充分的满足了我的控制欲 XD.. 今晚写下几件遇到的难题和趣事, 可能会对同样在 Thinkpad T400 或者其他机型上安装 Archlinux 的同学有一些帮助.
第一次 startx 没有启动hal, 键盘和鼠标同时不再搭理我.. 于是只好忍痛按下 power 键..
成功 startx 后遇到的第一个麻烦是 touchpad dpi 太低, 这个问题在 archwiki 里查下 touchpad 的设置很快解决了. 连接蓝牙鼠标, 装好 bluez 后也很顺利的成功识别. 接着是耗了我很长时间的怎么样让蓝牙鼠标在系统启动时自动连接, 而不要每次都重新匹配. archwiki 中对我似乎并不适用, 在折腾了非常长的时间后终于在 archlinux fourm 的 这篇 帖子里找到了解决方案, 大概是先建立 trusts 文件, 然后安装 blueman. Archlinux 下小红点的工作非常完美, 比 Windows 下还要出色, 具体表现在 Windows 下小红点的中键只能用来做滚轮, 而不能实现类似在 Firefox 中点击中键关闭 Tab 的功能, 但在 Arch 下完全没有问题, 但是实现小红点的滚轮功能花了我不少时间. 最后是在 ThinkWiki 上找到了解决方法, 看 这里,
印象最深刻的就是开头所说的, 我犯的这个低级错误. 多媒体键中除了键盘灯和调节屏幕亮度的三个键外, 其他键基本都不能正常工作. 但设定键盘快捷键对 Openbox 来说是小 case 啦, 我参照 这篇文章 顺利的搞定了音量调节的三个键, 并受此启发, 开始折腾方向键上控制播放器的多媒体键. 我主要的音乐播放器是 Exaile, 它可以很完美的通过命令行控制. 最初我直接在 openbox 的 rc.xml 文件中写下相应的命令, 但是出现了这样两个问题: 在命令行执行 exaile 的控制命令后, 如果 exaile 没有启动, 那么它会自动启动, 但事实上我们可能并不愿意这样; 另一个不那么刺眼的问题是下方向键其实是有两个功能的, 如果当前播放器正在播放音乐, 或者处于暂停状态, 按下这个键播放器应该暂停或者继续播放, 而如果当前播放器是停止播放音乐, 那么按下这个键应该让播放器开始播放音乐, 但在 openbox 的配置文件中我无法表述这样复杂的意思. 所以我打算写个与之前类似的 python 脚本. (这样做的另一个好处是, exaile 没有一个通知我当前正在播放歌曲的快捷键, 通过脚本我可以利用 notify-osd 显示当前播放的曲目, 而且我感觉 notify-osd 的通知界面比 exaile 的更美观一些)
脚本很快就完成了: 首先判断 exaile 进程是否存在, 如果不存在则直接结束; 否则执行相应的指令, 唯一需要做特判的地方是如果按下的是下方向键, 则先确认播放器的当前状态. 其中判断 exaile 进程是否存在是这样写的:
21 try: 22 subprocess.check_call(['pgrep', 'exaile']) 23 except: 24 sys.exit(0)
不出意外的, 脚本没有按我想象的执行, 无论 exaile 是否启动, 它总是认为 exaile 进程存在. 我在终端下根本得不到 exaile 进程的 pid, 但我写的 python 却能每次都返回一个不同的 pid. 我百思不得其解, 甚至怀疑是不是 python 运行在一个类似虚拟机的环境中, 所以得到的结果和我在终端中得到的不一样..
终于, 在我让脚本完整的输出进程的 pid 和进程名时, 我发现进程名是 “exaile-mmkey.py” (我写的脚本的文件名), 那一刻, 我泪流满面, 原来 grep 部分匹配了进程名.. 给 pgrep 加了个 -x 选项, 再执行, 终于一切正常了!
尽管这样一个低级的错误耗费了我半个多小时 (可能还不止), 但这也应该是 Archlinux 一直以来对我的吸引所在吧.
另外, tilda 是一个非常快速和美观的终端, 推荐给和我一样喜欢用透明背景, 可嵌入桌面的终端的人. 我在又一个 project 上看到了 oldherl 大牛的名字. lowsars 成为了我提交给 AUR 的第一个包.
最后, 那个简单的 python 脚本是我写的第一个 python 程序. 我跟着 mit ocw 的 6.00 课程断断续续的学了十天左右, 其中一半时间讲的还是跟 python 无关的内容, 能写出可以给自己用的东西, 很有成就感.
There are 2 comments in this article: