Linux系统管理技术手册——第25章 X窗口系统

X窗口系统(X Window System),也叫 X11,或简称为 X。X窗口系统分为几个关键组件:显示管理器(display manager),主要任务是验证用户身份,并由启动脚本启动一个初始的环境,还要启动 X服务器窗口管理器(window manager)

X服务器 定义了抽象接口可以访问系统的位图化显示设备和输入设备。窗口管理器 可以让用户移动、缩放窗口,还可以管理多个独立的虚拟桌面。

最底层,应用软件被链接到一个widget库,这个库实现了上层用户界面的各种机制,如按钮和菜单。

这种服务器的设计可以原生的支持远程桌面,而且还可以允许服务器支持各种不同的窗口管理器和widget库。

25.1 X 显示管理器

显示管理器要启动初始环境,可以通过图形化的登录界面,也可以通过命令行直接启动。常见的显示管理器包括:xdm(X display manager)、gdm(GNOME display manager)、kdm(KDE display manager)。

/etc/X11 下有存放xdm、gdm或者kdm配置文件的子目录,这些配置文件规定了显示管理器该怎样运行。显示管理器最后的任务是执行一般在 /etc/X11 下的脚本 Xsession ,这个脚本建立起用户的桌面环境,是系统级的启动脚本。然后执行用户个人的启动脚本 ~/.xession ,进而启动窗口管理器,任务栏,帮助程序等。

当执行完 ~/.xsession 之后,用户就被退出系统(如果 ~/.xsession 里所有的命令都在后台执行,那么这个脚本会立即结束,于是用户在刚登陆之后立即又被退出系统),所以一般最后一个执行的程序是窗口管理器,保持在前台避免退出系统。

25.2 运行一个X应用程序

25.2.1 环境变量 DISPLAY

X应用程序通过查询环境变量 DISPLAY 的值,才知道到哪里显示自己。这个变量包括服务器的主机名或者IP地址、显示号(标识要连接上的一个具体的X服务器实例),还有一个可选的屏幕号(用于有多个显示器的情况)。

# 把X应用程序指向了主机servername.domain.com,显示10和屏幕2.
DISPLAY=servername.domain.com:10.2;

25.2.2 客户机身份认证

基本思想为,在登陆过程一开始的时候,X显示管理器生成一个随机数,叫做一个 cookie ,这个服务器的cookie被写到该用户的主目录下,一个叫做 ~/.Xauthority 的文件里。

任何客户端程序,只要知道这个 cookie ,就会得到允许,可以连接该服务器。用户可以运行 xauth 命令查看已有的cookie,还可以向这个文件添加新的cookie。

要把X应用程序显示到旁边的机器上,可以执行:

xprogram -display server:0
# 如果没有正确的cookie,就会显示如下:
Xlib: connection to "server:0.0" refused by server
xprogram: unable to open display 'server:0'

使用 xauth list 命令查看服务器上的 cookie ,服务器上的每个网络接口都有一个 cookie ,将服务器上的 cookie ,用 xauth add 命令添加到客户机上,就能远程显示了。

25.2.3 用SSH转发X连接

一般情况下,是从运行 X服务器 的机器,通过 ssh 登录到想要运行 X应用程序 的机器上。DISPLAY 变量和验证信息由 ssh 自动设置。显示号从 :10.0 开始,每增加一条转发 X流量 的 ssh 连接,这个值就加1。

ssh 转发 X11应用程序 的流量,必须在 ssh 的服务器和客户端都启用 X转发功能,而且客户机依然必须要有x服务器正确的 cookie。

25.3 配置 X服务器

Xorg 的配置文件一般可以在 /etc/X11/xorg.conf 找到。有几个程序能够帮助用户配置 X (如,xorgconfig)。

可以运行 Xorg-probeonly 命令查看输出的显示卡芯片组和其它探测到的值(虚拟机的Ubuntu 22.10上并没有这个命令)。可以运行 Xorg -configure 命令,让服务器根据探测到的值创建一个初始的配置文件。

xorg.conf 文件的内容被组织成几段,每一段配置以关键字 Section 开头,以 EndSection 结尾。

xorg.conf 文件的配置段:

配置段说明
ServerFlags列出一般性的 X 服务器配置参数
Module指定为加速图形显示、平滑字体等功能而动态加载的扩展模块
Device配置显卡、驱动程序和硬件信息
Monitor描述显示器的物理参数,包括刷新率和显示分辨率
Screen把一台显示器和一个显卡(Device)联系起来,规定在该配置中能采用的分辨率和颜色深度
InputDevice指定输入设备,如键盘和鼠标
ServerLayout把输入设备绑定到一组屏幕上,并且定出屏幕彼此之间的相对位置

一台物理上的显示器(Monitor)加一块显卡(Device)就构成了一个屏幕(Screen)。一组屏幕(Screen)再加上若干输入设备(InputDevice)就构成了一个服务器布局(ServerLayout)。

25.3.1 Device段

一个 Device 段描述一块特定的显卡。必须提供一个字符串来标识这块显卡,还要给它提供一个正确的驱动程序。只有当相应的 Section 段用到这个设备的时候,才加载这个驱动程序。典型的 Device 段可能像下面这个样子:

Section "Divice"
    Identifier        "Videocard0"
    Driver            "radeon"
    option            value
    ...
EndSection

25.3.2 Monitor段

Monitor 段描述连接到计算机的显示器。它能够指定详细的刷新率。对于比较老的硬件来说,需要有刷新率的信息,但是现在的显示器大都可以通过探测得到这个值。典型的 Device 段可能像下面这个样子:

Section "Monitor"
    Identifier        "ViewSonic"
    Option            "DPMS"
    HorizSync         30-65
    VertRefresh       50-120
EndSection

和所有配置段一样,Identifier 行给显示器分配一个名字,以后可以用这个名字来代表这台显示器。我们在这里打开了DPMS(Display Power Management Signaling,显示器电源管理)功能,所以当我们偷偷离开去吃点心喝咖啡的时候,X服务器会关闭显示器的电源。

HorizSync 和 VertRefresh 两行只适用于CRT显示器,它们应该填上显示器的正确值。这两个值可以用频率范围或者逗号隔开的多个频率值来指定。

理论上,驱动程序可以探测到它所支持的显示器型号的值,但是指定这两个参数可以避免驱动程序使用不支持的频率。

25.3.3 Screen 段

Screen 段把一个设备(显卡)联系到一台显示器,这台显示器有特定的颜色深度和特定的一组显示分辨率。下面的例子使用了上面提到的显卡和显示器。

Section "Screen"
    Identifier        "Screen0"
    Device            "Videocard0"
    Monitor           "ViewSonic"
    DefaultDepth      24
    Subsection "Display"
        Depth    8
        Modes    "640x400"
    EndSubsection
    Subsection "Display"
        Depth    16
        Modes    "640x400" "640x480" "800x600" "1024x768"
    EndSubsection
    Subsection "Display"
        Depth    24
        Modes    "1280x1024" "1024x768" "800x600" "640x400" "640x480"
    EndSubsection
EndSection

同样,Identifier 配置了屏幕的名字,并且提到了前面定义的显卡和显示器。这段配置里,有配置子段,为每一种颜色深度定义了一个子段,默认子段用 DefaultDepth 指定。

一个 X服务器 的实例只能以一种颜色深度来运行。X服务器 在的启动的时候要判断该颜色深度所支持的分辨率。

25.3.4 InputDevice段

每个设备有自己的 InputDevice 段,所有的设备都可以在配置文件中定义,但是只会使用在 ServerLayout 段中指出的那些设备。

# 一个键盘,AutoRepeat 选项指出一个键需要按下多久才开始重复,以及重复的速度有多快
Section "inputDevice"
    Identifier        "Generic Keyboard"
    Driver            "keyboard"
    Option            "AutoRepeat" "500 30"
    Option            "XkbModel" "pc104"
    Option            "XkbLayout" "us"
EndSection
# 一个鼠标,CorePointer 选项把这个鼠标指定为系统首要的指示设备。和这个鼠标关联的硬件文件用一个 Option 来指定。
# 通信协议(protocol)取决于具体的鼠标品牌、鼠标的功能、以及鼠标的接口。可以把它设置为 auto,这样服务器会尝试替用户检测用什么协议。如果鼠标滑轮不工作,那么试试协议改为 IMPS/2。如果鼠标有好几个按键,那么可以试试用 ExplorerPS/2 这个协议。
# Emulate3Buttons 这个选项通过定义同时点鼠标双键等于点鼠标中键的方式,让一个双键鼠标去模拟一个三键鼠标。
# 有时候需要 ZAxisMapping 这个选项,以便支持滚轮或者游戏杆设备。
Section "inputDevice"
    Identifier        "Generic Mouse"
    Driver            "mouse"
    Option            "CorePointer"
    Option            "Device" "/dev/input/mice"
    Option            "Protocol" "IMPS/2"
    Option            "Emulate3Buttons" "off"
    Option            "ZAxisMapping" "4 5"
EndSection

常见的鼠标设备文件:

操作系统设备文件
Linux/dev/input/mice
Solaris/dev/mouse
HP-UX/dev/deviceFileSystem/mouseMux
AIX/dev/mouse0

25.3.5 ServerLayout 段

ServerLayout 段是配置的最高层结点。这段配置把其它所有配置段结合到一起,用来表示一个 X 显示(display)。它把一组屏幕(screen)和这个布局关联起来。如果多个显示器分别连接到不同的显卡上,那么在指定每个屏幕的同时,还可以带一些可选的方向说明,表明这些屏幕在物理上是怎样摆放的。本例中,屏幕1(Screen1)在左边,而屏幕2(Screen)在右边。

# 有些显卡能够一次驱动多台显示器,这种情况下,在ServerLayout 段只能指定一个Screen。
Section "ServerLayout"
    Identifier        "Simple Layout"
    Screen            "Screen 1" LeftOf "Screen 2"
    Screen            "Screen 2" RightOf "Screen 1"
    InputDevice       "Generic Mouse" "CorePointer"
    InputDevice       "Generic Keyboard" "CoreKeyboard"
    Option            "BlankTime"    "10" # Blank the screen in 10 minutes
    Option            "StandbyTime"  "20" # Turn off screen in 20 minutes(DPMS)
    Option            "SuspendTime"  "60" # Full hibernation in 60 minutes(DPMS)
    Option            "OffTime"  "120" # Turn off DPMS monitor in 2 hours
EndSection

25.3.6 xrandr: X 服务器的配置工具

XRandR(X Resize and Rotate Extension)可以让客户机动态的改变其X服务器屏幕的大小,方向和倒影。xrandr 是这一扩展功能的命令行工具。

当然可以手动调整 xorg.conf 文件,但是使用xrandr可以极大的提高效率。不带参数的运行 xrandr 的话,它会显示可用的显示及可能的分辨率。

可以给每个显示指定要用的分辨率,还有该显示相对于其它显示的摆放位置。例如:

xrandr --auto --output VGA-0 --mode 800x600 --right-of DVI-0

参数 --auto 打开所有可以用的显示器。 --output--mode 两个参数把 VGA 的显示分辨率设为 800x600,
--right 这个参数指定 VGA 显示器在物理上位于 DVI 显示器的右边。

如果想让 xrandr 在启动 X服务器 之后自动运行,可以把这条命令放到自己的 ~/.xprofile 文件里,X服务器在启动的时候会执行这个文件。

25.3.7 内核模式设定

为了更好的显示效果,现在设定图形显示的初始模式这一责任,通过KMS(kernel mode setting,内核模块设定)落到了Linux内核身上。

显卡的配置文件在 /etc/modprobe.d 这个目录下,通过这些配置文件的设定,就可以启用或者禁用KMS。

25.4 故障排查和调试

25.4.1 X的特殊键盘组合

Control + Alt + (F1-F6) ,X服务器会进入基于文本 的虚拟终端。

如果监视器和显卡的视频信号不同步,那么就要试着修改屏幕的分辨率。配置文件中 Screen 段可以设置分辨率,默认使用激活的 Modes 行中的第一个显示分辨率。可以使用 Control + Alt + (+/-) 来切换分辨率。

按下 Control + Alt + Backspace 会立即杀死X服务器。
如果从一个主控台运行了 X服务器,当服务器退出时,就会发现自己返回到了主控台。
如果是一个显示管理器启动了 X服务器,当服务器退出时,会重新派生出一个新的服务器,再次提示输入登录名和口令。

25.4.2 X服务器出问题

进入终端之后就能调查 X服务器到底出了什么问题,X服务器的日志偶尔能在 虚拟终端1(Control + Alt + F1) 上看到。最常见的是日志被记录在 /var/log/Xorg.0.log 这样的日志文件中。

日志的每一行开头都有一个特征分类符号:出错(EE)、警告(WW),还能判断出 X服务器如何找到每一种信息:通过默认配置(==)、在一个配置文件里(**)、自动检测到的(–)、由X服务器的命令行指定的(++)

根据日志的报错修复 X服务,当X启动并运行之后,就可以使用 xdpyinfo 命令获得更多有关 X服务器配置的信息。

25.5 桌面环境简述

25.5.1 KDE

KDE代表 K Desktop Environment(K桌面环境),用C++语言编写,在Qt工具集库上构建的环境。比较漂亮,热衷于全方位定制自己环境的用户最喜欢这个桌面。为KDE编写的应用程序几乎总在名字里面有个字母 K。

KDE支持一套全面的开发工具,其中包括一个集成开发环境(IDE)。

25.5.2 GNOME

GNOME用C语言编写,基于GTK + widget库的另一种桌面。没有KDE那么花哨,也没有KDE配置性强。大多数Linux发行版使用GNOME作为自己默认的桌面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值