什么是窗口管理器

来源:互联网 发布:java做的购物车代码 编辑:程序博客网 时间:2024/06/06 05:33
什么是窗口管理器? zt
2009-12-30 16:04

看到这个标题,很多人一定认为桌面环境和窗口管理器是一回事,但严格来说窗口管理器和桌面环境是有区别的。桌面环境(Desktop Environments)是最近发展起来的桌面图形环境,它的主要目标是为Linux/Unix操作系统提供一个更加完善的界面以及大量各类整合工具和应用程序,其简单易用性吸引着大量的新用户,Linux世界最常见的桌面环境就是GNOME和KDE。窗口管理器(Window Manager)是一个可以控制X窗口环境中窗口属性的软件。简单地说窗口管理器管理窗口的外观形式、桌面菜单、图标、虚拟桌面以及按钮样式等一切显示在屏幕上的样式。如果非要用一个词来包括它们,就用“图形环境”吧。

-----------------------------------------------------

什么是窗口管理器? 
很多人不知道窗口管理器是怎么回事。他们认为 Gnome 和 KDE 是窗口管理器,认为窗口管理器就是能够提供一个工具条,能够配置桌面背景,能够设置很多菜单的东西。而其实,窗口管理器只是 Gnome 和 KDE 的一部分,它的主要功能是你平时根本没有注意,但是却非常重要的操作。窗口管理器的主要功能是:移动窗口,改变窗口大小,图标化(最小化)窗口,改变窗口层叠顺序…… 

通常的X客户程序不需要知道有人想移动它,它只知道乖乖听窗口管理器的话。如果没有窗口管理器运行,你的程序会一个堆一个,你没有办法操纵被盖在下面的程序,你只能使用最上面一个程序,而且你不能移动它,你不能改变它的大小。这样的系统根本不能用! 

其实你的窗口上的标题,按钮,漂亮的边框,全都是窗口管理器提供的,而不是程序自己的,这样你用窗口管理器就能改变任何窗口的样式了。当你点击关闭窗口的那个按钮,你其实点击的是窗口管理器放在你的程序窗口上面的一个小窗口,发现它受到点击后,窗口管理器就会通知那个程序:“喂!有人想关掉你,你自己准备准备后事,然后退出吧。” 

不同的机器在本机显示的窗口,由窗口管理器统一装饰和指挥。比如,窗口管理器决定: xterm 窗口上面都应该有四个按钮,一个在左边,点击它会显示窗口操作菜单,另外三个在右边,分别是最大化,最小化和关闭。窗口都使用 7pixel 厚的边框,窗口首次出现的时候首先在桌面上找一个空位置,如果找不到,就找一个能够最少的遮盖其它窗口的位置…… 

这些都是窗口管理器的职责。 

Gnome 和 KDE 是什么? 
有人把 Gnome 和 KDE 叫做窗口管理器,甚至还有人把它们叫做 Xwindow。经常看到有人问:“装哪种 Xwindow 好啊?Gnome 还是 KDE?” 其实你不安装 Gnome 和 KDE 也可以使用 Xwindow. 

Gnome 和 KDE 是“桌面系统”,一种很多程序和函数库的集合。它们的设计目的是提供一致的方便的操作方式来满足普通用户的需要。它们不但包含窗口管理器,还有很多实用程序和应用程序,比如配置程序,工具条,编辑,绘图工具…… 其实 Gnome 可以和很多窗口管理器合作,在历史上,Gnome 使用过的窗口管理器包括 englightenment, sawmill, sawfish, metacity。KDE 的窗口管理器叫做 kwin。

用 Xwindow 做一个有趣的试验 
现在我们来做一个试验来引起你对 Xwindow 的兴趣。 

很多人离开了 xdm 就不知道怎样启动 "Xwindow" 了。其实 Xwindow 的启动方式很简单。 

首先,启动你的 X server。在 Linux 下,你可以直接输入 "X&",让一个 X server 在后台运行。这样,一个占据整个屏幕的布满斜纹的窗口(根窗口)就出现了。如果是 Exceed 或者 X-win32,你需要把屏幕设置为 "single window" 才能看到这个窗口。 

接着,Linux 用户需要用 xauth 给你的 X server 设置一个密码,这样别人就不能非法连接你的 X server。你需要Ctrl-Alt-F1切换到tty1才能输入这个命令。Exceed 和 X-win32 的用户不需要这步。以下的例子只用 Linux 作为实例,其它系统的用户可以依葫芦画瓢。 

xauth add :0 . `mcookie` 
好了,现在你可以试试启动一个 xterm 到这个 X server 上: 

xterm -display :0 
按 Alt-F7 切换到 X,你看到了一个不受窗口管理器管理的 xterm。试试移动它呢?再切换到 tty1 启动另一个 xterm,两个 xterm 重合了吗?你怎样在第一个 xterm 里输入呢?这样用起来很痛苦吧?那么你可以在 xterm 里启动一个窗口管理器,比如 twm,直接运行 "twm&" 就行了。 

你发现xterm的窗口都被加上了标题栏,按钮和边框,你现在可以移动它们了。试试把 twm 杀死,看看那些标题栏,按钮,边框是不是都消失了?你知道了窗口管理器的作用了吧。

---------------------------------------

17.X Window 窗口管理器

很多人不知道窗口管理器是怎么回事。他们认为 GNOME 和 KDE 就是窗口管理器,认为窗口管理器就是能够提供一个工具条,能够配置桌面背景,能够设置很多菜单的东西。当然这种理解是不准确的,那什么是窗口管理器呢?根据EWMH(freedesktop.org)的要求,窗口管理器的基本功能有以下这些:

  • 模态窗口(Modality)。一般用来实现模态对话框,所谓模态对话框,就是具有这样特性的对话框,除非你把它关掉,否则无法切换回到它的父窗口上。
  • 大桌面(Large Desktop)。显示器的大小是有限的,比如显示器的分辨率为1024x768,那么传统的桌面就只能这么大一点。窗口管理器可以实现一个逻辑上的大桌面,较显示器的物理分辨率,拥有更大的显示范围。当然你在某个时刻只能看到桌面的一部分,这部分也称为viewport,通过变换viewport可以看到桌面的其它区域。
  • 固定窗口(Sticky windows)。固定窗口要求窗口的位置被固定到显示器的物理位置, viewport的变换对它的位置都没有影响。
  • 虚拟桌面(Virtual Desktops)。同时打开的窗口太多时,可以把这些窗口分成不同的组,同一时刻只显示其中一组的窗口,每一组窗口就是一个虚拟桌面。
  • 任务条(Taskbars)、分页(Pagers) 。显示当前所有的打开的窗口,并且可以在这些窗口之间切换。
  • 窗口栈序(Z-Order) 。就是窗口之间的上下关系。
  • 保留区域(reserve space)。让某个窗口独占某块靠边的区域,比如任务条,一般都独占桌面最下面的一长条区域。
  • 窗口状态(Window State) 。窗口有最大化、最小化、全屏等的状态,这些由窗口管理器负责管理。当然,上层应用也可以调用窗口管理器提供的函数,来改变窗口的状态。
  • 窗口装饰。在unix下,GUI的惯例是,窗口的标题和四周的边框,都称为装饰,这些装饰的显示是由窗口管理器负责的。这样的好处时,应用程序无须做任何修改,仅通过配置窗口管理器,就可以得到风格各异的显示效果。
  • 窗口协议。这主要用于实现窗口僵死状态检测,窗口之间的同步处理等功能。


这些都是窗口管理器的基本职责。关于窗口管理更全面的职责和协议可以参考freedesktop上的规范,关于窗口管理的实现可以参考matchbox-window-manager的代码。

原创粉丝点击