linky_fan 发表于 2006-10-22 18:02:29

Linux 和创建显示连续桌面的多监视器设置

Linux 和 Xdmx 的分布式多线程支持
创建显示连续桌面的多监视器设置


Nathan Harrington ([email protected]), 应用程序开发人员, IBM


2006 年 5 月 23 日

学习在开发可以提高计算体验的多屏幕配置和物理布局时可以使用的工具。可以用 Linux® 和 Xdmx 创建一个跨越独立计算机的多个显示设备的连续桌面。把运行 Linux 的笔记本计算机和台式计算机组合在一起,创建一个大型显示器,以提高生产效率。研究在不需要购买图形卡的情况下如何设置大型显示墙和创建多线程设置。
向计算设置添加监视器,通常会极大地提高生产率,因为可以消除频繁地切换任务的需求。这和其他许多好处,早已经为那些使用多线程图形卡或者在同一台 PC 上使用多块图形卡的用户所熟知。使用 Linux 和 Xdmx,任何具有两个显示设备和两台计算机的人,不必投资于新硬件,就可以享受多线程设置的好处。

使用 Xdmx 和一些简单的配置建议,我们将设置一个具有四台监视器的计算环境,其中包括一台台式机和三台笔记本。将学习使用 Chromium 和千兆网络速度跨多个百万像素显示器分发实时 3-D 图形的高性能可视化设置。将学习在开发可以提高计算体验的多屏幕配置和物理布局时可以使用的工具。

需求

这篇文章的开发在四台计算机上进行,有三块显卡,三个屏幕尺寸,三个独立的分辨率设置。内核级别 2.4.21-2.6.15 用于 X11 和 xorg 配置上,操作系统包括 Red Hat Enterprise Linux(RHEL)V3.5 和 Fedora Core 3 发布版。要点在于:硬件和软件的多样性并不是障碍。可以在包括许多硬件选项的众多分布上成功地安装和使用 Xdmx。

硬件

需要以下硬件:

相对现代的 CPU —— 超过 486 的应当就可以(虽然有点儿慢)
快速的网络连接 —— 以太网或更好的
图形卡至少具备 16 位色深的能力 —— 如果低于此,使用开启 xinerama 的显示时会有困难
软件

我们在现代的 Red Hat 和 Fedora Core 发布版上进行开发,但是其他许多发布版也应当可以满足需求。如果选择的发布版支持 RPM,就应当能够不从源代码编译 Xdmx 应用程序就能启动和运行。

Xdmx 的获取和安装

软件获取

请前往 Sourceforge.net 获得 Xdmx(请参阅 参考资料)。对于本文来说,RPM 就足够了。请在 Download DMX 区中找到 dmx-1.2.20040630-1.i386.rpm 文件。如果正在使用一个非常古老的发布版,或者使用不支持 RPM 的发布版,可能必须从头开始编译 DMX。源代码也在 Download DMX 区中,但是编译说明超出了这篇文章的范围。

安装

有了 Xdmx RPM 之后,需要运行安装过程。在基于 RHEL V3.5 的系统上,rpm -Uvh dmx-1.2.20040630-1.i386.rpm 应当可以没有问题地安装好 Xdmx 应用程序。在 Fedora Core 3 和更高的系统上,在运行 RPM 命令时,可能看到类似 file /usr/X11R6/lib/libdmx.a from install of dmx-1.2.20040630-1 conflicts with file from package xorg-x11-devel-6.8.2-31 的错误消息。

作为解决方案,请使用 --force 选项:rpm --force -Uvh dmx-1.2.20040630-1.i386.rpm。警告:强制安装 Xdmx 软件可能会造成开发环境的不稳定。我曾经没有一点儿错误地运行使用 “强制安装的” Xdmx 软件的开发环境有一年多时间,但是您的体验可能会不同。如果不想强制安装,请从源代码编译 Xdmx 应用程序,然后安装。

在基于 Debian 的系统或使用 apt-get 的系统上,请用 apt-get install xdmx 安装并设置 Xdmx。

Xdmx 需要安装在要成为多线程显示设置组成部分的每台机器上。服务器和客户机都包含在 Xdmx 的安装包中。所以如果想添加显示节点、改变控制节点或者现有节点中出现硬件故障,不需要重新安装软件来支持不同的配置。


多线程操作的 PC 配置

Xdmx 手册

Xdmx 带有精彩的手册信息,提供了分布式多线程显示入门所需的全部信息。这篇文章的重点是帮助您克服与不同的硬件设置有关的一些比较困难的问题。所以请继续阅读一些如何使用 Xdmx 和如何克服可能面临的一些挑战的真实示例。

一台 PC,一台笔记本

对于这个初始的示例,我们将使用一台 PC 和一台笔记本,做一个包括两个屏幕的设置,桌面要扩展到跨越两个显示器。开始时,请委托一个计算资源作为控制节点 —— 在我们的示例中,选择 PC 作为控制节点。

X 配置文件的设置

使用不同的硬件的一个大问题是,不同的计算资源之间对延时特性的支持。在 Xdmx 工作之前,需要保证系统支持同一套选项。在这个示例中,所有的系统都没有安装相同的字体。 Xdmx 有一个选项来处理这个问题,稍后我们将介绍它。现在,请注意 GLX 支持和默认的显示位深是影响 Xdmx 正确运行的常见问题。为了把桌面扩展到多个屏幕上,请确保根窗口的位深与在每个屏幕上都相同。如果要使用多个独立的桌面,那么显示器之间的位深匹配不是必需的。由于在这个示例中,我们需要一个大的显示,所以请修改 Xorg.conf 或 XF86Config 文件,选择 16 位色深作为默认值。(只要所有的设备都支持,也可以选择 24 位或其他位深。)对于这个示例,16 位是所有硬件都支持的最高色深。

请做一份 Xorg.conf 或 XF86Config 文件的拷贝,然后再做以下修改。例如,在 RHEL 3.5 系统上,XF86Config 文件有以下几行:


清单 1. 示例 XF86Config 文件:

Section "Screen"
      Identifier "Screen0"
      Device   "Videocard0"
      Monitor    "Monitor0"
      DefaultDepth   24
      SubSection "Display"
                Depth   24
                Modes    "1400x1050" "1280x1024" \
                "1280x960" "1152x864" "1024x768" "800x600" "640x480"
      EndSubSection
EndSection



把 DefaultDepth 24 改成 DefaultDepth 16,把 SubSection 下面负责显示的行从 Depth 24 改成 Depth 16。

如果拥有特定于硬件的定制驱动程序,那么可能需要恢复到默认设置或者尝试兼容的硬件支持。请参阅硬件的文档了解硬件支持的详细信息。例如,示例中的 RHEL V3.5 笔记本包含 ATI FireGL Mobility T2 显卡和相关的驱动程序。如上所示对 XF86Config 文件进行修改会造成错误,因为 fglrx 驱动程序不支持 16 位深度的设置。解决方案是运行 system-config-xfree86(在 Fedora Core 上用 system-config-display),并选择 VESA 模式作为兼容性支持。在 Advanced 选项卡中,选择 VESA Driver (generic) 作为视频卡。在 Monitor Type 部分中,把设置配置成支持显示器能处理的最大分辨率。回到 Display 选项卡,选择分辨率和 Thousands of Colors 作为色深。

现在位深已经匹配,可以尝试多屏幕设置了。在客户机节点上,启动 X 会话。如果是在运行级 3 上,可以使用命令 xinit 启动一个干净的 X 会话。如果已经登录到图形窗口管理器会话,例如 GNOME 或 KDE,请启动一个 Xterm。在客户机节点屏幕的 Xterm 窗口中,输入 xhost + control_node_ip,其中 control_node_ip 是控制节点的 IP 地址。对于这个示例,控制节点是 192.168.1.101,所以我就在客户机节点上运行命令 xhost + 192.168.1.101。

Xdmx 启动命令

在控制节点上,请启动默认的 X 窗口系统会话。例如,如果正在运行 xdm,那么在启动时会出现登录屏幕;然后启动 GNOME 或 KDE 会话。不论怎样,请在控制节点上启动一个 Xterm。然后启动新的 Xdmx 会话,横跨两个运行 twm 窗口管理器的节点。当然,窗口管理器是自选的,但是请注意 GNOME 不支持在同一台计算机上运行两个实例。请在控制节点上运行以下命令:

清单 2. 示例 Xdmx 启动命令:


startx `which twm` --         \
/usr/bin/X11R6/Xdmx :1      \
-display control_node_ip:0\
-display client_node_1_ip:0 \
-ignorebadfontpaths         \



其中 control_node_ip 是 192.168.1.101 ,client_node_1_ip 是客户机节点的 IP 地址。表 1 分解了这个命令。

表 1. 启动命令详解
启动命令中的每一行 ... ... 以及它的含义
startx `which twm` 用 twm 窗口管理器启动一个 X 会话
-- /usr/bin/X11R6/Xdmx :1 启动 Xdmx 程序,在 :1 上作为 X 会话
-display control_node_ip:0 使用控制节点上的显示器作为第一个监视器
-display client_node_1_ip:0 使用客户机节点上的显示器作为第二个监视器
-ignorebadfontpaths 从不考虑它们
+xinerama 把显示器当作一个桌面

如果命令成功完成,应当看到一个跨越两个屏幕的背景。在控制节点上移动鼠标,来验证有一个跨越两个屏幕的桌面,输入设备在控制节点上。请按 Ctrl+Alt+q 退出 Xdmx。

Xdmx 错误和解决

如果命令没有成功完成,可能看到这样的错误:

清单 3. 示例 Xdmx 错误消息

(II) dmx: ===== End of Summary =====
(!!) dmx: The default visual for screen #0 does not match any of the
(!!) dmx: consolidated visuals from Xinerama (listed above)
(!!) dmx: The default visual for screen #1 does not match any of the
(!!) dmx: consolidated visuals from Xinerama (listed above)
(Fatal Error) dmx: dmxConnectionBlockCallback: invalid screen(s) found
XIO:fatal IO error 104 (Connection reset by peer) on X server ":1.0"
      after 0 requests (0 known processed) with 0 events remaining.



这是 Xdmx 的少数明显不足之一 —— 神秘的错误消息。产生这个特殊的错误消息是因为客户机和控制节点上存在不兼容的 GXL 配置。虽然这些错误消息可能有点儿神秘,但 Xdmx 的功能总是可以提供简单化。请在命令中添加选项 -noglxproxy,并再试一次:

清单 4. 使用 noglxproxy 的示例 Xdmx 命令

startx `which twm` --         \
/usr/bin/X11R6/Xdmx :1      \
-display control_node_ip:0\
-display client_node_1_ip:0 \
-ignorebadfontpaths         \
+xinerama                   \
-noglxproxy


成功了:没有问题了。应当注意到,当 Xdmx 失败时,它造成奇怪的键盘问题。这不是您的问题。我注意到在 Xdmx 失败时,Ctrl、Shift 和 Alt 键无法正常工作。最后的解决方案就是重新启动窗口管理器,然后一切就会正常。

三个客户机节点,三个显示器

现在已经有了两个节点的设置,我们再添加第三个客户机节点。从运行级 3 上,在第三个节点上用 xinit 启动一个干净的 X 会话。在 X 会话启动后出现的 xterm 中输入 xhost + contrl_node_ip。然后修改 Xdmx 的启动命令,包含第三个节点,如清单 5 所示。

清单 5. 带有 noglxproxy 和第三个节点的示例 Xdmx 命令

startx `which twm` --         \
/usr/bin/X11R6/Xdmx :1      \
-display control_node_ip:0\
-display client_node_1_ip:0 \
-display client_node_2_ip:0 \
-ignorebadfontpaths         \
+xinerama                   \
-noglxproxy


向顺序的水平配置中添加另一个节点真的很容易。下面的截屏显示了三个客户机节点正在显示来自另一篇 developerWorks 文章的马赛克图片:

图 1. 三节点配置
http://www-128.ibm.com/developerworks/cn/opensource/os-mltihed/500_three_horiz_devel.jpg

四个客户机节点,2x2 显示

如果采用不同的显示器拓扑会如何?使用 2x2 方阵显示如何?Xdmx 也有答案:使用针对目标设置的几何指示器的配置文件选项。例如,如果想在左上角使用 1024x768 显示,在右上角使用 1400x1050 显示,在左下角使用 1600x1200 显示,在右下角使用 1024x768 显示,那么可以使用以下配置文件:

清单 6. 示例 Xdmx 配置文件

# xdmx.conf- Xdmx configuration file
# quad config setup 2x2

virtual quad_config {
display "client_node_upper_left_ip:0"   @0x0;
display "client_node_upper_right_ip:0"@1024x0;
display "client_node_lower_left_ip:0"   @0x768;
display "client_node_lower_right_ip:0"@1024x768;
}


从控制节点上用以下命令运行以上设置:

清单 7. 使用配置文件的示例 Xdmx 命令

startx `which twm`-- /usr/bin/X11R6/Xdmx :1 \
-configfilexdmx.conf                      \
-configquad_config                        \
-ignorebadfontpaths                         \
-noglxproxy


选择这个物理显示拓扑,是因为只有这样我才能把显示单元堆叠在一起,尽量形成连续桌面的感觉。下面是 Goole 地图上圣弗朗西斯科地区在这个 2x2 分布式多线程设置上的显示情况:

图 2. 四节点配置

http://www-128.ibm.com/developerworks/cn/opensource/os-mltihed/500_quad_devel.jpg

高级配置和显示墙

请记住,显示器不需要物理地放在一起。下面是一个针对编程的配置的截屏,这是一个使用 Ion3 窗口管理器的四个独立桌面:

图 3. 四节点配置
http://www-128.ibm.com/developerworks/cn/opensource/os-mltihed/500_left_three_devel.jpg

请注意最左边的显示。在忙着消灭更多 bug 时,用户可以把窗口移动到这个显示上看一眼,同时余光注意着其他窗口,防止分心。使用带有位置和几何指示器的 Xdmx 配置文件可以创建满足工作环境的任意数量的拓扑。

3-D 处理设置

Chromium 是一个专门设计的包,允许 Xdmx 设置中的每个节点独立地处理 OpenGL 信息,并只处理在这个节点上显示的信息。这提供了一种利用客户机节点的处理能力(和图形卡)来迅速渲染大型 3-D 环境的绝好方法。请参阅下面的参考资料获得关于 Chromium 和配置系统以提高 3-D 显示的更多信息。

显示墙

Xdmx 的主要用途,是在专门研究大型数据集的可视化的大学和研究机构中,用作大型显示系统。这些设置常常使用 Chromium 进行复杂数据集的加速 3-D 显示,设置包含客户机节点和专用机器上的相同硬件。本文更侧重于桌面用户以及如何使用现有硬件来创建分布式多线程设置。对于一些大型显示墙(16000x4800 如何?)和自动配置显示节点的精彩示例,请参阅 参考资料。

结束语

有了为 Linux 桌面设置 Xdmx 多线程显示的经验,不必投资新硬件,就可以极大地提高生产率。使用开放源码的 Xdmx 和 Linux,可以容易地向显示配置中添加机器。用巨大的桌面尺寸打动朋友们吧 —— 甚至可以建立自己的显示墙。编写更多代码、消灭更多 bug,或者同时阅读三篇 developerWorks 文章去吧。


参考资料

学习

您可以参阅本文在 developerWorks 全球站点上的 英文原文。


从源代码学习关于 Xdmx 的更多内容。


在 Viz Roll 上学习如何运行 Xdmx 才能让屏幕之间的边界充当可视内容之间的窗格。


请参阅使用 Xdmx 的精彩的 LambdaVision 高分辨率显示墙。

原文如下(en):
http://www-128.ibm.com/developerworks/library/os-mltihed/index.html

cnhnln 发表于 2006-10-23 12:15:10

Xinerama也可以
还有这个 http://xorg.freedesktop.org/wiki/FAQMiscellaneous#head-088b7637bc5bb1e8c452e6989cf1cc6bb71fc602
或者利用nvidia显卡驱动

linky_fan 发表于 2006-10-24 15:24:43

你那个是多头显示,这个是多节点,概念不一样的。

cnhnln 发表于 2006-10-26 23:36:17

哦,抱歉。还没看内容就回了 :oops:

se9en 发表于 2006-10-27 00:14:09

好东西。标签。好像2006linuxworld大会上。ibm的开发人员演示过这个好东西。
页: [1]
查看完整版本: Linux 和创建显示连续桌面的多监视器设置