当前位置: 首页 > 科技观察

温故而知新,再从用户界面做起!

时间:2023-03-22 10:37:53 科技观察

从人机交互到用户界面,从GUI到窗口系统,再到X系统。从X系统的设计思想,到Xserver、Xclient和X11协议,再到windowmanager甚至wayland。温故而知新,再从用户界面做起!1、从用户界面入手用户界面(UserInterface)是进行人机交互活动的系统组件,是人与计算机进行交流和对话的界面。早期的计算机通过面板上的指示灯显示二进制数据和指令,人们通过面板上的开关、触发器和穿孔纸带发送各种数据和指令。20世纪50年代中后期,由于控制台和打字机等设备的使用,计算机可以批量处理多项计算任务,从而取代了原来笨拙的手动击键方式,提高了计算机的使用效率。1963年,麻省理工学院在709/7090计算机上成功研制出第一台连接多个分时终端的分时系统,最早使用文本编辑程序。此后,命令行形式的多用户分时终端成为70、80年代用户界面的主流。1980年代初期,美国施乐公司首先在Alto电脑上使用Smarttalk-80程序设计开发环境,后来在Mactosh等电脑上,将用户界面推向了图形用户的新阶段界面。随后对用户界面管理系统和智能界面的研究促进了用户界面的发展。GUI的核心特征是WIMP:W(window)指的是窗口,是用户或系统的一个工作区域,一个屏幕可以有多个窗口。I(icons)是指图标,是视觉图形标志,易于人们隐喻和理解。M(menu)指的是菜单,是一种可供用户选择的功能提示。P(指针)是指鼠标等,方便用户直接对屏幕对象进行操作。GUI采用了很多桌面办公的隐喻,用户共享一个直观的界面框架。人们熟悉办公桌的情况,因此很容易理解计算机上显示的图标的含义,例如文件夹、收件箱、画笔、工作簿、按键和时钟。采用GUI后,用户可以直接对屏幕上的对象进行拖拽、删除、插入、放大、旋转等操作,执行操作后,屏幕可以立即反馈信息或结果,实现所见即所得你得到什么。2.关于GUIGUI系统通常由三个基本层组成。它们是显示模型、窗口模型和用户模型。用户模型包含了显示和交互的主要特征,因此GUI这个术语有时仅指用户模型,这也是一种误导。最底层是计算机硬件平台,如Intel、PowerPC等,硬件平台的最上层是计算机的操作系统。大多数GUI系统仅在一个或两个操作系统上运行,只有少数例外。操作系统之上是GUI的显示模型,它决定了图形在屏幕上显示的基本方式。不同的GUI系统采用不同的显示模型。例如,大多数运行在Unix/Linux上的图形用户界面系统都使用Xwindow作为显示模型,而MSwindows则使用公司设计的GDI作为显示模型。在显示模型之上是GUI系统的窗口模型。窗口模型决定了窗口在屏幕上如何显示,如何改变大小,如何移动,以及窗口的层次关系。它通常由两部分组成,一是编程工具,二是关于如何移动、输出和读取屏幕显示信息的指令。由于X窗口不仅规定了基本图形对象的显示方式,还规定了窗口的显示方式,因此它既可以作为图形用户界面的显示模型,又可以作为它的窗口模型。窗口模型之上是用户模型,图形用户界面的用户模型也称为GUI的视觉体验。它还包括两部分:用于构建用户界面的工具和关于如何在屏幕上组织各种图形对象以及这些对象如何相互交互的说明。例如,每个GUI模型都会描述它支持哪些菜单和显示方式。GUI系统的应用程序界面由其显示模型、窗口模型和用户模型的应用程序界面组成。GUI系统一般分为三类:基于操作系统内核的GUI:这类GUI的大部分功能都集成在操作系统内核中,图形用户界面与操作系统紧密配合,实现系统管理.应用程序使用系统调用来完成对窗口的各种操作。这种图形用户界面主要是在个人电脑环境下实现的,比如Apple的Mac。GUI与操作系统的紧密结合虽然给GUI的开发带来了便利,但这类GUI依附于??特定的操作系统和硬件支持环境,使得GUI难以修改、难以扩展、可移植性差。基于CS模型的GUI:这类GUI由与硬件直接相关的服务器部分和独立于硬件的客户端部分组成,实现了GUI的设备无关性。当面对不同的硬件环境时,只需要修改直接操作硬件的服务器部分,具有更好的可移植性。这类图形用户界面的代表是X窗口。基于库函数的GUI:这类GUI是在操作系统的上层实现的,可以看作是操作系统的扩展。它以库函数的形式提供,用于调用对窗口进行操作的应用程序。这种图形用户界面比较容易修改、扩展和移植。但是,在其基础上编写的应用程序仍然与操作系统有很强的相关性,这给它的移植带来了一定的障碍。此类GUI的典型产品是MSwindows。3.窗口系统窗口系统是一组在屏幕的定义区域内管理程序输入和输出的工具。它类似于操作系统。操作系统管理存储空间和I/O设备,而窗口系统管理窗口、事件、文本输入、文本和图形输出以及各种对象属性;操作系统使用调度算法和I/O块进行调度,而窗口系统使用用户生成的事件进行调度。所谓窗口,是指屏幕上的一个矩形区域,用户可以通过它显示和观察该区域的全部或部分内容,并可以对显示的内容进行系统预定的各种文字或图形操作。一般将窗口称为虚拟屏幕,将显示器称为物理屏幕。现代的窗口系统支持多个窗口的重叠显示,这就不可避免地涉及到各个窗口在屏幕上的堆叠顺序,一般由一种叫做窗口“Z顺序”的机制来管理。“Z顺序”其实是相对于屏幕坐标的。假设一条Z轴穿过屏幕原点并垂直于屏幕。它从外面指向屏幕。窗口在这个Z轴上的值决定了它的Z序,Z序值大的窗口覆盖Z序值小的窗口。因此,Z序列实际上定义了屏幕上每个窗口的堆叠顺序。窗口管理技术是屏幕管理技术的核心,在实现时必须首先定义窗口的数据结构。各种窗户的风格各不相同,但它们的基本信息可以归纳为以下几类:标志信息,作为一个窗户的标志,用正整数表示,不同的窗户有不同的标志。风格信息,表示窗口的显示风格。描述窗口及其各种组件在屏幕上的位置的位置信息。内容信息,包括与窗口中各个组件相关的数据,如菜单等。图像信息,存储与窗口相关的屏幕图像,如窗口的图标。父子信息是指一个窗口的父窗口及其子窗口的信息。消息过程是指窗口对各种消息的处理函数。窗口管理提供了一套工具函数来实现创建、关闭、删除窗口等基本操作功能,同时还实现了设置、获取窗口属性、移动等窗口控制功能。这里需要注意的是,在对一个窗口进行创建、关闭等操作时,系统的窗口Z序列链表和每个窗口的信息都要进行相应的修改。4.XwindowXwindow是麻省理工学院推出的窗口系统。它的最早版本,简称X,于1984年发布,旨在建立不依赖于特定硬件系统的图形和文本显示窗口系统的标准。Xwindow是一个图形显示、服务和管理系统,包括光栅图形技术、用户界面技术、操作系统技术和计算机网络技术,为用户提供灵活多样的交互式图形界面。Xwindow完备的管理功能和高效的程序开发环境也成为事实上的行业标准。从一般用户的角度来看,窗口系统具有以下特点:支持不同风格的用户界面,具有网络透明性,独立于显示设备和输入设备。支持并行显示,支持多节目并行运行。它支持重叠和平铺窗口。有多个窗口管理器,但系统中只能有一个活动的窗口管理器。它具有良好的可扩展性。从软件开发者的角度来看,windows具有以下特点:提供多种资源及其管理机制。窗口系统资源包括屏幕、窗口、像素图、调色板、字体、光标、设备和绘图属性集。提供基于网络的窗口协议,提供各种库函数、工具箱、对象类等编程机制,将窗口环境中的各种动作或行为抽象为请求和事件,并提供相应的数据流和管理机制。大大简化了编程工作。5、X系统的设计思想X窗口系统的设计思想是创造一个与系统硬件无关,可以通过网络充分扩展的图形界面(简称GUI)。因此,Xwindow系统设计遵循Client/server模式,这种模式满足Xwindow系统充分的可扩展性,在网络上采用X协议封装,实现网络的透明性。XWindowSystem的Server负责管理所有显示相关的资源。不同的硬件平台往往对应不同的Server。因此,XServer与硬件相关,其驱动往往由硬件厂商提供。另一方面,由于XWindowSystem是事件驱动的,XServer会将鼠标移动等驱动事件传递给客户端。客户端负责根据程序的需要向服务器提出服务请求,服务器根据客户端的请求将涉及的图形显示在显示设备上,并将服务请求结果返回给客户端整个过程。因此,XServer的设计由厂商完成,而Client由用户设计,通过XServer将显示设备和客户端完全隔离,使Client具有可移植性。XClient的设计是通过调用Xlib库实现对服务器的服务请求,从Xlib中调用函数,使用X协议封装请求,通过网络传递给XServer。XServer负责将请求依次传递给指定的设备,由设备负责。处理。Xlib开发XClient的工作量很大,Xt库和window组件集在Xwindow系统的设计中经常用到。Xt库提供了多种用于保存数据和提供用户界面的对象,称为组件或Widgets,并管理Widgets的几何属性和事件处理。在Xt库提供的Widgets的基础上,Widget集合建立了一些基本的Widget类和专门的Widget子类来完成用户界面的各种功能。常见的小部件集包括Motif、Athena、Qt和Gnome等库。6.X服务器X服务器是一个程序,用于跟踪来自输入设备(例如键盘和鼠标)以及任何其他正在运行的客户端程序的所有输入。服务器充当客户端应用程序和本地工作站硬件之间的中介并执行以下任务:允许多个客户端访问多屏工作站解释来自客户端的网络消息并通过发送网络消息将用户输入传达给客户端程序绘制二维图形,这些图形是由多屏工作站服务器完成的,而不是由客户端程序完成的。复杂的数据结构,包括窗口、光标、字体和图形信息,都作为资源来维护,由服务器维护的资源被每个用户减少。每个客户端程序维护的数据量也减少了必须在网络上传输的数据量。从结构上看,XServer可以分为三层:最上层是与设备无关的部分,负责按照协议格式接收和解释客户端的请求报文,中间层层是与操作系统相关的部分,它提供了与特定操作系统的接口;下层是与设备相关的部分,是具体支持硬件的设备驱动程序集。XServer通过X协议与客户端程序的X协议xlib接口进行通信。通过协议传递的信息有四种类型:请求、响应、事件和错误。协议请求由xlib生成并发送到服务器。请求中可以携带各种信息,比如画线描述,查询当前某个窗口的大小等。服务端将协议对某些请求的响应发送给xlib,并不是所有的请求都可以通过响应得到响应,比如因为绘图请求不会生成回复。事件由服务器传递给xlib,它包含了某个设备的动作信息,事件是客户端程序获取信息的主要手段。错误有两种,一种是可恢复错误,另一种是致命错误,由服务器发送给xlib的一个错误管理库程序。在这四个信息包中,请求和事件是主要的。Xlib先将请求存储起来,而不是立即发送给服务器,然后在适当的情况下将请求缓冲区的内容发送给服务器。一旦用户触发一个事件并且网络允许,服务器将事件发送给xlib,xlib为每个服务器管理一个事件队列。每当来自服务器的事件到达时,它都会排队等待客户端程序读取它。7、X客户端Xlib是X窗口系统的C语言编程接口,为应用程序提供底层编程接口。Xlib将参数封装为协议请求,通过IPC机制发送给服务器进程。Xlib有320多个函数,可分为系统函数(连接的建立和移除等)、窗口函数(窗口属性和操作)、图形函数(图元、图形属性、文字字体、区域、图像等).)、颜色函数(颜色表操作等)、时间函数(输入时间和窗口事件)和其他函数(使用函数等)。XClient并没有使用标准的C函数来获取输入,而是接收事件,然后根据事件类型进行分支,执行适当的响应。传统程序由在特定时间查询特定类型输入的程序控制。X程序完全处于用户控制之下,随时准备好应对任何类型的事件。事件是X应用程序编程的核心。XClient使用事件与服务器或其他客户端进行通信。从程序员的角度来看,一个事件可以包含很多信息:应用程序想要获取的信息,例如用户输入和来自其他客户端的有用信息。其他客户端想知道您的应用程序正在做什么,例如将可用文本传输给第三方客户端。窗口管理器想知道的一些信息,例如应用程序在映射窗口时发送的更改屏幕布局的请求消息。XClient对事件的处理分为三步:首先,选择每个窗口需要的事件。然后,将视口映射到屏幕。最后,当一个事件产生时,应用程序提供一个事件循环(EventLoop)从事件队列中一个一个地读取事件并进行处理。这个过程很简单,唯一的复杂因素是各种事件可能同时发生,而且同一个事件在不同的窗口中可能有不同的含义。因此,有必要了解每个事件发生的具体情况,以确保应用程序会采取正确的行为来处理它。8、X协议XWindow系统网络协议,即X11协议,定义了客户端和服务器之间用来传递信息的数据结构,即信息格式的定义。它是一个基于流处理通信而不是过程或内核调用的异步接口。X11有很多实现。其中,用C语言实现的函数库Xlib提供了直接访问协议的原语和信息交换的能力。X.11.3总共有120多个请求并且是可扩展的,描述了客户端和服务器进程通信的结构、语法和语义。X协议的主要特点如下:该协议将用户界面事件与核心窗口系统本身分开,是窗口管理器和图形用户界面的模式。这一特点体现在协议本身与用户界面策略无关。简而言之,界面策略就是各个窗口在显示终端上的布局,窗口大小和位置的控制,而这些策略是由应用程序本身在一个高级程序中实现的。窗口的动态布局管理由窗口管理器完成,有利于实现与操作系统和显示设备无关。该协议提供了网络透明性,开发者使用协议功能时无需了解底层网络如何完成各种数据和管理信息传输。为了减少网络开销和提高网络性能,客户端和服务器之间的通信是异步的。也就是说,客户端和服务器之间发送的大多数消息不必由对等实体直接应答。当客户端或服务器发送消息时,默认情况下接收和处理是正确的。这种假设加速了X11的运行,因为客户端或服务器不必等待X11回复,假设网络传输是可靠的。如果实际执行造成的延迟超过一定限度,协议规定重新发送请求。另一种提高网络性能的方法是将许多相关的请求或响应组合成一个组,并在一个数据包中发送,这大大减少了网络中传输的数据包数量。基于这一特点,X11协议有时也被称为面向块的协议,不同的实现有不同的解决业务数据包分解和重组的方法。从OSI的角度来看,X11被认为是一个支持分布式应用的协议,但是该协议并没有提供太多的服务,比如第一层到第六层提供的服务,所以被认为是最接近于分布式应用的协议。应用层。但是,由于X11存在于表现层数据表示中,会话层维护一个会话,决定了异步请求和响应的特性。很多人认为它相当于参考模型中的上三层,本身应该作为传输层上的一个模块。.另一种观点认为,从严格的OSI七层结构开始,X11只能作为一个应用层的应用服务元素,其服务原语映射到连接控制服务元素和表现层服务。应用层映射视角代表了将SystemX映射到OSI模型的战略方向。9、窗口管理器在Xwindow系统中,窗口管理器是一个特殊的客户端程序,其作用是将服务器与客户端交互的数据重定向到窗口管理器。因此,窗口管理是在GUI系统中实现的。在结构中起中间作用。窗口管理器是决定X外观的重要程序。它可以改变窗口的大小或位置,重新排列窗口在堆栈中的位置,或者将窗口变成一个图标等等。在X中,窗口管理器类似于Linux系统中的shell命令行解释器:shell只是一个用户进程,如果你改变它,你也会改变系统的用户界面。然而,窗口管理器和X之间的关系与shell和命令行之间的关系根本不同。更简单,不用窗口管理器也可以用X,但是界面有点简陋,使用起来不方便;但是没有shell,就没有命令行。除了管理窗口的基本功能外,窗口管理器还提高了界面质量。最初的目的是减少对键盘输入的需求,而尽可能地使用鼠标。一个共同的特点是提供一个您可以自己构建的通用菜单,只需选择一个菜单选项即可启动窗口应用程序。启动命令通常包括指示应用程序窗口出现的位置、大小、文本应使用什么颜色等,用户无需输入大量信息即可启动应用程序。窗口管理器和客户端遵循ICCCM协议,大部分通信是基于父窗口的属性,也可以通过窗口管理器产生的事件进行通信。Shell处理客户端和窗口管理器之间的通信。客户端不需要直接处理属性或事件,通过设置Shell的资源来指定窗口的属性。XClient应用程序可以最小化为一个图标。图标的结构非常简单,就是窗口的代表性图案。当系统图标一个应用程序窗口时,窗口管理器告诉服务器不要在屏幕上显示这个窗口。窗口管理器通常会提供一个预设图标,但Client应用程序可以提供自己的图标并推荐使用。有的窗口管理器接受这个要求,有的不接受,仍然使用自己的图标,只是把这个要求当作窗口管理器的提示。正如需要显示特定的图标一样,应用程序也可以向窗口管理器传递其他提示或信息,包括:创建应用程序和图标窗口时应用程序和图标窗口的名称;它们在屏幕上的位置位置信息对窗口大小的限制(例如,xClient可以要求“占用窗口的长度/宽度不得小于该值”)对窗口调整大小的特殊要求这种将信息传递给窗口管理器的机制称为属性机制。大多数调整大小或图标化都是通过窗口管理器进行的,因为它是一个公共客户端。理论上,任何客户端都可以随意调整自己的大小,但如果所有客户端都这样做,就会造成不必要的混乱。因此,这些应用和平共处的原则是:不要自己调整大小,交给窗口管理器就是让用户自己决定。窗口管理器负责以下三个核心任务:接收来自窗口的传入消息,将消息正确路由到目标窗口并触发窗口进程;更新活动窗口和焦点窗口控件;维护窗口顺序和每个窗口的裁剪矩形链,正确重绘窗口并执行窗口过程。使用窗口管理器时,服务器不直接与其他客户端通信,而是通过窗口管理器进行中继。当某些消息被定义为WM命令时,它们将被拦截。XWindow力求从桌面(DesktopEnvironment)中分离出来,但还是有很多功能上的重叠。许多桌面提供商已经开始制作自己的窗口管理器并将其直接与桌面捆绑在一起,例如GNOME和KDE。KDE的价值不仅在于它包含了窗口管理器、文件管理器、工具面板、控制中心以及用户希望包含在现代桌面系统中的其他组件。它的真正优势体现在内部组件之间的互操作性上。.KDE试图成为一个桌面环境,而不仅仅是一个窗口管理器。KDE已经达到了惊人的成熟度,但由于KDE所基于的QT库的许可问题,一些人拒绝使用它。好在QT库已经开源了,不过好像还没有变成基于GPL的方法。GNOME是GNU网络对象模型环境的缩写。该项目的目标是构建一个完全基于免费软件的完整且用户友好的桌面环境。GNOME是GNU项目的一部分,也是开源运动的一部分。它由一组具有一致外观的小型工具和大型应用程序组成,所有这些都使用GTK+作为它们的GUI工具包。GNOME不依赖于窗口管理器,其组件之间的互操作性不限于应用程序,而是跨计算机和系统平台,因为它使用通用对象请求代理架构(CORBA)。同时,它所基于的GTK+库是完全自由开源的,这与Linux的理念是一致的。10、从X到WaylandX11很老了,X服务器协议提供的大部分功能都不再使用了,几乎所有X11所做的工作都重新分配给各种应用程序和窗口管理器。Wayland于2008年由XOrg开发人员KristianHogsberg作为个人项目启动。它是一种通信协议,指定显示服务器与其客户端之间的通信。Wayland最初是作为一个免费的开源项目开发的,目的是用现代、安全和简单的窗口系统取代X11。在Wayland中,合成器是一个窗口管理器,它为应用程序提供每个窗口的离屏缓冲区。窗口管理器将窗口缓冲区合成为代表屏幕的图像,并将结果写入显示内存。Wayland协议允许合成器将输入事件直接发送给客户端,并允许客户端将事件直接发送给合成器。与X情况一样,客户端在收到事件时更新用户界面作为响应。但是,在Wayland中,渲染发生在客户端,客户端只需向合成器发送请求以指示已更新的区域。Wayland的“直接渲染架构”彻底结束了传统X系统在渲染图形时需要不断向服务器请求、确认、绘制的繁琐过程,理论上响应速度大幅提升。也就是说,Wayland从根本上消除了“Server+Compositor”的重复,只有一个“Compositor”合成器。WaylandCompositor的作用就像“XServer”+“WindowManager”,但它只做自己的事情。Wayland的结构简单高效,试图解决“XWindow”多年来积累并通过“扩展”解决的问题。然而,到目前为止,绝大多数现有应用程序都是为X编写的。在所有这些应用程序被移植之前,Xorg需要维护,与Xorg相比,Wayland还不是很稳定。【参考】https://www.x.org/wiki/https://wayland.freedesktop.org/https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)http://www.gnome。orghttp://www.kde.orghttps://blog.csdn.net/a8039974/article/details/122867167