Xwindow读书笔记

X四个特点
   
    1、X具有网路透通性(Network Transparent)。
    2、X不是电脑作业系统的一部分:对作业系统而言,X只是一个应用程式而已,因此,X很容易在不同的系统上装设。
    3、视窗是阶层性的 (hierarchical)。
    4、可支援许多不同风格的使用者介面geometry -- 位置和大小。

X的产品

    严格地说, X视窗系统并不是一个软体, 而是一个协定 (protocal),这个协定定义一个系统成品所必需具备的功能 (就如同 TCP/IP, DECnet 或IBM的 SNA,这些也都是协定, 定义软体所应具备的功能).任何系统能满足此协定及符合X协会其他的规□, 便可称为X。

MIT 发行的X

  . core版 -- 软体由MIT X协会提供.
  . corelib 版 -- 软体由使用者或第三集团提供.

core版的程式可分为以下几类:

    1.  X视窗系统本身的程式.
    2.  使用视窗系统必备的工具和设备程式: . 日常的视窗相关功能的工具程式 (例如将视窗内容倾印至列表机)。. 一些你常常保持在 "案头" (desktop) 的便利程式 (例如时钟,   日历).
    3.  从视窗环境获得效益的一般应用程式.
    4.  展示(Demo)程式和游戏程式.
    5.  资讯和状态报告程式.
    6.  定制 (customise)你自己的环境的工具程式.

X系统相关程序

X -  显示server -- 这个软体控制了你的工作站的键盘、滑鼠和萤幕. 这是X的心脏, 此程序可以建立、去掉视窗, 实际的应其它 client 程序的Request (需求)做写 (write)和画(draw)的动作. 这个server程序在各种硬体上有不同的程序提供, 例如:
Xapollo - 针对Apollo显示器.
Xhp - 针对Hp 9000/300 的Topcat显示器.
Xibm -  针对IBM 的APA16 和Megapel 显示器.
Xmacll -  针对Apple 的Macintosh II.
Xplx -  针对Parallax图形控制器.
Xqdss - 针对DEC 的GPX 显示器 (VAXstation II/GPX).
Xqvss - 针对DEC 的QVSS显示器.
Xsun -  针对Sun/2, Sun/3, Sun/4 和Sun/386i工作站.

Xinit - 初始(initialization)程序, 启动系统和设定Server执行.
Xdm - X显示管理器(display manager),一个提供便利和弹性地启动系统, 使系统启动成个别需求的程序, 可以和 Xinit两者择一.
Uwm - X视窗管理器(Window Manager), 此程序决定如何管理你的 "案头"、  移动视窗、重定视窗大小等等, 你可以利用选单结合滑鼠的按钮或键盘完成视窗操作.

    只有Server程序是绝对必需的, 不需其它的程序, 你就可以在X系统上跑其它的应用程序 (虽然笨了一点). (Xinit 等程序可由其它相同功能程序替代.) 以上程序包含了视窗系统, 但除了在视窗上移动游标外, 什麽事也不能做. 因此实际上, 你需要更多的公用程序和应用程序.

视窗系统公用程序   以下的工具程序并不是视窗系统的一部份, 但它们是你要更方便的使用系统或利用系统做更多的事所不可或缺的, 它们分为以下两个部份:

    1.  视窗系统操作常用工具程序

xterm - X终端机模拟器 (terminal emulator), 你的系统内大多数的程序并非特别为使用视窗系统设计. 举例来说, 一些最普通的系统程序 -- 列出档案目录, 编辑器, 编译器等, 它们在普通的终端机可以正常的执行, 可是它们如何在连视窗系统是什麽都不知道的情况下, 在X下操作? Xterm就是建立一个X的视窗, 且允许这些普通的 "笨哑终端机(dumb terminal)"程序能够在这个视窗中执行的工具程序. 这些普通程序会认为它们是在 "真的" 终端机上执行.
xhost - 让你控制网路上那些被允许存取你的显示萤幕的其他主机。
xkill - 一个可杀掉不想要之应用程序的工具程序。
xwd - 将你视窗内目前的影像倾印 (dump) 到一个档案中,使得你可以在稍後重建这个视窗、列印它或做一些你想做的事。
xpr - 将先前 xwd所抓取 (capture)的视窗影像转换成适合硬拷(hardcopy)印出的格式.
xdpr - 结合了 xwd和 xpr,允许你在一个步骤就印出视窗的内容.
xmag - 将萤幕上被选取的一部份影像加以放大。
xwud - 将先前 xwd所抓取的视窗影像重新显示於萤幕上。
x10tox11 - 将能在第10版X执行的程序转换成可在第11版执行。
xrefresh - 更新 (refresh)显示, 将某些或全部的视窗全部重画一遍。

    2.  便利的程序

xclock - 一个指针或数字型的时钟。
xclac - 一个计算器,可模拟科学工程型的计算器。
xload - 用累计图 (histogram)来显示目前机器的负载分布。
xbiff - X版的 biff,信件到达告知 (barfs if mail arrives) 程式,xbiff 会显示一个信箱的表徵图,当信箱上的旗子升起时, 表示有你的信。

一般应用和工具程式

    xedit - 一个文字编辑器,你可以用选单或键盘下命令,也可以用指标指定位置或一段文字。
    xman - 一个说明书或系统文件的浏览器。
    xmh - 一个信件管理程式。

示□和游戏程式    这些程式展示了X图形和彩色的能力

    ico - 显示一个二十面体 (或其它多面体) 在视窗内进行弹性碰撞运动.
    maze -  以乱数建立一个迷宫并找出它的解法.
    muncher - 在视窗上描绘大量动态的图样 (patterns).
    plaid - 在视窗上画一些持续变化的花格子图形.
    xlogo - 在视窗上印一个X的字形.
    puzzle -  智慧盘, 在一 4x4方块盘上, 移动编号 1 - 15 的小方块,以排成特定型态的游戏.

资讯和状态程式   以下的程式提供你有关於你的视窗系统的资讯和状态, 你将会常利用它和你自己的工具程式连结在一起.

xfd - 在视窗内显示一个被X指定的字型,且可选择性地提供更多有关此字型的资讯.
xlsfonts -  X字型的目录程式, 告诉你一个显示器上有那些字型可供使用.
showsnf - 显示上server上SNF(Server Natural Format,你Server上原有的格式) 格式对某一种字型的细节.
xwininf - 显示某个特定视窗的资讯, 如大小, 位置及其它特徵.
xlswins - 列出系统内所有的视窗, 并可选择性地列出每个视窗的一些细节.
xprop - 显示视窗的性质 (properties) 和字型.
xdpyinfo - 提供你的显示器及控制它的 server之细节.
xev - 印出和视窗相关所有X "事件(event)"的细节, 用来侦错(diagnostic)或给有经验的人使用的工具程式.

定制适合你的系统之工具程式 你可能发现你必需修改一下系统, 例如想使视窗边框换成自己喜欢的颜色等,用以下的程式, 可以使你的工作环境更加适合你.
 
xset -- 允许依照你的喜好设定显示特性, 你可以设定一个键使它有效或无效, 调整警告铃的音量, 指定字型从何处取得等.
xsetroot -  你可以选择你显示萤幕背景的外观, 当你滑鼠的指标不在任何应用视窗内时, 你可以改变使用的颜色或图样或游标.
xmodmap - 显示键盘的对应 (mapping), 也就是按什麽键对到什麽字元, 可以允许你修改成适合你的对应, 通常用来设定一些特殊键 (如META, SHIFT-LOCK等) 和函数键, 但你可以视需要设定任何键.
bitmap -  让你建立和编辑位元映像的程式, 例如用来改变cursor的式样, 编辑表徵图, 视窗的背景图样等等.
xrdb -  让你在资料库中显示或改变你喜爱的色彩或字型等等, 稍後可被应用程式使用到. 也就是说, 你可以设定一些预设的特性, 让这些特性被所有或只有特定的应用程式用来当作预设特性.
bdftosnf -  将一种字型从BDF("bitmap distribution format"一种可携的格式)格式转成你Server 原有的SNF 格式

小结:
·X是一种协议,常用MIT发行的两种版本,以core为例。
·由六类相关程序组成:X系统本身的程式. 使用系统必备的工具和设备程式. 一般应用程式.  展示(Demo)程式和游戏程式. 资讯和状态报告程式. 定制环境的工具程式.
·Xserver主要与硬件资源打交道,键盘、鼠标、显卡、显示器等外设。其中:
   Xinit - 初始(initialization)程序, 启动系统和设定Server执行.
   Xdm - X显示管理器(display manager),一个提供便利和弹性地启动系统, 使系统启动成个别需求的程序, 可以和 Xinit两者择一.
   Uwm - X视窗管理器(Window Manager), 此程序决定如何管理你的 "案头"、  移动视窗、重定视窗大小等等, 你可以利用选单结合滑鼠的按钮或键盘完成视窗操作.
·常用的视窗程序(xclient)
   xterm - X终端机模拟器 (terminal emulator)
   xhost - 让你控制网路上那些被允许存取你的显示萤幕的其他主机。
   xkill - 一个可杀掉不想要之应用程序的工具程序。
   xpr - 将先前 xwd所抓取 (capture)的视窗影像转换成适合硬拷(hardcopy)印出的格式.
   xdpr - 结合了 xwd和 xpr,允许你在一个步骤就印出视窗的内容.

视窗管理器 Window manager

    系统最基本的部份-- 也就是server,它只提供最基本的视窗功能,如建立视窗、在视窗中写入文字或画图形、控制键盘和滑鼠的输入和去掉视窗等,Server它不提供使用者介面,它只提供建立介面的基本结构。 
   使用者介面分为两个部份 -- 管理介面和应用介面。管理介面由视窗管理器控制,提供管理 "案头" 的功能,例如建立应用视窗,在萤幕上移动它们,重定大小等等。
# X :0
#twm -display :0 &

一些常见的WM
TWM 最早的WM,一切WM的原型 xorg-x11-twm-6.8.1-23.EL.i386.rpm http://xwinman.org/
FVWM (一个可扩展,完全自定义的WM) Freedom  http://www.fvwm.org 立体窗口 需设好$LCTYP  与$LANG
KWin KDE的WM  http://www.usermode.org/docs/kwintheme.html
englightenment, sawmill, iceWM ,metacity GNOME常用的WM  http://www.icewm.org/
Sawfish 类似与FVWM,但可以用LISP语言编程控制

视窗管理器只决定管理介面,另一半的使用者介面为应用介面 -- 如何和应用程式交谈和利用滑鼠或键盘控制它们。下面以xterm为例详述。

xterm 是终端机模拟器 - 它是一个可以使X应用程式视窗看起来像普通终端机一样的程式, 而无需知道有关视窗系统的功能。xterm 模拟一个 "哑终端机 (dumb terminal)", 但它也提供许多一般终端机没有的功能 :

    . 设定终端机模式与特性的突现式 (pop-up) 选单
    . 可以上下移动萤幕影像的卷动棒 (scrollbar) - 当文字列因萤幕卷动而消失时, 可以将它拉回.
    . 模拟 Tektronix 4014 终端机.
    . 可选择性地记录萤幕列到一个使用记录档 (log file).
    . "剪"(cut)"贴"(paste)文字区块.
    . 可选择文字颜色, 视窗背景等...
    . 可选择 VT100 与 Tek 视窗字型.
    . 可设定( 程式化(programmable))键盘.

使用X的网路设备

指定一个远方终端机 -- -display  选项
几乎所有的X程式都接受以一个命令列的选项来指定使用哪一个显示器 (换个说法,连接到哪一个X server ),这个选项的格式为:     -display displayname 
    你会告诉程式它的输出是哪一个显示器 (网路上任何你可以选择的显示器)。显示器名称需要包含三个元素,hostname,display number和screen number ,我们将详细解释并举例说明。

Hostname     是在网路上与显示器直接连接的机器名称,hostname也决定了应用程式和server是如何连接的。简单地说:

    假使Server在你自己本地的机器上执行,你有两种选择:

    1.  省略掉hostname,系统会选择最有效率的方式和server交谈。
    2.  定hostname为"unix",系统将用Unix domain sockets 作通信。("Unixdomain" 意指socket用传统Unix档案名称 (例如/dev/urgent)来命名. ) 在命名之後需加一个冒号(:), 即使你省略hostname,你仍需要加冒号。

    假使Server在远方的机器上执行,你一样有两种选择,依你网路上用的通信系统而定:

    1. TCP/IP :大多数的Unix系统使用此种通信方式, 简单的方法是用在你区域网路上已知的normal name (例如"venus" 或"saturn ")。你也可以用 full Internet name (例如"expo.lcs.mit.edu"或它的 Internet address "129.89.12.73")。在 name 後,需要加一个冒号。 (hostnameOR 全限定域名(fully qualified domain name (FQDN) OR IP )
    2. DECnet :用你连接到的机器上的DECnet nodename,在hostname加两个冒号(::).

display number     显示器是一组监视器,萤幕,连接一个键盘和滑鼠的逻辑萤幕的组合。换句话说,即是使用者工作的地方,在一个给定的CPU 上,显示器从 0开始编号,display number即是指哪个编号的显示器被使用,即使display number为 0, 也不可省略。 ??

screen number     对於连接到显示器上数个萤幕也被从 0开始编号,screen number 为你使用萤幕的编号,和display number以一个句点 (.)隔开,screen number 为 0 时可省略,若省略时,其前面的句点一并省略。

即:hostname:display number [.screen number]

EXAMPLE:
    以下为一些显示器格式的□例:
    . 假设为本地的机器,预设萤幕为 0,以下二者均可:
  unix:0
  :0
    . 假设你指定你自己的机器 (通常是venus),但你需要检验TCP/IP网路的操作和明显地指定萤幕:
  venus:0.0
    . TCP/IP网路上,远方的机器名为pluto ,仅有一个显示器,指定screen number为 0:
  pluto:0.1
    . DECnet网路上,display number为 1,预设screen number 为 0:
  vomvx2::1

如果在你的作业系统上,并未支持远方机器的操作,你可以藉著连接到saturn的终端机输入下面的命令: saturn% xterm -display venus:0.0
如 但由於你的作业系统事实上支援远方机器的功能,所以你毋需离开你的器便可完成上述的指定,命令如下: venus% rsh saturn xterm -display venus:0.0
注:命令可能因saturn不被允许存取venus 的显示器而失败,欲克服此种状况,输入命令:venus% xhost +

注:你可能需要非同步地执行rsh ,在命令列之後加 &,以背景工作方式执行, 但可能因为等待永远不会有的输入,shell 和rsh 间的交谈导致 rsh "block",为了克服此种情况,需修正命令为:venus% rsh saturn xterm -display venus:0.0 < /dev/null & 远方的机器 (这个例子是saturn) 并不需要有X server 在执行,甚至不需要有位元映像显示器,唯一的需求是能执行应用程式和支援网路通讯。

 warning : Can't open display 可能的原因是不被允许或目标计算机上并没有Xserver在执行

设定预设显示器
如果你不明确地指定显示器名称,程式会以Unix环境变数DISPLAY 来决定使用哪一个显示器,在启动xterm 时,系统会设定这个变数的内容,所以大部
份情况下,你什麽都不必担心。
    如果你remote-login其它的机器,在其间你执行X的应用程式,并希望回到你自己的机器上显示,那你必需明确地设定DISPLAY 变数,类似下面:
venus% rlogin saturn
Last login: Mon Nov 28 20:01:02 on console
  ...            (在远方机器上的login banner)
saturn%          (远方机器上的shell 提示)
saturn%  setenv  DISPLAY  venus:0.0
saturn%  xcalc  &
换句话说,如果不设定DISPLAY 变数,则在saturn上执行的每一个X程式都必须包含 -display venus:0.0 选项。

控制存取你的显示器 -- xhost

    我们前面提到过有时你无法连接到特定的显示器,通常的原因是你没有被许可,所以X否认你的存取。

    X用很简单的结构控制存取:你指定一份可以存取你的显示器的主机(host)名单,在这些主机上执行的应用程式均可存取你的显示器,其它不在名单上的主机则不被允许。你可以用xhost 程式来控制存取:
允许一或多个机器存取:     xhost + host1 [+host2...]
去掉允许一或多个机器存取:     xhost - host1 [-host2...]
所有的机器均被允许存取:    xhost + 换言之,所有的存取控制均被解除。
恢复存取控制:(通常因为曾经下了xhost + 的命令)     xhost - 再度取得对存取的控制,只有先前明确地被允许的机器可供存取。

    注意:存取控制应用於所有的处理 (process),而不只是针对其他使用者  所启动的处理,所以如果你透过远方的机器执行应用程式,而将显  示内容传回自己的机器,则你必需被授与存取权,否则会连接失败。

一个类比或数位时钟 - xclock -digital, 告诉 xclock 使用一个 24 小时的数字型
一个桌上型计算器 - xcalc
显示机器的负载平均 - xload
邮件通知程式 - xbiff rsh mars xbiff -file /var/spool/mail/smith    -display venus:0 &

一些包含在 core 版本内的公用程式, 它们的主要功能和视窗
系统并无密切关系, 但使用它们却可提供一个相当不错的使用者介面 :

    . Xedit - 一个以视窗为基础的 (window-based) 一般目的文字编辑器.
    . Xman  - 一个指南页 (manpage) 或系统文件的浏览工具.
    . Xmh   - 一个 mh 邮件处理程式的视窗前端 (front-end) .

找出通过随机迷宫的路径 - maze
担任指标的大眼睛 - xeyes
智慧盘游戏 - puzzle
列印一个大X语标 - xlogo
跳动的多面体 - ico
动态几何图样 - muncher 与 plaid
paint : 简单的绘图程式. (像一个画图程式, 但你可以对区域涂上纹理或颜色, 不只是线.)
xcolors : 一个可展示你的系统上所有颜色名称的好程式.
xfish : 设定鱼在你的整个背景视窗内游动. 有趣的部分是你可以用滑鼠
射击它们.
qix : 一个 qix 射击游戏的程式.
xmille : 和你玩一个 Mille Bournes 的牌戏.
xsol : 和你玩一个单人玩的牌戏.
xtrek : 一个令人著迷的太空游戏.

列出你的Xserver的特徵 -- xdpyinfo xdpyinfo 列出有关你的Xserver和server所控制萤幕之各种项目的资讯
获取有关视窗的资讯
    有三个程式可以提供目前在你显示器上视窗的资讯。它们是从不同的角度看系统:
    1.  列印视窗的阶层 -- xlswins
    2.  对单一视窗详细的资讯 -- xwininfo
    3.  列出视窗的性质 -- xprop
观察X的事件 -- xev

你可能感兴趣的:(Xwindow读书笔记)