X11/Print 指南
这是 打印版本 的 X11 指南 当你打印或预览此页面时,你将不会看到此消息或任何不属于书籍内容的元素。 |
本书,即维基教科书 X11 指南,是关于X 窗口系统的。本书的目标读者是 X11 用户。
X11 是大多数Unix 或类 Unix 系统的图形环境,包括*BSD 和GNU/Linux;它提供对屏幕、键盘和鼠标的访问。X11 是 Unix 和 Linux 的图形驱动程序。你是否在这些系统上使用Firefox、OpenOffice.org、GNOME、GIMP 或KDE?如果是,那么你就是 X11 用户。
本书是关于X 窗口系统的。有些用户将其描述为 Unix 和 Linux 的图形驱动程序。
本章将解释 X11 的基础知识,包括
- 为什么会有如此多的窗口管理器和桌面环境?
- 什么是控制台,X 如何提供对它的访问?
- X 服务器和 X 客户端的目的是什么?
- 不同的 X 客户端是否可以互操作?
大多数 Unix 和 Linux 发行版都提供命令行和 X 窗口系统。在Mac OS X 中,“X”是版本号“十”;但是,苹果和其他方为 Mac OS X 提供了 X11,这使你能够同时使用 X11 和原生 Macintosh 窗口系统。
然而,仅仅因为许多系统都提供 X 窗口系统,并不意味着它看起来总是相同。一些 X 用户使用 GNOME 桌面环境,一些使用 KDE 桌面环境。有些用户在使用 GNOME 和 KDE 程序时使用 Xfce 桌面环境。这并不意味着所有 *BSD 用户都使用 GNOME,所有 Linux 用户都使用 KDE;相反,*BSD 和 Linux 用户都分为使用 GNOME 的用户、使用 KDE 的用户、使用其他环境的用户以及不运行 X 的用户。
有其他维基教科书,使用 GNOME 和使用 KDE,它们记录了这两个环境。
有许多不同的窗口管理器 可用于 X。大多数窗口周围都有装饰,这些装饰提供了一些功能,例如移动、关闭、调整大小以及其他组织窗口的方式。但是,这些装饰在每台运行 X 的计算机上并不相同。
窗口管理器是那些绘制这些装饰的程序。大多数窗口管理器都绘制标题栏,但有些则不绘制。有些窗口管理器不制作任何装饰,而是提供菜单或按键来管理窗口。有些窗口管理器允许你重叠窗口、在窗口之间切换以及暂时隐藏窗口。
有些窗口管理器比 GNOME 和 KDE 都要古老,一些用户继续喜欢轻量级的窗口管理器,而不是那些占用更多内存和计算资源的重量级桌面环境。许多 X11 用户正在运行Metacity,即 GNOME 窗口管理器,或KWin,即 KDE 窗口管理器。
X 的与众不同之处在于它提供了许多可供选择的窗口管理器。(本书列出了至少 20 个窗口管理器。)作为用户,*您*可以选择要安装、配置和使用的窗口管理器。您可以拥有自己的自定义环境,除非您无法安装或配置您想要的窗口管理器。
但是,虽然 X 只允许一个窗口管理器,但它允许多个窗口。与 Mac 或 Windows 不同,X11 没有提供标准界面或配色方案,因此每个窗口可能会以不同的方式绘制其菜单、滚动条和按钮。至少窗口装饰在每个窗口上将是相同的。例如,可以在一个 X 服务器上同时运行 Firefox 和 OpenOffice.org,以及来自 GNOME 和 KDE 的程序,因为每个程序都有自己的窗口或多个窗口。但如果您正在运行 Metacity,那么您就不能同时运行 KWin,因为这两个都是窗口管理器,而不是桌面环境。
在内部,X 窗口系统有一个特殊的协议 - X 协议的版本 11。这个协议的作用是为像 Firefox、OpenOffice.org、Nautilus 和 Konqueror 这样的程序提供控制台访问。
每台家用电脑或工作站都有一台控制台,它包括一个屏幕、鼠标和键盘。事实上,一些控制台有多个屏幕和多个输入设备,比如两个鼠标或一个鼠标和一个触控板。通常,Unix 内核只提供一个控制台终端。内核加载一个纯文本视频驱动程序和一个键盘驱动程序,并创建一个纯文本终端,适合运行命令行,例如Bourne shell 和一些纯文本程序,比如vi 和NetHack。
如果我们想要绘制图形或使用鼠标,我们必须运行一个知道如何做到这一点的程序。我们启动一个名为X 服务器的 X11 程序。它加载一个图形视频驱动程序、一个键盘驱动程序和一个鼠标驱动程序。然后,X 服务器允许程序创建一个窗口。窗口是一个矩形区域,程序出现在其中;人们可以在窗口中输入和点击。X11 允许程序共享控制台,因为它允许屏幕上有多个窗口。(例如,一个人可能有两个 Firefox 窗口和一个 OpenOffice.org 窗口打开。)这与 Mac 和 Windows 的功能相同。
当您启动 X 服务器时,它会将屏幕更改为灰色并创建一个鼠标光标。然后它等待。就像一个 web 服务器等待 web 浏览器连接,或者一个 ssh 服务器等待远程登录,X 服务器等待 X 客户端连接。X 客户端是一个程序,比如 Firefox 和 OpenOffice.org,它想要在屏幕上创建一到多个窗口。
与 Mac 或 Windows 不同的是,X 服务器可以接受网络连接。当您在一台计算机上使用 X 服务器时,您可以远程登录到另一台计算机,然后要求它连接到您的 X 服务器。这样您就可以看到和使用其他计算机上的程序,即使这些计算机在不同的操作系统上使用 X。
当一个 X 客户端连接到 X 服务器(在同一台或不同的计算机上)时,它会使用X 协议的版本 11。这就是客户端告诉服务器绘制什么的方式,而服务器告诉客户端键盘和鼠标输入是什么。许多 X 客户端永远不需要了解 X 服务器的硬件或操作系统,因为 X 服务器控制着控制台。像 Firefox 和 OpenOffice.org 这样的客户端只需要了解 X 协议。
X11 程序共享剪贴板和字体,但有时它们没有太多其他共同之处。这导致了不仅在外观上,而且在功能上也存在不兼容性:应用程序之间的拖放有时是不可能的,并且剪贴板的使用不一致。
现在,随着freedesktop.org 等机构的努力,一些不同桌面环境的程序可以进行合作。桌面环境,如 GNOME 和 KDE,以及不太常用的环境,如 Xfce,提供了可以很好地相互协作的应用程序。这些努力的结果包括
- 使用剪贴板的标准规则
- 窗口管理器和应用程序之间的合作
- GNOME、KDE 和其他窗口之间的拖放
- 对 X 服务器的改进
您会做
$ XFree86 -configure $ Xorg -configure
或
$ xf86cfg $ xorgcfg
特别是对于 XFree86 4.0 或 Xorg,"xf86config" 和 "xorgconfig" 脚本已经过时(除非您有旧硬件)。
这将创建您的 XF86Config 或 xorg.conf 文件。
如果您使用Debian,您可以在重新配置 xserver-xorg 包时创建一个新的配置文件。运行它将覆盖您当前的配置,因此请创建备份副本,例如
cp /etc/X11/xorg.conf /etc/X11/xorg.conf.new.backup
使用以下命令重新配置:
dpkg-reconfigure xserver-xorg
- 通常,如果您想让 X 正常运行,您首先要做的就是关闭它。通常可以使用 ctrl-alt-backspace 来完成此操作,但有时 KDM/GDM 会重新启动(登录管理器)。按下 ctrl-n 或其他键进行控制台登录。
- 以 root 用户身份登录并输入 "init 3" 以进入运行级别 3。这将允许您安装图形驱动程序。
- 如果您使用的是 opensuse,您应该运行 sax2,或者如果 sax2 不起作用,则使用非加速 x 的选项,即 sax2-vesa。
- 如果您有 nvidia 显卡,它们有一个 x 配置脚本。命令是 nvidia-xconfig,开始输入 "nvidia" 并两次按下 tab 键。如果您没有得到任何结果,则需要安装图形驱动程序。
如果您有 Opensuse,您可能会从 Novell 的 Bugzilla 团队获得帮助。他们可能无法立即解决问题,但您会发现,无论是由于您的努力还是其他人,这些问题在以后的版本中都得到了修复。
要手动配置几乎任何东西,请搜索 gentoo 或 gentoo wiki。对于这个主题,https://gentoolinux.cn/doc/en/xorg-config.xml 应该很有用。
从参考实现到 Xorg 6.9,X11 使用自己的 "imake" 构建系统。客户端、服务器和库在一个构建树中。(只构建树的一部分非常困难;必须构建整个树。)一些东西,比如 Mesa 和 Freetype,被修改为可以选择成为树的一部分。
Xorg 7.0 用一组基于 GNU autoconf 构建系统的模块取代了它。这创建了一个复杂的包和依赖关系系统。同时实现 Xorg 6.9rc1 和 Xorg 7.0rc1 的两个系统的困难导致了第一个候选版本发布的延迟。
为了使用 imake 构建 Xorg,您首先需要下载并解压缩源代码包。Xorg 6.9rc1 的代码包名为xorg-x11-6.8.99.901.tar.bz2可以从这里获得。现在 Xorg 6.9 和 7.0 的最终版本已经可用,您可以使用镜像列表这里找到它们。
构建系统的粗略概述
- 创建一个 "host.def" 文件(可选)。
- 执行 "make World" 以配置和构建树。
- 执行 "make install" 和 "make install.man" 以安装所有内容。
您可以使用 "host.def" 文件自定义构建。如果您不创建它,那么您将使用默认设置,这些设置应该已经针对您的操作系统进行了调整。
文件xc/BUILD更详细地描述了构建过程。
是的,您必须构建整个树才能构建其中的一部分。唯一的例外是,有时您可以执行仅服务器或无服务器构建。请参阅我们关于#构建静态服务器的部分,以及xc/config/cf/xorgsite.def.
在以下示例中,root 已授予我们对/usr/local/src的写入权限。我们下载了 Xorg 6.9 版本候选 1(/usr/local/src/xorg-x11-6.8.99.901.tar.bz2).
)。我们已经安装了 Xorg 6.8.2。我们正在构建期间运行它,因此我们有多个 xterm 用于在其中输入 shell 命令。
使用“xterm”,将源代码解压缩到/usr/local/src,创建/usr/local/src/xc:
$ cd /usr/local/src $ bzcat xorg-x11-6.8.99.901.tar.bz2 | pax -rv
。正如xc/BUILD解释的那样,我们可以使用lndir创建指向源代码的符号链接的影子树。(这可以防止对象出现在源代码树中。)由于“lndir”是 X 的一部分,并且我们已经安装了 Xorg 6.8.2,因此我们可以运行“lndir”。
$ mkdir xcbuild $ cd xcbuild $ lndir ../xc
请注意,当前目录是/usr/local/src/xcbuild。现在我们将跳过创建config/cf/host.def并使用默认配置。现在是调用 Makefile 的时候了。我们必须运行make World,因为没有其他正确的方法来配置和启动构建。如果我们运行 Bourne shell
$ make World > World.log 2>&1
如果我们运行 C shell,那么上面的命令是make World >& World.log. |
运行“make”的“xterm”现在很忙。为了查看日志,我们在第二个 xterm 中运行“tail”。
$ cd /usr/local/src/xcbuild $ tail -f World.log
最终,日志会宣布 Xorg 的构建已完成。
如果我们需要重新启动构建(例如,在发生错误后),那么我们不想清理树。一个make World配置树,清理树并启动构建。我们可以使用以下命令重新启动构建make Everything或make;参见xc/BUILD了解详细信息。 |
我们安装(到默认的/usr/X11R6,因此覆盖了大多数 Xorg 6.8.2)。
$ sudo make install $ sudo make install.man
注意
- 如果我们的系统上没有“sudo”工作,那么我们将使用“su”。
- 可以在执行安装之前退出 X11。另一种选择是在 X11 运行时覆盖大部分 X11。这可以工作,但稍微不安全一点。
如果需要,退出 X 并运行xorgcfg创建配置文件。
可以修改树以仅构建静态 X 服务器。如果您需要从树的较新版本中获得更好的硬件支持,这将很有用。此外,这跳过了构建库、客户端和单独的服务器模块。(X11 协议非常稳定,因此较新的服务器可以与较旧的库和客户端一起使用。)
OpenBSD 提供了一个示例host.def。他们的示例host.def是下一个场景的基础。如果您有静态构建 X 服务器的理由,那么您将执行类似于下一个场景的操作。
场景:我们已经安装了 Xorg 6.8.2。我们需要 Xorg 6.9rc0(版本候选 0)中更好的“ati”驱动程序,但我们需要跳过大部分 6.9rc0 树以避免错误。
解决方案:我们将静态构建一个 6.9rc0 服务器。
如果您使用“lndir”制作了一个影子树,请在影子树中创建像“host.def”和“X11Conf.h”这样的文件,而不是源代码树中。 |
在config/cf/host.def处的树中创建此文件。如果您有一个影子树,请将其放在影子树中。该文件是
#define InstallEmptyHostDef #define BuildServersOnly YES /* * you may also restrict the drivers that are built by editing and * uncommenting the line below */ #define XF86CardDrivers wsfb ati #define UsbMouseSupport NO #define DoLoadableServer NO #define XnestServer NO #define XVirtualFramebufferServer NO #define XprtServer NO #define BuildGlxExt NO #define BuildGLXLibrary NO #define BuildGLULibrary NO #define BuildRenderLibrary NO #define BuildLBX NO #define BuildType1 NO #define BuildFreeType NO #define BuildXTrueType NO #define BuildSpeedo NO #define BuildFonts NO #define BuildXFree86ConfigTools NO
“XF86CardDrivers”行已更改为仅指定“wsfb”和“ati”。我们的驱动程序是“ati”。我们有一个用于避免高级硬件功能的第二个驱动程序,以防“ati”让我们失望。“wsfb”驱动程序在 OpenBSD 上使用内核帧缓冲区而不是重新配置硬件。在 Linux 上,帧缓冲区驱动程序是“fbdev”。在 i386 硬件上,“vga”和“vesa”可能是不错的选择。使用以下行之一
#define XF86CardDrivers wsfb ati #define XF86CardDrivers fbdev ati #define XF86CardDrivers vga ati #define XF86CardDrivers vesa ati
现在启动构建
$ make World > World.log 2>&1
构建最终会因某些“XlibConf.h”丢失而停止,因为我们的 host.def 正在跳过该步骤。(这是一个错误;Xorg 6.8.2 不需要“XlibConf.h”文件。)该文件可能是在构建 libX11 时生成的,而我们跳过了它。对于服务器,我们实际上不需要它。在xc/lib/X11/XlibConf.h:
$ touch lib/X11/XlibConf.h
处创建一个空文件。现在继续构建
$ make Everything >> World.log 2>&1
最终,构建会完成。服务器将出现在xc/programs/Xserver/Xorg处。由于此文件是静态链接的,因此它是唯一要安装的文件。我们安装在/usr/X11R6/bin/Xorg69处,以补充我们安装在/usr/X11R6:
$ cp -p programs/Xserver/Xorg /usr/X11R6/bin/Xorg69
处的 Xorg 6.8.2 安装。
$ cd /usr/X11R6/bin $ chown root:wheel Xorg69 $ chmod a+xs Xorg69
现在我们需要测试服务器。首先,如果我们现在正在运行 X,请退出 X 到控制台。然后使我们的新服务器设置为 root,以便它可以使用视频硬件使用Xorg69 -configure生成新的配置文件,然后使用xinit -- /usr/X11R6/bin/Xorg69对其进行测试。如果它有效,请通过更改/usr/X11R6/bin/X
$ cd /usr/X11R6/bin $ rm X $ ln -s Xorg69 X
符号链接将 Xorg69 设置为默认服务器。
我们可能希望chmod a-x /usr/X11R6/bin/Xorg来防止任何人使用旧的“Xorg”以及依赖于“Xorg69”驱动程序的新配置文件。
启动会话本章介绍如何启动 X11 会话。
- 本章将回答以下问题
- 启动 X11 的方法有哪些?
- 如何启动 X11 和窗口管理器?
- 如何控制将启动哪些窗口管理器和程序?
有没有办法使字体看起来更漂亮?
启动 X11 的方法回想一下,X11 由一个X 服务器和多个客户端组成。如果只启动 X 服务器,您将获得一个空白屏幕。需要的是一种方法来启动 X 服务器以及一些默认客户端,例如窗口管理器。
首先,一些 Unix 控制台提供纯文本登录提示。在这种情况下,首先以普通方式登录以获取您的 Unix shell,然后使用xinit或startx命令在您的 shell 中启动 X 服务器和默认客户端。
其次,一些 Unix 控制台具有图形登录提示!在这种情况下,系统启动脚本已经启动了一个 X 服务器;一个名为显示管理器的程序绘制了一个图形用户界面,让您输入用户名和密码。在这种情况下,当您登录时,您将立即开始使用 X11。
第三,某些系统正在使用非 X11 的图形环境。例如,Mac OS X 具有其本地的Quartz系统。在 Mac OS X 中,您启动X11.app程序,它是一个 X 服务器,允许 X 客户端出现在与其他 Mac 程序相同的桌面上。类似的程序存在于 Microsoft Windows(它不是 Unix 平台)中。
xinit 和 startx$ startx
有一个名为startx的程序,它可以启动 X11。它使用起来很简单这将为您提供一些默认环境。但是,如果您想自定义默认环境,使用xinit可能会更容易。startx脚本会查找几个文件(, ~/.Xresources~/.Xmodmap
,…)并加载它们;它使用的文件在每个系统上都不同,因此您可能需要阅读系统上的startx脚本以了解它做了什么。相比之下,xinit程序只启动一个 X 服务器并运行一个~/.xinitrc
脚本。不需要记住您的系统是否将其称为“.Xresources”或“.xresources”或“.xrdb”;您只需在您的“~/.xinitrc”中指定您想要的确切行为即可。
在没有 .xinitrc 的情况下使用 xinitthese will work $ xinit /usr/X11R6/bin/xterm $ xinit $(which xterm) this will NOT work $ xinit xterm
如果您破坏了您的“.xinitrc”,或者还没有,那么您可以启动一个。例如
这将启动一个 X 服务器和一个名为“xterm”的程序,您可以使用它启动更多 X 客户端。最后一行失败(即使“xterm”在您的 PATH 中),因为 xinit 假设它是一个参数,而不是一个程序。您必须在程序名称中包含斜杠 /。
$ which startkde /usr/local/bin/startkde
如果您有 KDE,则可以找到您的startkde脚本
$ xinit /usr/local/bin/startkde
然后您可以启动 KDE
这将允许您使用 Konqueror 查找您的“.xinitrc”并使用 Kate 编辑它。(浏览您的主目录时,请在“查看”菜单中选中“显示隐藏文件”。)
$ xinit /bin/ksh: xinit: not found
如果您看到类似... 这样的消息,那么您需要将/usr/X11R6/bin
添加到您的 PATH 环境变量中。
如何编写 .xinitrc[编辑 | 编辑源代码]如果您没有用斜杠指定程序,那么“xinit”将使用您的.xinitrc
$ xinit # starts .xinitrc $ xinit xterm # passes "xterm" as argument to .xinitrc
脚本,该脚本位于您的主目录中。如果您没有用斜杠指定程序,那么“xinit”将使用您的在使用“xinit”之前,需要一个名为
$ cd # changes current directory to home directory $ ls -a # list all files, including dotfiles $ ls .xinitrc # list the .xinitrc file $ vi .xinitrc # edit .xinitrc using vi $ emacs .xinitrc # edit it using Emacs
“.xinitrc” 只是一个 Bourne shell 脚本。您可以尝试使用 sh .xinitrc 运行它,但如果尚未启动 X 服务器,则会失败。您可以输入命令,就像在 Unix shell 中输入一样。如果您不理解,请尝试从以下示例开始。
这是一个简单的单行“.xinitrc”示例
exec startkde
“startkde” 命令启动 KDE 桌面环境。此命令不会在您退出 KDE 之前结束。通常情况下,shell 会等待 KDE 结束,然后运行下一个命令。此命令前面的 “exec” 前缀告诉 shell 这是最后一个命令,因此 shell 不需要等待运行下一个命令。“exec” 在这种情况下是可选的。
这是一个更复杂的“.xinitrc”示例
ulimit -Sn 512 /usr/bin/mixerctl monitor.master=5,5 /usr/X11R6/bin/xmodmap -e 'keycode 107 = BackSpace' case "$#" in 0) exec sh /etc/X11/xinit/xinitrc ;; *) session="$1" shift exec "$session" "$@" ;; esac # NOTREACHED exec /usr/X11R6/bin/xterm
第一行,“ulimit -Sn 512”,是一个 Bourne shell 命令,用于将打开文件“-n”的软限制“-S”增加到 512。(使用 ulimit -a,或者如果您的 shell 不是 Bourne shell,请使用 sh -c 'ulimit -a' ,查看您的默认限制。)下一个命令,/usr/bin/mixerctl monitor.master=5,5,将 OpenBSD 或 NetBSD 系统上的声音音量设置为左右声道均为 5。在其他 Unix 系统上,命令将有所不同。还可以添加许多其他命令。
第三行,“/usr/X11R6/bin/xmodmap -e 'keycode 107 = BackSpace'”(或只是“xmodmap -e 'keycode 107 = BackSpace'”),调整键映射。对于只做少量调整的用户来说,这可能比加载 .Xmodmap 文件更容易。(您可以使用 xmodmap ~/.Xmodmap 加载这样的文件。)
其余行构成一个 Bourne Shell “case” 语句。这些处理命令行参数以启用以下内容
$ xinit gnome-session # start GNOME $ xinit startkde,GNOME # start KDE $ xinit fvwm,KDE# start window manager fvwm $ xinit xtermfvwm # start an xterm without a window manager
请注意,由于没有任何程序包含斜杠,因此它们由“.xinitrc”脚本处理,而不是直接由“xinit”处理。
xdm
[edit | edit source]示例~/.xsession:
. ~/.profile managers=startkde,fvwm,wmaker prompt="Welcome, $USER@$(hostname), select window manager:" # miscellaneous setup xmodmap -e 'keycode 107 = BackSpace' test -f /usr/local/GNUstep/System/Makefiles/GNUstep.sh && . /usr/local/GNUstep/System/Makefiles/GNUstep.sh manager="$(xmessage -buttons "$managers" -print -center "$prompt")" test -z "$manager" && exec fvwm exec "$manager"
制作屏幕截图
[edit | edit source]用于转储 X 窗口图像的标准实用程序是xwd(1),xwd 生成一个 XWD 图像。它可以通过以下方式调用
xwd -root -out root.xwd
xwd 也可以用来转储使用鼠标选择或使用-id选项后跟相应的窗口 ID 选择的单个窗口;有关更多信息,请参见man 1 xwd [1]。当远程运行时,xwd 非常有用,可以拍摄处于活动状态的模态菜单的屏幕截图。GIMP 可用于将 XWD 文件转换为其他更常见的格式,例如 PNG;或者,命令行实用程序 xwdtopnm(Netpbm 实用程序套件的一部分)可用于将 XWD 文件转换为 PNM 格式,然后可以将其转换为任何常见的格式,例如使用以下 管道
xwd | xwdtopnm | pnmtopng > screendump.png
也可以使用convert实用程序(此处提供)将 XWD 图像转换为许多其他格式:convert root.xwd root.XYZ
,其中 XYZ 是所需格式的典型文件名扩展名。
启动程序
[edit | edit source]传统的 Unix 启动程序的方法是通过在命令行上输入其名称从 shell 中调用它。例如
$ emacs
在 X 窗口系统开始时,启动 X11 客户端的方法基本上相同。您始终需要打开一个 XTerm,这样您就可以输入命令打开 Emacs、Netscape 和其他 XTerm。当然,这意味着如果您关闭(或 xkill)一个 XTerm,您将“挂起”从它启动的所有程序,从而导致它们突然退出并消失。因此,您必须记住保留启动客户端的 XTerm 开启。
这种行为是前台启动程序的功能,这使得它依赖于 shell/终端窗口(xterm、rxvt 或其他)处于打开和工作状态。
要启动多个独立于 shell 窗口的窗口程序(即,在后台),在每个命令的末尾添加一个和号
$ xclock &
在 shell 之外
[edit | edit source]一些窗口管理器添加了一个名为 minicli 的功能,用于 MINIature Command LIne。您从某些菜单中选择“运行命令”,然后键入程序的名称,例如“emacs”。这解决了仅为了启动某些程序而打开额外的 XTerm(或 Konsole 等)的问题。但是,它引入了另一个问题:某些程序将错误消息打印到终端,如果您想知道为什么程序崩溃或没有启动,则可能需要检索错误消息。解决方案是记录到某个文件,例如~/.xsession-errors,当启动您的会话时。大多数 X 的实现会自动执行此操作。
许多窗口管理器还允许从菜单启动程序。但是,不同的窗口管理器具有不同的配置方法。有些人试图找到一个解决方案,这样您就可以在不同的窗口管理器中使用相同的菜单。GNOME 和 KDE 桌面环境当前使用一个通用的*.desktop文件格式来表示菜单项。
KDE 通常在屏幕左下角提供一个 K 菜单。GNOME 通常在左上角提供“应用程序”之类的菜单。这两个环境都可以自定义。一些窗口管理器,如 twm 和 IceWM,允许您单击桌面背景以召唤菜单。
指定窗口几何形状
[edit | edit source]在 X 中,通常可以通过使用 -geometry
参数指定以下值语法来轻松设置程序窗口的大小和位置——
[{WIDTH}][x{HEIGHT}][{+-}{XOFF}[{+-}{YOFF}]]
XOFF
或水平轴处理自上而下和反向方向;YOFF
或垂直轴用于从左到右和反向方向。XOFF/YOFF 前面的加号 (+) 和减号 (-) 与原点的边缘相关:+ 是距离左/上边缘的像素数;- 是距离右/下边缘的像素数。
xeyes 的示例
$ xeyes -geometry 100x100-37+50 &
—— 其中 xeyes 以 100x100 像素的大小打开,距离屏幕右侧 37 像素,距离屏幕顶部 50 像素。和号 (&) 将进程置于后台(将 xeyes 从终端中释放)。
-geometry 参数既可以在 shell 中使用,也可以在 X 菜单系统和其他窗口环境的菜单系统中使用。
注意事项
[edit | edit source]设置窗口几何形状可能无法或不会对不识别规范的程序起作用,例如 Mozilla Firefox 和 Wine;Firefox 使用其自己的命令行设置,而 Wine 启动多个窗口,其中至少有一个窗口不是 X 的本机窗口。
虽然大多数窗口管理器和桌面环境都支持该规范,但有些可能不支持。
{{TODO|todonote=描述如何使用网络。描述 Xlib}}
字体
[edit | edit source]当您的 X11 客户端绘制文本时,它们使用 字体,这些字体是标准字符的图画,例如字母、数字和标点符号。最起码,字体是一个 字形(也称为 族),例如 Bitstream Vera Sans、Luxi Mono、Nimbus Roman No9 L 或 fixed。更具体地说,字体包括大小或样式,例如 Bitstream Vera Sans Bold Italic 10 point。字体还分为三类,称为 衬线(如 Nimbus Roman No9 L)、无衬线(如 Bitstream Vera Sans)和 等宽(如 Luxi Mono 或“fixed”)。
字体有多种格式,例如位图、TrueType 和 PostScript。TrueType 字体是.ttf文件。如果 X11 服务器和客户端位于不同的计算机上,那么您可能在每台计算机上安装了不同的字体。
X11 客户端可以用多种方式绘制文本
- 使用原始核心 X11 协议绘制文本。使用这种方法,X11 服务器将加载并存储字体的每个字符。因此,如果 X11 服务器(带有屏幕和键盘)和 X11 客户端(带有您的 Web 浏览器或其他窗口)位于不同的计算机上,那么您必须在服务器上安装字体。服务器将字符转换为位图并直立绘制它们,这意味着您无法旋转它们。此外,服务器从不为字体提供抗锯齿功能。
- 使用 Xft 库和 RENDER 扩展来绘制文本。使用这种方法,X11 客户端将加载并存储字体的每个字符。您必须在客户端计算机上安装字体。客户端将字符转换为几何形状。它将形状分解为基本形状,例如三角形和梯形,然后将它们发送到服务器。服务器绘制形状并可选地提供抗锯齿功能,这将使字体的外观更平滑。您也可以旋转这些形状。
- 使用客户端库(例如 libart_lgpl 或 SDL_ttf)绘制文本。虽然 libart_lgpl 是一个矢量图形库,但 SDL_ttf 是一个库,用于绘制使用跨平台 Simple DirectMedia Layer 的程序的文本。通常,这些库会加载几何形状,然后将它们绘制到位图中,可能具有抗锯齿和旋转功能,然后再将它们发送到 X11 服务器,就好像 X11 服务器对文本一无所知一样。这些库也可以像 Xft 一样使用 RENDER。
第一个 X11 客户端使用核心 X11 协议来绘制文本,因为这是唯一的选择。但是,现在有几个客户端使用 Xft。由于 GTK+ 和 Qt(几个应用程序背后的工具包,包括所有 GNOME 和 KDE 应用程序)切换到 Xft,因此大多数桌面(包括 Konqueror)上的许多程序现在使用 Xft。
旧版本的 Xft 1 有自己的配置方案。这里描述的版本 2 使用fontconfig 进行配置。由于 fontconfig 独立于 X11,因此存在像fc-list 这样的程序,它们列出可供 X11 程序(如 Konqueror)使用的字体,但它们本身不使用 X11。一个简单的终端命令来列出可用字体是
$ fc-list | sort | less
默认情况下/etc/fonts/fonts.conf允许您选择性地创建一个自定义文件~/.fonts.conf用于您的自定义字体设置。
一些自定义包括
- 您可以添加包含字体的其他目录。Fontconfig 会递归搜索目录。如果您有一个包含.ttf文件的文件夹,那么您只需将其添加到~/.fonts.conf;您不需要编写fonts.scale或任何其他此类文件用于 fontconfig。
- 您可以指定其他字体来搜索晦涩字符。如果您在这些引号“→”之间看不到右箭头,那么在搜索用于绘制此句子的字符时没有找到右箭头字符。实际上,与 Xorg 一起提供的 Bitstream 和 Luxi 字体以及来自 ghostscript 的 Nimbus 字体没有该字符,但来自 ghostscript 的“Standard Symbols L”字体包含一个右箭头。
但是,~/.fonts.conf使用严格的 XML 语法。您必须声明<?xml version="1.0"?>在文件开头,并且您必须将文件中的所有其他内容放在<fontconfig>和</fontconfig>标签之间,否则它将无法工作。
这是一个示例文件,展示了如何执行这两个自定义
<?xml version="1.0"?><fontconfig> <dir>/usr/local/share/ghostscript/fonts</dir> <alias> <family>sans-serif</family> <prefer><family>Standard Symbols L</family></prefer> </alias> <alias> <family>serif</family> <prefer> <family>Standard Symbols L</family> </prefer> </alias> <alias> <family>monospace</family> <prefer> <family>Standard Symbols L</family> </prefer> </alias> </fontconfig>
添加字体目录很简单:使用<dir>/full/path</dir>。上面的示例添加了/usr/local/share/ghostscript/fonts,它在某些计算机上是 Ghostscript 字体(包括 Standard Symbols L)的位置。
将 Standard Symbols L 添加到首选字体列表中,以便我们始终能够绘制右箭头“→”,这更加困难。假设您已将 Konqueror Web 浏览器设置为使用 Luxi Serif 显示网页。然后,您加载了一些包含一些右箭头的文本。当 fontconfig 无法在 Luxi Serif 字体中找到右箭头时,它转向通用字体名称“serif”,它实际上是首选衬线字体列表的别名。
作为参考,以下是来自/etc/fonts/fonts.conf与 Xorg 6.9rc1 一起提供的。
<!-- Provide required aliases for standard names --> <alias> <family>serif</family> <prefer> <family>Bitstream Vera Serif</family> <family>Times New Roman</family> <family>Thorndale AMT</family> <family>Luxi Serif</family> <family>Nimbus Roman No9 L</family> <family>Times</family> <family>Frank Ruehl</family> <family>Kochi Mincho</family> <family>AR PL SungtiL GB</family> <family>AR PL Mingti2L Big5</family> <family>ï¼ï¼³ ææ</family> <family>Baekmuk Batang</family> <family>FreeSerif</family> </prefer> </alias> <alias> <family>sans-serif</family> <prefer> <family>Bitstream Vera Sans</family> <family>Verdana</family> <family>Arial</family> <family>Albany AMT</family> <family>Luxi Sans</family> <family>Nimbus Sans L</family> <family>Helvetica</family> <family>Nachlieli</family> <family>Kochi Gothic</family> <family>AR PL KaitiM GB</family> <family>AR PL KaitiM Big5</family> <family>ï¼ï¼³ ã´ã·ãã¯</family> <family>Baekmuk Dotum</family> <family>SimSun</family> <family>FreeSans</family> </prefer> </alias> <alias> <family>monospace</family> <prefer> <family>Bitstream Vera Sans Mono</family> <family>Andale Mono</family> <family>Courier New</family> <family>Cumberland AMT</family> <family>Luxi Mono</family> <family>Nimbus Mono L</family> <family>Courier</family> <family>Miriam Mono</family> <family>Kochi Gothic</family> <family>AR PL KaitiM GB</family> <family>Baekmuk Dotum</family> <family>FreeMono</family> </prefer> </alias>
根据您的发行版,可能存在一个万无一失的字体安装程序 - 也可能不存在。无论如何,使用简单的命令总是有效的。
要安装新字体,只需下载字体文件(例如“.ttf”文件)并将它们放到正确的目录中。对于带有 fontconfig 的 Xft,您可以安装哪些类型的字体以及在何处安装,由默认配置文件/etc/fonts/fonts.conf
或/etc/fonts/local.conf
或~/.fonts.conf
中的额外配置决定。大多数发行版在/etc/fonts/fonts.conf
中都有以下行
<dir>~/.fonts</dir>
这意味着您可以在您的主目录中使用简单的用户权限安装新字体。要更新 fontconfig,您可以使用命令fc-cache
。
举个例子:假设您已将字体anicefont.ttf
下载到您的桌面。打开您最喜欢的终端或一个简单的xterm
,然后键入
cd mkdir .fonts cd .fonts cp ~/Desktop/anicefont.ttf . fc-cache
完成。您可以使用命令fc-list
检查字体是否已成功安装(例如,使用sort
和more
对其进行分页)并检查您的字体的名称:fc-list | sort | more
。
窗口管理器是一个程序,它绘制窗口周围的框架,并允许用户移动、调整大小、最小化以及以其他方式管理窗口。与其他一些窗口环境不同,您可以为 X11 找到许多窗口管理器。
您也可以在没有窗口管理器的情况下使用 X11。通常,您会编写一个会话脚本,该脚本在“xterm”上以“-geometry”位置启动。基于键盘的用户可以启动一个键盘快捷键守护程序,例如 xbindkeys,并通过 Xresources 几何提示或使用 xdotool 之类的工具来管理窗口。
请参阅http://github.com/patrickhaller/no-wm上的资源
- 2wm Anselm Garbe 编写的立体窗口管理器的初始版本。
- 3dwm 3D 工作空间管理器是 Niklas Elmqvist 和 Robert Karlsson 开发的一个合成窗口管理器。
- 4dwm 通常在运行 IRIX 的硅图形工作站上使用的窗口管理器
- 9wm Plan 9 窗口管理器的模拟
- aegis 一个用 C++ 编写的可脚本化的窗口管理器(正在开发中)
- aewm 一个用 C 编写的最小的 X 窗口管理器
- aewm++ 基于aewm,但用 C++ 重写
- afterstep 一个堆叠窗口管理器是 BowMan 窗口管理器的延续... 基于fvwm
- ahwm Alex Hioureanu 开发的一个小型堆叠窗口管理器
- alloywm 基于 aewm 的堆叠式窗口管理器
- alptwm 基于 dwm 的一个小而快的窗口管理器
- amaterus 一个基于 GTK+ 的 堆叠式 窗口管理器
- amiwm 一个试图让您的显示看起来和感觉像 Amiga Workbench 的 X11 窗口管理器
- anarchy 一个用 Scheme 写的轻量级窗口管理器
- antico 一个基于 Qt 库的快速简单窗口管理器
- antiwm 一个最小的全屏键盘驱动窗口管理器
- asclassic 一个基于 afterstep 的经典窗口管理器
- awesome 一个高度可配置的下一代 动态 窗口管理器,主要面向高级用户和开发人员
- awm Ardent 窗口管理器是 X 窗口系统的早期窗口管理器。
- azalea 一个基于 gnustep 的窗口管理器,基于 openbox3
- badwm 一个基于 evilwm 的窗口管理器
- beryl 一个 Xgl 加速的遗留合成窗口管理器,后来与 compiz 合并
- blackbox 一个小型快速高效的堆叠式窗口管理器,具有易于使用的菜单。
- bluetile 一个动态窗口管理器
- blwm FreeBSD: "qvwm 的葡萄牙语衍生物,简化以节省资源"
- braintop
- bspwm 一个使用树状间距的替代窗口管理器,更改由 bspc shell 命令触发。
- calmwm
- clementine FreeBSD: "有标题栏、图标化和样式(不稳定)"
- clfswm
- compiz Xgl 加速的令人惊叹的模块化窗口管理器,它匹配 Apple 的 Expose,使用立方体作为四个桌面,并添加了像窗口淡出、透明 alt-tab 窗口选择和在高速拖动时窗口扭曲这样的整洁效果。安装后,查找快捷键。
- ctwm - Claude 的标签式窗口管理器是 twm 的扩展,它提供了多个桌面支持和其他功能
- cwm 包含在 OpenBSD 中。优秀的代码库,非常小的系统需求。OpenBSD: "cwm 具有几个新颖的功能,包括搜索窗口的能力。它具有非常简单和有吸引力的美观。”
- dtwm - CDE 窗口管理器
- dwemo
- dwm - 动态窗口管理器
- dxwm - DECwindows 工作站上使用的窗口管理器
- e16
- e17
- echinus
- eclipse
- ecomorph
- ede 包含一个窗口管理器,FreeBSD: "Equinox 桌面环境"
- efsane
- enlightenment 图形效果比较多,OpenBSD: "Enlightenment 不仅仅是管理窗口,它提供了一个有用的、好看的图形外壳来工作。”
- epiwm FreeBSD: "另一个快速、小巧、可配置的窗口管理器"
- euclidwm 一个极简主义的平铺式窗口管理器
- evilpoison
- evilwm X 窗口系统的一个轻量级极简主义窗口管理器
- expocity FreeBSD: "一个具有 Expose(tm) 类似功能的 metacity 分支"
- exwm Emacs 的一个功能齐全的平铺式 X 窗口管理器
- failsafewm
- firebox
- fluxbox — "看起来像 blackbox 并且处理样式、颜色、窗口放置和类似的东西与 blackbox 完全相同(100% 主题/样式兼容)" http://fluxbox.org/ (包大小:681 KiB,加上它的依赖项 (OpenBSD 4.1))
- flwm 一个利用 FLTK 工具包的轻量级窗口管理器。
- framer
- fvwm F 虚拟窗口管理器 (F 的含义不确定),twm 的衍生物,外观漂亮,虚拟桌面,但文本配置文件晦涩难懂
- fvwm2 fvwm 的一个更新版本,OpenBSD: "Fvwm... 提供了一个虚拟/多个不重叠的桌面,窗口装饰的 3D 外观,形状/彩色图标.... 一个漂亮的按钮栏可用于提供对常用功能或程序的便捷访问。”
- fvwm95 感觉像 Windows 95 (类似于 fvwm2 的 AnotherLevel),OpenBSD: "它试图模拟知名产品的好功能,而不会使常规 fvwm 代码膨胀。”
- fxwm
- golem OpenBSD: "设计目标是它快速轻便,以及可以以任何不会阻止第一个目标实现的方式进行自定义。”
- gwm 一个具有内置 Lisp 解释器 (来自 Bull) 的通用窗口管理器
- gwml
- HackedBox FreeBSD: "Hackedbox 是一个基于 Blackbox 的小型快速窗口管理器"
- haze
- heliwm 一款内存占用极小的紧凑型窗口管理器
- hpwm 惠普的这款窗口管理器提供3D外观
- i3
- icewm 一款小型窗口管理器,可以通过编辑文本文件或使用第三方工具进行配置,OpenBSD:“为“感觉”和速度而优化,而不是外观。具有多个工作区、不透明的移动/调整大小、任务栏、窗口列表、时钟、邮箱、CPU、网络、APM 状态。”
- integrity
- interfacewm
- ion OpenBSD:“Ion 是一种新型的窗口管理器,它为窗口管理带来了类似文本编辑器、键盘友好的用户界面。Ion 只将屏幕划分为占用整个屏幕的框架。”
- ion2
- ion3
- jwm Linux:“Joe 的窗口管理器”。http://joewing.net/programs/jwm/ 用在 Puppy Linux 中。
- kahakai 一款支持脚本语言的窗口管理器(基于"waimea")
- karmen 一款简单轻量级的窗口管理器,除了xlib之外没有其他依赖项
- kwin KDE 的窗口管理器(以前称为 kwm)
- larswm FreeBSD:“X 的平铺式窗口管理器”
- lucca
- luminosity
- /lunchbox
- lwm FreeBSD:“一个轻量级的窗口管理器”
- maewm
- matchbox FreeBSD:“适用于低分辨率屏幕的窗口管理器”
- mavosxwm 一款处于早期开发阶段的最小化堆叠 窗口管理器
- MaXX Interactive Desktop;以前称为“5dwm”。
- metacity 一个常用的 GNOME 窗口管理器
- miwm 用 C++ 编写的微型窗口管理器
- mlvwm FreeBSD:“X11 的类似 Macintosh 的窗口管理器”
- monkeywm
- mosquito
- mpwm
- mswm
- multicursorwm
- musca
- mutter
- mvwm
- mwm Motif Window Manager 与 Motif 或 OpenMotif 一起提供,也与商业 Common Desktop Environment (CDE) 一起提供
- ncdwm
- novawm FreeBSD:“为 X 开发的窗口管理器,在速度、大小和风格方面都经过精心设计”
- olvwm - OPEN LOOK 虚拟窗口管理器为 olwm 添加了虚拟窗口
- olwm - Sun Microsystems 为 OpenWindows 提供的 OPEN LOOK 窗口管理器
- omegawm
- openbox OpenBSD:“Openbox 是一款符合标准、快速、轻量级、可扩展的窗口管理器。”
- orion FreeBSD:“用 Scheme 编写的 X11 窗口管理器”
- oroborox
- oroborus OpenBSD:“Oroborus 是一款非常简化的 X11 窗口管理器。它提供良好的默认键绑定、全键盘控制(除了鼠标之外!),...”
- oswm
p, q, r, s, t
[edit | edit source]- parti
- pawm FreeBSD:“Puto Amo 窗口管理器”
- pekwm OpenBSD:“Pekwm 是 aewm++ 的一个分支,它包含了新功能,例如窗口分组(类似于 fluxbox/pwm)可配置的按键捕获器、Xinerama 支持、像素图主题和可配置的按钮。”
- perlwm
- phluid
- piewm OpenBSD:“这是 piewm,一个带有“饼图”(即圆形)菜单的 tvtwm。”
- plwm
- plpwm
- pmwm
- pswm Sun Microsystems 的 PostScript 窗口管理器
- puppet 一款键盘驱动的窗口管理器,没有窗口装饰。用Java 编写
- pwm OpenBSD:“PWM 是一款轻量级的 X11 窗口管理器,重点在于易用性。它是第一个实现“选项卡式框架”的窗口管理器。”
- pwm2
- pycawm
- pywm PyWM 小巧、快速且可扩展,使用 Python。它基于flwm。 http://www.freenet.org.nz/python/pywm/
- qlwm
- qtile
- qlwm OpenBSD:“一款利用 qt 保持小巧且易于维护的窗口管理器。”
- quarkwm
- qvwm OpenBSD:“Qvwm 是一款类似 Windows 95/98/NT 的窗口管理器...”
- ratpoison 类似于 GNU screen,一款不喜欢鼠标的平铺式窗口管理器(参见 Wikibook Using Ratpoison)
- rox
- rtl 西门子使用的平铺式 窗口管理器
- sapphire FreeBSD:“小型窗口管理器”
- sawfish 一款高效且可配置的窗口管理器,曾经是 GNOME 的默认管理器,OpenBSD:“Sawfish 是一款可扩展的窗口管理器,使用基于 Lisp 的脚本语言。”
- scrotwm
- scwm Scheme 约束窗口管理器
- sigmawm Sigma 窗口管理器
- sithwm 一款基于evilwm 的极简主义窗口管理器,带有菜单和多个桌面
- skatoswm
- smallwm FreeBSD:“适用于低内存系统的窗口管理器,带有标题栏和阴影” http://www.small-window-manager.de/
- spookwm
- stumpwm 旨在成为 ratpoison 的继任者。用 Common Lisp 编写,从头开始设计,以便能够定制。
- subtle 是一款另一个平铺式窗口管理器,具有非常灵活和动态的布局,支持窗口标记、鼠标和键盘控制以及可扩展的状态栏。 http://subforge.org/projects/subtle
- sugar
- swm Solbourne 窗口管理器
- talwm
- tecwm
- tinywm FreeBSD:“荒谬的小型窗口管理器”
- toyd
- treewm OpenBSD:“从 README 中摘录:... 除了用户可以创建的客户端窗口之外,还可以创建桌面,这些桌面本身可以包含窗口和桌面。”
- tritium
- trswm
- tsubasa
- tvtwm OpenBSD:“tvtwm 是 twm 的一个版本,它结合了虚拟桌面,类似于 vtwm 和 swm。”
- twindy
- twm 与 X11 一起提供的 Tab Window Manager
u, v, w, x, y, z
[edit | edit source]- UDE 是一款具有独特设计(习惯它)的窗口管理器,由“Unix 桌面环境”项目开发 http://udeproject.sourceforge.net/
- ultimate 窗口管理器
- universalwm 是一款过时的窗口管理器,但由于其速度快,因此仍然很流行。
- unwimp
- uwm Ultrix 窗口管理器
- vtwm FreeBSD: “带有虚拟桌面的 Twm,并提供可选的 Motif 风格功能”
- vuewm
- w9wm FreeBSD: “对 9wm 进行了一些修改,使其能够提供虚拟屏幕”
- waimea OpenBSD: “它使用 Blackbox 图像渲染引擎(支持 Blackbox 样式)并且可以使用 Xft 库进行字体渲染(支持抗锯齿字体)。”
- weewm FreeBSD: “速度快且超轻量级的窗口管理器,可以完全通过键盘控制”
- whim 是一款用 tcl 编写的 多桌面 窗口管理器
- whimsy
- wimpwm
- windowlab FreeBSD: “一款用于 X11 的小型窗口管理器”
- windowmaker 是一款类似 NextStep 的窗口管理器,它与 GNUstep 配合得很好,并且拥有可配置的主题。
- wm 是一款简单的标题栏窗口管理器
- wm2 是一款非常简化的、小型、快速的窗口管理器
- wmaker
- wmfs 是一款 平铺式 窗口管理器
- wmg FreeBSD: “一款基于 GTK 的小型 GNOME 兼容窗口管理器”
- wmi OpenBSD: “WMI……试图将 LarsWM、Ion、evilwm 和 ratpoison 的最佳功能整合到一个窗口管理器中……。WMI 是窗口管理器中的 vim……”
- wmii FreeBSD: “下一代 WMI 窗口管理器”
- wmx OpenBSD: “它基于 wm2……但取代了 wm2 的最小功能,它以最简单的实现方式提供了许多传统管理器的功能。”
- wwm 奇怪的窗口管理器
- xcompmgr
- xd640 是一款 堆叠式 窗口管理器
- xdswm
- xfce-wm 是名为 XFCE(无胆固醇桌面环境,它还包含一个工具栏和文件管理器,并且使用的系统资源比 GNOME 或 KDE 少)的桌面环境的一部分,FreeBSD: “XFce 4 窗口管理器”
- xige xilicius 桌面环境
- xfwm 是一款 合成 窗口管理器
- xmonad 是一款用于 X 的平铺式窗口管理器。 窗口会自动排列成平铺式布局,没有间隙或重叠,最大限度地利用屏幕空间。 http://xmonad.org
- xpwm
- xswm
- xwem
- xwm
- yawm FreeBSD: “具有标题栏、图标化、最大化、任务栏、放置、时钟”
- yeahwm 是一款 堆叠式 窗口管理器
- zwm 用 C++ 编写,并根据 GNU 通用公共许可证提供
Xt 客户端
[edit | edit source]一些 X 客户端是 Xt 客户端,也就是说它们使用 X Toolkit Intrinsics。 这是一个将窗口划分为称为 部件 的较小窗口的机制,例如按钮和菜单。 可以使用 X 资源来配置这些部件。
例如,典型的 “xterm” 窗口包含一个滚动条和终端的模拟屏幕。 用于查看手册页的 “xman” 程序在它的小型主屏幕上包含三个部件的按钮。 通过使用 “手册页” 按钮,你会获得一个更大的窗口,其中包含几个部件:菜单按钮、一个滚动条和一个包含手册页的文本框。
但是,GTK+ 和 Qt 等库的开发人员已决定不使用这些内在机制。 因此,GTK+ 和 Qt 程序不可用 X 资源。
X 资源 是以特定语法写入文本文件中的设置,然后使用 xrdb 加载。
xrdb
[edit | edit source]要设置 X 资源,你需要将它们放在一些文本文件中,例如这将为您提供一些默认环境。但是,如果您想自定义默认环境,使用xinit可能会更容易。startx脚本会查找几个文件(然后使用以下命令加载它:
$ xrdb -merge ~/.Xresources
“XTerm.resource” 和 “xterm.resource” 之间存在区别。
如果你想让一个 xterm 使用 “GameTerm.resource” 资源而不是 “XTerm.resource” 资源,你应该使用以下命令启动它:
$ xterm -class GameTerm
使用标准输入的 xrdb
[edit | edit source]你也可以使用标准输入来输入资源。
xterm
[edit | edit source]
xterm 具有菜单。 你必须按住 Control 键并使用鼠标按钮 1、2 或 3 点击。
政治历史
[edit | edit source]- 本节需要检查其准确性和细节。
X 共有 10 个版本,对应于客户端和服务器之间 10 个版本的协议。 然后出现了第 11 个版本,即 X11。 该版本保持了大量的添加内容,并一直使用到今天。
X11 规范和参考实现的控制权在多个组织之间传递:MIT X Consortium、X Consortium、Open Group 和 X.org。 操作系统供应商(主要是 Unix 和 VMS)会获取参考实现,对其进行修改,添加适用于其操作系统的 X 服务器,然后授予修改后的版本非自由许可证。 这些非自由版本会部署到服务器和工作站上。
XFree86
[edit | edit source]随着带有廉价 Intel 386 处理器的家用电脑(在 Microsoft DOS 和 Windows 的帮助下)的普及,用于它们的廉价或免费的 Unix 实现(Minix、Xenix、Linux、FreeBSD、NetBSD)也开始普及。 因此,Thomas Roell 和 Snitily Graphics Consulting Service 创建了 X386 服务器并将其捐赠给了 X11R5,即参考实现的 X 版本 11 第 5 版。 从那时起,XFree86 推出了带有自由许可证的 X11 实现,因此名称中包含 “Free”。 最终,XFree86 将端口添加到了 Alpha、PowerPC 和 SPARC 上。 XFree86 扩展到了多个免费和商业 Unix 变体,包括 Mac OS X 和 Cygwin。
与此同时,随着 X11 的普及,一些人为此编写了软件,包括窗口管理器。参考实现包含“twm”,一个简单的窗口管理器。一些人通过修改 twm 或从头开始编写了窗口管理器。其中许多窗口管理器,例如 fvwm、afterstep 和 windowmaker,都拥有免费许可证。这些许可证与 X11 或 XFree86 分开分发和维护。一些 Linux 发行版提供了其中一些许可证。
参考实现还包含 Xt(X 工具包)框架和使用该工具包的 Xaw(雅典娜)部件。Xaw 使用的原始黑白按钮、滚动条和菜单让 Macintosh 和 Windows 用户感到不满意。因此,一些人制作了 Xaw3d 等变体,并将其作为 X11 的补丁分发。另一些人则拒绝 Xt 并制作了自己的部件,创建了 FOX、FLTK、GTK+ 和 Qt 等工具包。OpenOffice.org 仍然使用自己的部件。
开放组的 OS 供应商共同努力创建了 Motif 窗口管理器和部件工具包。在此基础上,供应商们又创建了通用桌面环境。虽然 Motif 和 CDE 出现在一些商业 OS 发行版中,但它们拥有非自由许可证,因此许多 Linux 和 *BSD 用户都避开了它们。随着 Linux 和 XFree86 的发展,Motif 和 CDE 逐渐衰落。
基于 Qt 部件工具包的 K 桌面环境和基于 GTK+ 部件工具包的 GNU 网络对象模型环境成为 Motif 和 CDE 的免费替代方案。GNOME 和 KDE 开发人员鼓励改进 XFree86,并通过 http://www.freedesktop.org 进行了合作。最终,XFree86 和 freedesktop.org 取代了 x.org,成为 X11 开发的主体。
其他工具包和窗口管理器也注意到了 freedesktop.org,并继续与 GNOME 和 KDE 竞争。
开放组停止了 X11 参考实现的免费许可。他们后来重新引入了免费许可,但大多数 X11 开发已经转移到 XFree86,而 XFree86 在很长一段时间内一直保持免费。
在 2004 年 2 月,XFree86 项目在 XFree86 4.4.0 中采用了从 MIT 许可证到 XFree86 许可证 1.1 的许可证变更,该许可证包含与原始 BSD 许可证类似的版权声明,自由软件基金会认为该声明与 GPLv2 不兼容。
这种许可证变更在 XFree86 核心开发者之间引起了争议,并促使大多数 Linux 发行版和 OpenBSD 抛弃 XFree86,转而使用一个分叉版本。最终,**X.Org 服务器**成为了 X11 的官方参考实现。**X.Org** 的第一个版本,X11R6.7.0,从 XFree86 4.4 RC2 版本分叉出来,以避免 XFree86 许可证变更,同时合并了 X11R6.6 的变更。
大多数开源类 Unix 操作系统都采用了 X.Org 服务器,取代了 XFree86,而且大多数 XFree86 开发者都迁移到了 X.Org。
虽然有多种桌面环境和窗口管理器导致了碎片化,但来自不同开发者和用户社区的 X 服务器和客户端能够很好地协同工作。X.Org 内部的开发工作稳定,并且桌面发行版之间对 X.Org 的使用依然牢固。
桌面和窗口环境之间的碎片化并非一定是坏事,因为它可以让用户拥有更多选择,并根据不同的使用场景和不同的需求进行调整。
在某些用例中,X 已经被 Wayland 取代,Wayland 被用于 Sailfish 和 Tizen 移动操作系统以及 Hawaii 桌面环境。Wayland 在 GNOME、KWin(KDE)、Enlightenment 和 Mate 桌面环境以及 Fedora 发行版中也获得了初步支持。
- XConsortium 手册页
- Xorg 手册页
- http://www.xfree86.org
- http://wiki.x.org
- The X Window System (LPIC101) LPIC101 认证
- X 窗口编程 C 语言接口到 X 客户端
- Unix 指南 xterm 中的内容
- XFree86 和 Xorg 是开源软件;您可以自由地复制、重新分发和修改它们。
- GNOME 和 KDE 有自己的书籍。