2008年6月5日星期四

Compiz 初探

没想到我这么快有了一台新电脑,而很高兴的是 NVIDIA GeForce 8300 GS 的显卡让我终于可以摆弄一下传说中的 compiz 了,这个酷酷的 window manager 让桌面变得非常的 3D,哈哈... 下面列出来 debian 的相关程序包,
$ apt-cache search compiz
awn-applets-c-core - A collection of applets for avant-window-navigator
cairo-clock - An analog clock drawn with vector-graphics
compiz - OpenGL window and compositing manager
compiz-core - OpenGL window and compositing manager
compiz-dev - OpenGL window and compositing manager - development files
compiz-fusion-bcop - Compiz Fusion option code generator
compiz-fusion-plugins-extra - Compiz Fusion plugins - extra collection
compiz-fusion-plugins-main - Compiz Fusion plugins - main collection
compiz-fusion-plugins-unsupported - Compiz Fusion plugins - "unsupported" collection
compiz-gnome - OpenGL window and compositing manager - GNOME window decorator
compiz-gtk - OpenGL window and compositing manager - Gtk window decorator
compiz-kde - OpenGL window and compositing manager - KDE window decorator
compiz-plugins - OpenGL window and compositing manager - plugins
compizconfig-backend-gconf - Compiz Fusion configuration system - gconf backend
compizconfig-backend-kconfig - Compiz Fusion configuration system - kconfig backend
compizconfig-settings-manager - Compizconfig Settings Manager
fusion-icon - tray icon to launch and manage Compiz Fusion
libcm-dev - Support code for compositing managers - development files
libcm7 - Support code for compositing managers
libcompizconfig-dev - Configuration settings library for compiz-fusion - development files
libcompizconfig0 - Configuration settings library for compiz-fusion
libdecoration0 - Compiz window decoration library
libdecoration0-dev - Compiz window decoration library - development files
pdfcube - PDF document viewer with 3D effects
python-compizconfig - Compizconfig bindings for python
screenlets - Widget-like mini-applications for GNOME
我们先从实现历史说一下,印象中在 2000 年以前有人就提出过使用 OpenGL 重写 X server 的一部分,使得 X server 能够利用现代显卡的强大功能,但是一直没有真正的做起来。后来好像是 Apple 第一个实现了自己的具有 3D 加速功能的桌面系统(利用了 composite wm),这时候 Linux 里面也开始出现了第一批尝试者。提到这个就不能不谈 Xgl,它相当于为 X server 提供了一个 opengl 的backend(如 Xglx 和Xegl),然后还需要一个对应的 window manager 提供相应调用的接口给用户,实现各种窗口的特效。这样做有一定的好处,如把对显卡驱动程序的支持放到 Xgl 这部分来,上层的 X server 等可以用统一的方式实现;但是这一做法 NVIDIA 在 2006 年的一次会议上给出了反驳的理由,即使得某些特殊硬件功能不能或者难于应用,另外也不方便支持多个显示器。NVIDIA 给出了自己的解决方案,也就是 AIGLX(accelerated indirect GLX),所谓的 indirect 体现在 OpenGL 作图命令流被用一个网络中性的语言发给了 X server,由 X server 代为发给显卡进行处理。而在 Xgl 模型中 Xgl 作为 backends 直接通过 OpenGL 的库控制显卡。这样做的好处在于对 X server 本身不需要作太大的修改,另外 DRI(direct rendering infrastructure)在 AIGLX 下仍然可以被 window manager 所操纵。正因为如此,AIGLX 迅速被 Xorg 所接受,这使得我们可以直接利用 compiz 等 window manager 享受显卡带来的 3D 快感。

Compiz 就是为了利用 XGL/AIGLX 带来的新功能而设计的 window manager,中间一段时间一个分支叫 Beryl,后来两者 merge,现在一般叫 compiz fusion。在 Debian 里面安装好显卡驱动之后,在 GNOME 或者 KDE 里面就可以用 compiz 取代原来的 wm。compiz 是一种 composite window manager,和常规的 wm 不一样的地方在于,composite wm 先把每个程序的输出缓存并进行处理,然后组合成为我们看见的样子。compiz 遵循 ICCCM(inter-clients communication conventions manual),因此可以替换 metacity(gnome 的 wm)或者 kwin(KDE 的 wm)。compiz 工作很大程度上依靠显卡对 GLX_EXT_texture_from_bitmap 这个 OpenGL 函数的支持。

compiz 设计的时候就考虑了 plugin,很多效果都是依靠不同的 plugin 实现的,前面列表中有 compiz-plugins(fusion-plugins-main, -extra, -unsupported),这些 plugins 可以用几种方式配置,比较方便的就是 compizconfig-settings-manager 了。

下面介绍一些杂七杂八的东西:
  • 配置 compiz 的四种方法
  • 插件简介
  • 进入 gnome/kde 之后启动 compiz 只需要在 Run command 里面 compiz --replace 即可。
  • KDE 4 的 kwin 已经是 composite wm 了,可能以后就不用 compiz 了。

没有评论: