多显示器 Linux 系统

作者:Brian Gollsneider

当今的工程设计需要大量的屏幕空间。当你开始进行电路布局、数学模型和仿真、图像处理以及其他工程工作时,你需要足够的空间。使用像 Octave 这样的软件包绘制两次数据运行的结果是一项常见的任务,但在没有足够的屏幕空间的情况下会变得困难。我们已经到了使用多显示器几乎成为工作所需的基本要求的程度。

幸运的是,计算机硬件的快速淘汰导致了原本良好设备的提前退役。谁没有几年前还是最先进的,但现在已经被超越的额外显卡或显示器闲置在家呢?即使你没有,购买一些新的硬件来真正提升你的系统也不需要花费太多。

我们提出了一个公式来设置 Linux 系统,使其具有两个或多个显示器,并提供各种配置、我们在执行此操作时学到的一些经验教训以及我们为该系统找到的一些用途。但请注意——遵循这个公式并不能保证成功,因为有些显卡就是无法与其他显卡协同工作。与往常一样,在进行任何系统更改之前,请务必进行适当的备份。

公式

要为多显卡设置系统,请从 Red Hat 7.2、两张显卡和显示器开始。我们从全新安装开始,以便您可以了解每个步骤,以防您已经对系统进行了大量修改。(如果您没有使用 Red Hat 7.2,或者您正在修改一个正在运行的安装,请遵循这些步骤的精神。)再次强调,在尝试任何操作之前备份您的数据。

  1. 将两张显卡物理安装到系统中,打开两个显示器并启动 Linux 安装。

  2. 当您到达安装的相应部分时,选择 KDE 和图形登录。这不是至关重要的,但它使测试更容易,并且可以在以后更改。

  3. 完成安装并确保您的基本系统和 X Window 系统通过重启和登录来工作。此时,您将有一个显卡和一个显示器工作。

  4. 以 root 用户身份,启动 xterm 并通过键入 cd 确保您位于您的主目录中。然后键入 cp /etc/X11/XFConfig-4 . 在您的主目录中创建 X 配置文件的备份副本,以防万一。

  5. 现在,键入 telinit 3 从使用图形登录的运行级别 5 切换到使用控制台登录的运行级别 3。

  6. 是时候收集一些数据,看看这是否可行了。再次以 root 用户身份登录。键入 X -version 并记下输出。在输出的某个位置,它可能会显示 4.1.0,但也可能是 3.3.6a,具体取决于您的主显卡。下一步是重要的一步。键入 XFree86 -configure 并等待通常需要一分钟左右才能运行的时间。现在键入 XFree86 -xf86config /root/XF86Config.new。如果成功,您将听到两个显示器在切换模式时发出的咔哒声,并且电源指示灯将从琥珀色变为绿色。屏幕本身将充满原始的 X 显示。如果它们这样做了,恭喜您,您应该能够使此设置工作(注意:按 Ctrl-Alt-Backspace 杀死 X)。如果它们没有这样做,那么尝试不同的显卡组合;我们无法强制不成功完成此步骤的系统工作,但我们很乐意听到您成功的消息!现在键入 XFree86 -scanpci 并记录输出。典型输出:(0:8:0) S3 Virge,这是一张 PCI 卡,以及 (1:0:0) NVIDIA Riva Ultra 64,这是一张 AGP 卡。将识别其他卡和插槽,但这对于工作来说并不重要。

  7. X 服务器的配置:您需要确保您正在调用正确的 X 服务器,特别是如果您在步骤 6 中的 X 版本低于 4。键入 ls -l /etc/X11/X。如果它是指向 XFree86 的符号链接,则您正在使用 XFree86 版本 4。如果不是,通过键入 mv /etc/X11/X /etc/X11/X_orig 来备份链接。通过键入 ln -s /etc/X11/bin/XFree86 /etc/X11/X 创建正确的链接。

  8. 多头配置:此时,您可以直接复制新的 X 配置文件 (cp /root/XF86Config.new /etc/X11/XFConfig-4),但您的分辨率可能不会很好。更好的方法是编辑 /etc/X11/XF86Config-4 并整合从这些步骤中获得的知识。我们将在下一节中介绍微调。

  9. 最后,键入 telinit 5,登录并享受。如果您成功了,您的系统将启动并为您提供登录屏幕。右侧的屏幕是您的主屏幕;左侧的屏幕将在登录过程结束时出现。

背景

我们使用 Red Hat 7.2 作为基线,因为它具有支持多显示器(和输入设备)的 XFree86 4。商业 X 服务器已经支持这一点一段时间了,但 XFree86 4 随新的 Linux 发行版一起发布,而且是免费的。版本 4 引入了一个新的配置文件和格式,以允许这种灵活性。关键部分是 ServerLayout,它将一个屏幕相对于另一个屏幕定位。这是一个摘录

Section "ServerLayout"
        Identifier   "XFree86 Configured"
        Screen   0 "Screen0" 0 0
        Screen   1 "Screen1" LeftOf "Screen0"
        InputDevice  "Mouse0" "CorePointer"
        InputDevice  "Keyboard0" "CoreKeyboard"
EndSection

正如您无疑从这种简单的格式中意识到的那样,此设置将配置 Screen0(与您的主显卡关联的屏幕),然后配置 Screen1 并将其放置在 Screen0 的左侧。换句话说,您将在 Screen0 上移动鼠标,点击左边缘,然后从右侧进入 Screen1(如果您将显示器向后放置,则非常令人困惑)。您可以选择 Right、Top、Bottom 甚至 Relative 定位,以便屏幕呈对角线排列。执行 man XFree86 以获取详细信息。屏幕不必具有相同的分辨率甚至相同的颜色深度。如果您愿意,可以将其中一个或两个设置为虚拟,但我们发现这并不容易使用。ServerLayout 中的每个屏幕都由 Monitor 引用和 Device(显卡)引用组成,如下所示

Section "Screen"
        Identifier "Screen0"
        Device   "Card0"
        Monitor  "Monitor0"
        SubSection "Display"
                Depth   8
                #Virtual         1024 768
        EndSubSection
EndSection
以下是支持 Screen0 的显示器和设备部分
Section "Monitor"
        Identifier  "Monitor0"
        VendorName  "GWY"
        ModelName  "311"
EndSection
Section "Device"
        Identifier "Card0"
        Driver   "mga"
        VendorName "Matrox"
        BoardName  "MGA 2164W"
        BusID    "PCI:0:14:0"
EndSection
第一个关键的事情是确保一切都一致,即 Screen0 具有 Monitor0 和 Card0。重要的是名称匹配,而不是它们是什么。我们已经养成了一种习惯,使一组以 0 结尾,下一组以 1 结尾,而不是跟踪卡和显示器名称。这样更容易避免错误。

下一个关键的事情是设备驱动程序。这由 XFree86 -configure 步骤为两张卡识别。最后,获得正确的 BusID 至关重要。只有一张卡时是可选的,但对于两张或更多卡是强制性的。AGP 卡将以 1 而不是 0 开头,并且可能是 1:0:0。

现在您已经掌握了基础知识,需要微调 /etc/X11/XFConfig-4 以获得最佳性能。编辑此文件并交错 /root/XFConfig-4.new 中标识的数据。因为我们正在使用 KDE 的图形登录,所以您可以调整文件,注销,从 KDE 登录窗口重新启动 X 服务器,进行登录并查看会发生什么。如果您不满意,请调整并重复。这比手动重启 X 快得多。请参阅清单 1 [可在 ftp.linuxjournal.com/pub/lj/listings/issue99/5958.tgz 获取] 以获取完整的 XFConfig-4 文件。

此时,您已经拥有一个使用 KDE 图形登录并可能使用 KDE 环境的工作多头系统(图 1)。事实证明,可以设置四种不同的配置:GNOME 或 KDE 登录,然后是 GNOME 或 KDE 环境。我们现在将介绍每种方法的优点和缺点。

Multiheading Linux Systems

图 1. 成功运行的多头系统

选项

文件 /etc/sysconfig/desktop 确定使用哪个登录管理器。这是一个单行文件,内容为 DESKTOP="GNOME"DESKTOP="KDE"。根据您的要求以 root 用户身份编辑。以下是四种配置选项

  1. KDE 登录管理器/KDE 工作环境(如果您遵循了公式,您的系统将以此方式设置)。这种方法为您提供两个屏幕,可以通过 :0.0 标识主屏幕,通过 :0.1 标识辅助屏幕。屏幕是独立的,因此您无法将窗口从一个屏幕移动到另一个屏幕。每个屏幕都有一个 KDE 菜单栏。这种方法的最佳用途是将一个屏幕专门用于监控(错误日志、网络活动、服务器机房温度等)任何您需要关注的占用大量屏幕空间的内容。这是使此工作实现的最初动机——使用一些旧硬件来监控网络活动并进行其他工作,而无需在桌面上再放一台计算机。由于我们正在使用 Linux 并拥有 X Window 系统,因此很容易控制 X 应用程序出现的位置。您可以键入 DISPLAY=:0.1 (bash/ksh/sh 语法),然后您的应用程序将出现在屏幕 :0.1 中。如果您只想在另一个屏幕中显示一个行为良好的 X 应用程序,请键入 xclock -display :0.0,例如。

  2. KDE 登录管理器/GNOME 工作环境(从命令提示符键入 switchdesk 并选择 GNOME 以从原始设置更改)。这为您提供了一个窗口管理器来控制一个屏幕,而另一个屏幕上是原始 X。您可以键入 /usr/X11R6/bin/mwm -display :0.1 & 在 xterm 中(忽略警告),并在另一个屏幕中运行不同的窗口管理器。命令 twmfvwm2 也将起作用。这对于测试目的很有用,因为您可以快速查看应用程序在环境中运行时是否存在任何问题。与配置 1 一样,屏幕是独立的。

配置三和四采用了不同的方法,并使用了 XFree86 4 中的 Xinerama 扩展。作者感谢 Dennis Baker 提供的精彩 HOWTO。Xinerama 创建了一个大屏幕,因此它可能是最简单和最自然的工作方式。您只需将窗口从一个屏幕移动到另一个屏幕。这些配置有两个关键步骤。首先,如上所述更改 /etc/sysconfig/desktop 文件。其次,在文件 /etc/X11/gdm/gdm.conf 中,通过将其更改为 0=/usr/bin/X11/X +xinerama 来编辑文件末尾附近的行 0=/usr/bin/X11/X

  1. GNOME 登录/GNOME 工作环境,具有一个大型连接屏幕。当您最大化窗口时,它将填充其屏幕。

  2. GNOME 登录/KDE 工作环境。(如果您只想尝试一次 KDE,请从登录窗口中选择 KDE。)同样,它是一个大型连接屏幕。这次当您最大化窗口时,它将填充整个屏幕(跨越屏幕)。

经验教训

Red Hat 在 /usr/bin/hwbrowser 中有一个硬件浏览器应用程序,它提供了有用的信息。这在 X 下非常方便,可以查看系统是否识别出两张显卡。

有些显卡就是不能很好地协同工作。我们成功尝试了多种组合——一对匹配的 ATI Mach64 3D RAGE II PCI 卡、一张 ATI Mach64 AGP 和 Matrox II PCI 卡,以及一张 S3 Virge PCI 和 NVIDIA Riva TNT2 AGP 卡。我们使用上述步骤在几分钟内使这些组合工作起来。我们还尝试了 Diamond Stealth II S220,但没有成功,它肯定不能很好地与其他显卡配合使用。我们根本无法让这张卡与另一张卡一起工作。

主显卡是 BIOS 显示出现的位置,也是 Screen0 所在的位置。PCI 通道号最高的显卡是主显卡。有些计算机 BIOS 提供了首先初始化 AGP 卡的选项,但这对我们不起作用,因为 PCI 卡仍然显示 BIOS,这太糟糕了,因为对环境的这种级别的控制将非常有用。

由于在使用 KDE 登录管理器时您有多个屏幕,因此 KDE 屏幕保护程序仅在主屏幕上工作。如果您希望两个屏幕都有屏幕保护程序,请设置 xscreensaver 并在您的 shell 初始化文件(例如 .bashrc)中调用它。使用 :0.0 或 :0.1 在配置中很容易在一个屏幕上放置一个屏幕保护程序,在另一个屏幕上放置不同的屏幕保护程序。

在 .bashrc 中放置一些变量赋值,例如 left='-display :0.1'right='-display :0.0'。然后您可以指定要使用的屏幕,例如 xeyes $leftxclock $right。这有助于使事情变得更简单易用。

结论

我们目前最喜欢的工作方式是使用 KDE 登录和 KDE 窗口环境。KDE 似乎作为一个工作环境更简洁,并且可以跨越多个屏幕(记住在配置 2 中使用 GNOME,您必须启动第二个窗口管理器)。更重要的是,KDE 登录为您提供独立的屏幕,因此您可以打开一个屏幕供人们使用(xhost + 以禁用访问控制),并且仍然可以在另一个屏幕上工作,而无需担心安全问题。此外,我们倾向于将一个屏幕专门用于监控事件和显示事物。

这里提出的公式非常容易遵循,如果视频硬件支持,则可以在十分钟内将工作正常的 Linux 系统转换为多显示器系统。这项技术使我们能够利用原本过时的硬件来大大简化我们的工程工作。

致谢

作者感谢 Gary Normandin 提供的见解和为测试这些方法所做的辛勤工作,感谢 Dennis Baker 通过他的 Xinerama HOWTO(可在 www.linuxdoc.org 找到)指明了方向,并感谢 Learning Tree International 允许我们使用他们的设备进行一些测试。

Multiheading Linux Systems
Brian Gollsneider (gollsndb@glue.umd.edu) 正在马里兰大学攻读电气工程博士学位。当不埋头于洁净室时,他是 Learning Tree International 的 UNIX 讲师。

Multiheading Linux Systems
Arthur M. Messenger 是一位退休的 UNIX 系统管理员,他偶尔会回答朋友的问题,并在 Learning Tree International 兼职工作。不教书的时候,他和妻子住在弗吉尼亚州的海马克特,并与他们的孙子孙女共度时光。
加载 Disqus 评论