100、深入了解X窗口系统与跨平台协作

深入了解X窗口系统与跨平台协作

1. X窗口系统基础与KMS模块

X窗口系统是许多UNIX和Linux系统中图形界面的核心。不过,KMS(内核模式设置)模块目前还不够成熟,并非所有显卡都能得到它的支持。如果你运气好,拥有支持KMS的显卡,那么可以将 xorg.conf 文件重命名,这样X服务器会尝试在没有它的情况下启动,并默认使用KMS配置。

2. X服务器故障排除与调试

尽管过去十年里X服务器配置有了很大进步,但要让它完全按照你的期望运行仍有难度。你可能需要对显示器频率、驱动选项、专有驱动或3D渲染扩展进行试验。当显示出现问题时,你往往最想看到屏幕上的调试输出,好在X.Org服务器会提供追踪问题所需的大量信息。

2.1 特殊键盘组合
  • 切换虚拟终端 :按下 Control + Alt 并按功能键(F1 - F6),X服务器会带你进入基于文本的虚拟终端,你可以在此登录并调试问题。若要返回X服务器运行的虚拟终端7,按 Alt - F7 即可。
  • 更改屏幕分辨率 :若显示器与显卡的视频信号不同步,可尝试更改屏幕分辨率。可用的分辨率在配置文件的 Screen 部分的 Modes 行中指定。激活的 Modes 行的确切内容取决于颜色深度,X服务器默认使用激活的 Modes 行上显示的第一个分辨率,你可以通过按下 Control + Alt 并按数字小键盘上的 + - 键来切换不同的分辨率。
  • 关闭X服务器 :按下 Control - Alt - Backspace 可立即关闭X服务器。若从控制台启动服务器,服务器退出后你会回到控制台;若由显示管理器启动服务器,它通常会重新启动一个新服务器并再次提示输入登录名和密码,你需要从文本控制台杀死显示管理器(如 xdm gdm 等)以阻止它重新启动新的X服务器。
2.2 查看X服务器输出与日志文件

当你重新控制机器后,可从X服务器的输出开始排查问题。输出有时会显示在虚拟终端1( Control - Alt - F1 )上,更多时候会记录到日志文件中,如 /var/log/Xorg.0.log (在HP - UX上是 /var/X11/Xserver/logs/Xf86.0.log )。日志文件中的每行前面都有一个符号,用于对其进行分类:
| 符号 | 含义 |
| ---- | ---- |
| (–) | 已探测 |
| (**) | 来自配置文件 |
| (==) | 默认设置 |
| (++) | 来自命令行 |
| (!!) | 通知 |
| (II) | 信息 |
| (WW) | 警告 |
| (EE) | 错误 |
| (NI) | 未实现 |
| (??) | 未知 |

下面是一段Ubuntu系统的日志示例:

X.Org X Server 1.6.0
Release Date: 2009-2-25
X Protocol Version 11, Revision 0
Build Operating System: Linux 2.6.24-23-server i686 Ubuntu
Current Operating System: Linux nutrient 2.6.28-11-generic #42-Ubuntu SMP 
Fri Apr 17 01:57:59 UTC 2009 i686
Build Date: 09 April 2009  02:10:02AM
xorg-server 2:1.6.0-0ubuntu14 (buildd@rothera.buildd)
Before reporting problems, check http://wiki.x.org
to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
(++) from command line, (!!) notice, (II) informational,
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Sun May 10 22:11:47 2009
(==) Using config file: "/etc/X11/xorg.conf"
(==) ServerLayout "MainLayout"
(**) |-->Screen "Screen 0" (0)
(**) |   |-->Monitor "Monitor 0"
(**) |   |-->Device "Console"
(**) |-->Input Device "Mouse0"
(**) |-->Input Device "Keyboard0"
…

从日志中可以看出X服务器和X11协议的版本号,以及服务器使用的日志文件位置、配置文件位置和活动服务器布局等默认值。

2.3 常见问题及解决方法
  • 屏幕分辨率问题 :日志中常见的问题是某些屏幕分辨率无法正常工作,或者X服务器因“无法验证任何模式;回退到默认模式”等错误而退出。若未为显示器指定频率列表,X服务器会使用EDID(扩展显示识别数据)进行探测。若显示器不支持EDID或在X启动时关闭,你需要在配置文件的 Monitor 部分设置频率范围。EDID探测结果的舍入误差可能导致某些分辨率不可用,可在 Device 部分添加以下内容来解决:
Option "IgnoreEDID" "true"
Option "UseEdidFreqs" "false"
  • 鼠标配置问题 :若忘记正确定义鼠标部分,输出中会出现类似以下的错误:
(==) Using config file: "/etc/X11/xorg.conf"
Data incomplete in file /etc/X11/xorg.conf
Undefined InputDevice "Mouse0" referenced by ServerLayout "MainLayout".
(EE) Problem parsing the config file
(EE) Error parsing the config file
Fatal server error:
no screens found
2.4 使用xdpyinfo命令

当X服务器启动并登录后,可运行 xdpyinfo 命令获取更多关于X服务器配置的信息。其输出会显示显示器名称、X服务器版本信息、可用的颜色深度、已加载的扩展以及已定义的屏幕及其尺寸和颜色配置等。你可以通过脚本(如 ~/.xsession 文件)解析 xdpyinfo 的输出,以确定活动屏幕的大小并适当设置桌面参数。

3. 桌面环境简介

X窗口系统的客户端/服务器模型的灵活性催生了大量的小部件集、窗口管理器、文件浏览器、工具栏实用程序和实用程序。早期的综合环境OpenLook和Motif虽然优雅但具有专有性,开发库和窗口管理器的许可费用使它们难以被大众使用。随着应用程序的发展,现代桌面环境中的两大巨头GNOME和KDE应运而生。

3.1 KDE
  • 特点 :KDE即K桌面环境,用C++编写,基于Qt工具包库。它以其精美的视觉效果(如透明窗口、阴影和动画光标)受到喜欢视觉效果的用户青睐,但在非高端工作站上可能运行较慢。对于那些花大量时间在桌面点击而非运行应用程序的用户来说,效率和美观之间的权衡可能会决定KDE是否合适。从Windows或Mac环境过渡过来的用户也常因漂亮的图形界面而选择KDE,同时它也受到喜欢完全自定义环境的技术爱好者的喜爱。
  • 应用程序 :为KDE编写的应用程序名称中通常包含“K”,如Konqueror(网络/文件浏览器)、Konsole(终端模拟器)、KWord(文字处理器)等。默认窗口管理器KWin支持freedesktop.org窗口管理器规范标准,可配置皮肤以改变整体外观和感觉,还有许多其他功能。KOffice应用套件包含文字处理、电子表格和演示文稿实用程序,并且KDE提供了一套全面的开发工具,包括集成开发环境(IDE)。
3.2 GNOME
  • 特点 :GNOME用C编写,基于GTK + 小部件集。它最初是GNU网络对象模型环境的缩写,现在只是一个名称。随着对Compiz的支持,GNOME获得了一些以前缺少的视觉效果,但总体上仍不如KDE华丽,可配置性稍低且一致性稍差。不过,它更简洁、快速、简单和优雅,大多数Linux发行版将其作为默认桌面环境。
  • 应用程序 :GNOME应用程序名称中通常有“G”,标准窗口管理器Metacity提供基本的窗口功能和GNOME用户界面的皮肤。若需要一些额外功能,如智能窗口放置,需要外部应用程序的支持。办公应用程序包括用于文字处理的AbiWord、电子表格Gnumeric和图像处理的The GIMP,还包括文件管理器Nautilus。与KDE一样,GNOME为应用程序开发者提供了广泛的基础设施。
3.3 GNOME与KDE的比较

很难说哪个更好,最好的方法是亲自尝试两者,根据自己的需求做出选择。同时要记住,朋友、用户和管理者可能有不同的桌面环境偏好,而且选择桌面环境并不限制你运行的应用程序,无论选择哪个桌面,都可以从这两个(以及其他)开源项目提供的优秀软件中选择应用程序。

4. 推荐阅读资源
  • X.Org官网 :x.org,包含即将发布的版本信息以及X.Org维基、邮件列表和下载链接。
  • man手册 Xserver Xorg (在AIX上为 X )的man页涵盖通用X服务器选项和Xorg特定的命令行选项,还包括X服务器操作的一般概述; xorg.conf 的man页详细介绍配置文件及其各个部分,并在REFERENCES部分列出视频卡驱动程序,可在此查找视频卡对应的驱动程序名称,然后阅读驱动程序自身的man页以了解特定于驱动程序的选项。
5. 练习
  • E19.1 :使用SSH在网络上运行X程序,使用 ssh -v 验证X转发是否正确设置。登录后查看 DISPLAY 变量的值,运行 xauth 列出cookie并验证该显示器的魔法cookie认证是否激活。
  • E19.2 :编写一个shell命令行或脚本,解析 xdpyinfo 的输出并以 XxY (如 1024×768 )的格式打印当前屏幕分辨率。
  • E19.3 :检查Xorg日志文件( /var/log/Xorg.0.log ),尽可能确定以下项目:
  • 存在哪种类型的视频卡以及它使用的驱动程序。
  • 显卡有多少视频内存。
  • 是否使用EDID来探测显示器设置,如何得知。
  • 支持哪些模式(分辨率)。
  • DPMS是否启用。
  • 服务器认为物理屏幕尺寸是多少。
  • 鼠标使用的设备文件是什么。
  • E19.4 :哪个标志可以禁用对X服务器的非本地TCP连接?解释为什么这个选项有用。

深入了解X窗口系统与跨平台协作

6. 与Windows系统的协作
6.1 从Windows登录到UNIX系统

在很多环境中,Windows和UNIX系统会同时存在,用户可能希望在不离开Windows桌面的情况下访问UNIX系统。SSH(安全外壳协议)是访问UNIX和Linux系统的最佳远程工具。以下是一些适用于Windows的SSH客户端:
- PuTTY :开源且简单有效,支持许多本地终端应用程序(如xterm)的功能。它还包含用于文件传输的命令行客户端 psftp pscp
- WinSCP :对于不喜欢使用命令行的Windows用户,这是一个图形化的SSH客户端。
- Cygwin :可以安装在Windows上的类UNIX环境,可运行其SSH实用程序。
- MindTerm :一个零足迹的Java实现的SSH客户端,可在支持Java的任何系统上运行,个人使用免费。
- SecureCRT :商业SSH客户端,支持各种终端功能,提供出色的客户服务。

SSH还有一个重要功能是TCP端口转发,但此功能存在一定风险,可在服务器端禁用该功能,将SSH限制为仅用于终端访问和文件传输。

6.2 访问远程桌面
6.2.1 X服务器在Windows上的运行

X11是一个客户端/服务器系统,X服务器负责在用户屏幕上显示数据并获取用户的鼠标和键盘输入。虽然X11协议丰富,但原设计缺乏安全性,任何连接到X服务器的程序都可能获取用户的键盘输入和屏幕显示内容。因此,除非确定操作安全,否则应避免远程连接到X服务器。

若要在UNIX上运行程序并将其界面显示在Windows上,可使用SSH协议的X11转发功能。此功能会在远程主机上运行的X客户端和本地X服务器之间创建安全隧道。要使用该功能,需在SSH服务器和客户端都启用X转发:
- 客户端(以PuTTY为例) :在其设置屏幕中激活X11转发功能。
- 服务器端 :确保 /etc/ssh/sshd_config 文件包含 X11Forwarding yes ,修改后需重启 sshd 进程。

不过,通过SSH转发X连接可能会很慢,尤其是在网络有延迟的情况下。

Windows上有多种X服务器可供选择:
- Cygwin项目提供的免费X服务器 :配置后效果良好。
- Xming服务器 :易于配置。
- 商业X服务器 :如Exceed和X - Win32,配置简单但价格较高。

6.2.2 VNC(虚拟网络计算)

VNC是20世纪90年代末由AT&T实验室开发的远程桌面访问系统,它将简单的哑终端与现代窗口系统相结合。与X11不同,VNC协议处理的是完整的虚拟桌面。

VNC软件开源,有许多服务器和查看器实现,且协议具有扩展性,不同实现之间可相互协作。
- UNIX系统 :VNC服务器实现本质上是一个图形适配器模拟器,可插入X.Org X窗口服务器。运行 vncserver 会创建一个新的虚拟桌面,可使用VNC查看器远程访问。建议在首次启动服务器前使用 vncpasswd 命令设置连接密码。
- Windows系统 :VNC服务器通常直接导出标准Windows桌面,主要用于远程支持。

以下是VNC的特点表格:
|特点|描述|
| ---- | ---- |
|无状态和基于位图|查看器可自由连接和断开,多个查看器可同时访问同一服务器|
|扩展性|不同实现可选择双方都支持的最佳协议变体|

6.2.3 Windows RDP(远程桌面协议)

自Windows 2000 Server起,Windows系统就具备为多个用户同时提供图形远程访问的能力。通过RDP,用户可以像在本地一样操作远程的Windows桌面。

下面是一个简单的流程图,展示从Windows访问UNIX系统图形界面的常用方法:

graph LR
    A[Windows系统] -->|SSH| B(UNIX系统)
    A -->|X服务器| C(显示UNIX程序界面)
    B -->|VNC服务器| D(VNC查看器)
    D -->|显示| C
    A -->|RDP| E(远程Windows桌面)
7. 总结

X窗口系统是许多UNIX和Linux系统图形界面的基础,在使用过程中可能会遇到各种问题,需要通过日志和相关工具进行排查和调试。同时,现代桌面环境如GNOME和KDE各有特点,用户可根据自身需求选择。在跨平台协作方面,SSH、X转发、VNC和RDP等技术为Windows和UNIX系统之间的协作提供了多种方式,每种方式都有其优缺点和适用场景。

希望通过本文的介绍,你能对X窗口系统和跨平台协作有更深入的了解,并能根据实际情况选择合适的工具和方法。在实际操作中,不断尝试和实践,以更好地掌握这些技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值