archlinux下,用moc一样可以显示歌词。先来个效果图,再慢慢道来。
要做出这个,需要音乐播放器(废话嘛这不是。。),支持mpd, mocp, audacious, amarok, exaile, quodlibet, rhythmbox, mplayer这8种播放器。因为显示歌词的脚本是xiooli的。看这里
这个脚本用到了wget和bc,需要先安装。但是由于archlinux没有gnome-osd,所以采用cli方式。也就是在终端里显示歌词。终端选择的是gnome-terminal,因为用的是gnome桌面,胡哥指示,不折腾。
在panel上建一个启动器,输入如下命令
gnome-terminal --window-with-profile=lyrics --geometry=30x3 -x ~/files/scripts/lyrics
--geometry=30x3是说这个窗口是30个字的宽度,3个字的高度。
-x是执行后面那个script,就是xiooli那里的那个。
--window-with-profile=lyrics是说采用lyrics这个profile。需要在gnome-terminal中新建一个名叫profile的profile。在general tab里把show menubar取消掉。在title and command tab里设置initial title为Lyrics,注意大小写sensitive的,虽然最终不会看到这个窗口的边框,也就看不到名字,但这句是很重要的,待会分解。在colors tab里把背景设为黑色,字体设为黑色。在background tab里设为transparent background,透明度自己设定。在scrolling tab里把scrollbar设为disable,把scroll on output和keystroke都选上。
用compiz去掉窗口的边框。在window decoration里面的decoration windows里面添加规则
& !(title=Lyrics & class=Gnome-terminal & name=gnome-terminal)
这样就没有边框了。Lyrics是大小写sensitive的。现在知道为什么要在gnome那里把名字改成Lyrics了吧。原因就在于compiz。后面还有很多地方用到这句。
这样就好了。效果是有了。不过配合compiz,能得到更好的体验。继续分解。
首先,在ADD helper里面,misc options里面的window types中,加入
& !(title=Lyrics & class=Gnome-terminal & name=gnome-terminal)
也就是说,当gnome-terminal的名字叫Lyrics时,不要应用ADD helper。
然后在place windows里面,在fixed window placement中加入规则到windows with fixed position,positioned windows为
title=Lyrics & class=Gnome-terminal & name=gnome-terminal
X positions设为550,y positions设为21,选中keep in workarea。这样歌词窗口就会在x550和y21的地方显示出来了。
下一步在window rules里面修改。在skip taskbar,skip pager,above,sticky,no focus中加入
title=Lyrics & class=Gnome-terminal & name=gnome-terminal
也就是说这个歌词窗口不在任务栏窗口列表显示,skip pager就是说当show desktop时这个窗口不动,above就是总在最上,sticky就是在每个workspace都显示,no focus就是说不要聚焦到这个窗口,也就是不能左键点击。
但是还有一个问题,就是如果在那个窗口上点击,虽然不能聚焦,仍然会挡住后面的窗口。不能穿越这个歌词点击后面的窗口。compiz这时候发飙了。用compiz的ghost插件解决问题。
ubuntu的zhuqin介绍过这个插件,点这里,注意,不要猛击,轻点,保护鼠标。。总得来说就是把这个链接里的几个文件下载下来,放在一个目录下,cd进去,然后
make clean
make
make install
注意,不要sudo make install,用自己的帐户。compiz的version要是最新的0.7.8,其实这个插件在0.7.6上也是能工作的。
装好了ghost插件以后,在compiz的设置里面找到ghost,在extras类别里面。设置好快捷键,在window types里面输入
(title=Lyrics & class=Gnome-terminal & name=gnome-terminal)
然后把fade windows only on mousover选中,把opacity调低,我调到了30,其他都调到100,这样当鼠标移到那里的时候歌词窗口就变透明了,就不会挡住后面的窗口。而且这时候直接就可以点击后面的窗口而不会被挡住了。如果要退出歌词窗口,就用快捷键停止ghost,然后在歌词上点右键关闭窗口就行了。停止ghost以后还能把鼠标放在歌词上用滚轮回顾前面的歌词。再来一张图。变透明的。
现在是不是很完美呢。千千静听的歌词算什么,有这个好么?哼。。
-----------------------------------------华丽的分割线-------------------------------
当这样设置之后,emesene的notification总会抢焦点。比如说你正在打字,当emesene有notification出来时候,焦点就到了notification的窗口上去了。这个很讨厌。于是在compiz里的window rules里的no focus中加入
| (class=emesene & title=Controller.py)
最前面的 | 是因为前面已经写过了关于歌词窗口的规则,这两个规则是or的关系。同时在general options里面,把focus & raise behaviour中的focus prevention level设为off。因为这个会使得notification不能获得焦点的同时也不能总在最上了,于是会被当前窗口挡住,而且这个设置也会导致qq掉线的提示不能在最上,所以干脆off掉,把emesene notification的设置写在window rules里。
-------------------------------又是华丽的分割线--------------------------------------
gnome-terminal现在似乎是真透明了。以前是假的,只是把壁纸相应的部分显示出来,现在是真的了,而不是显示壁纸了。不错。