跳转到内容

多座配置/evdev

来自维基教科书,开放的书籍,开放的世界

此页面介绍了使用 evdev 的多终端的工作原理以及如何实现它。这种方法消除了对内核补丁的使用,并使用 evdev 协议配置了w:多终端

操作系统

[编辑 | 编辑源代码]

Debian Sarge(但您也可以轻松使用其他 Linux 发行版)

视频适配器

  • 4 个 SiS 显卡(您也可以使用其他显卡,但它们并不总是与其他显卡组合工作)

输入设备

  • 1 个 PS/2 键盘
  • 1 个 PS/2 鼠标
  • 3 个 USB 键盘
  • 3 个 USB 鼠标

确保您的内核已编译包含 evdev 模块。

您还需要安装 udev,它提供了动态的 /dev 目录,其中包含当前可用设备的更新信息。

apt-get install udev

udev 系统需要 2.6.12 或更高版本的内核。

安装 SiS 驱动程序

[编辑 | 编辑源代码]

1. 将以下行添加到 /etc/apt/sources.list 文件中

http://www.winischhofer.net/sis/debian/stable ./

2. 更新软件包信息数据库并安装 x-driver-sis 软件包

apt-get update
apt-get install x-driver-sis

热插拔

[编辑 | 编辑源代码]

安装热插拔软件包

apt-get update
apt-get install hotplug

输入设备

[编辑 | 编辑源代码]

在继续之前,我们需要确保输入设备(键盘和鼠标)已正确检测到。阅读 /proc/bus/input/devices 文件的内容,该文件包含有关内核检测到的设备的详细信息。下面显示了该文件中的示例。我们只关注两个字段:设备名称,包含在以“N: Name=”开头的行中,以及物理地址,显示在以“P: Phys=”开头的行中。

I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
H: Handlers=kbd event0
B: EV=120013
B: KEY=4 2000000 3802078 f840d001 f2ffffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=7

I: Bus=0011 Vendor=0002 Product=0005 Version=0000
N: Name="ImPS/2 Generic Wheel Mouse"
P: Phys=isa0060/serio1/input0
H: Handlers=mouse0 event1
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103

I: Bus=0003 Vendor=0a81 Product=0101 Version=0110
N: Name="CHESEN USB Keyboard"
P: Phys=usb-0000:00:10.2-1/input0
H: Handlers=kbd event2
B: EV=120003
B: KEY=10000 7 ff87207a c14057ff febeffdf ffefffff ffffffff fffffffe
B: LED=7

I: Bus=0003 Vendor=0a81 Product=0101 Version=0110
N: Name="CHESEN USB Keyboard"
P: Phys=usb-0000:00:10.2-1/input1
H: Handlers=kbd event3
B: EV=3
B: KEY=1f 0 20000 3878 d801d101 1e0000 0 0 0

I: Bus=0003 Vendor=04fc Product=0013 Version=06b0
N: Name="USB OpticalWheel Mouse"
P: Phys=usb-0000:00:10.2-2/input0
H: Handlers=mouse1 event4
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103

请注意,该文件似乎显示了三个键盘的存在,即使在测量的系统上只有两个键盘。产生额外设备的原因是,许多 USB 键盘包含特殊键(例如多媒体控制键或互联网快捷键),内核会将这些键检测为属于第二个键盘。辅助键盘的物理地址以“input1”结尾。我们将只处理主键盘,其地址以“input0”结尾。因此,关于物理地址为“usb-0000:00:10.2-1/input1”的辅助键盘的部分将被忽略。

XOrg 服务器

[编辑 | 编辑源代码]

下一步是安装 XOrg 服务器。

1. 备份并删除 /etc/init.d/xfree-common 文件。 2. 将以下行添加到 /etc/apt/sources.list 文件中

deb http://people.debian.org/~nobse/xorg-x11/ sarge main
deb-src http://people.debian.org/~nobse/xorg-x11/ sarge main

3. 安装 xserver-xorg 软件包

apt-get update
apt-get install xserver-xorg
apt-get upgrade

XOrg 服务器配置

[编辑 | 编辑源代码]

xorg.conf

[编辑 | 编辑源代码]

此配置将在多终端运行时使用。该文件将根据终端数量添加额外的部分。对于每个终端,我们将创建鼠标、键盘、图形设备、监视器、屏幕和布局部分。例如,在具有四个终端的多终端中,该文件将包含四个鼠标部分、四个键盘部分,等等。

“Identifier”值不是必需的。它们可以更改为任何内容,只要名称在整个文件中保持一致即可。

物理地址(“Dev Phys”选项)可以从 /proc/bus/input/devices 文件中获取,如前所述。

以下是每种类型的部分的示例。

Section "InputDevice"
        Identifier      "Generic Keyboard 0"
        Driver          "kbd"

        # Change the value of the "Dev Phys" option to the physical
        # address of the corresponding keyboard, found in the file
        # /proc/bus/input/devices .
        Option          "Protocol"      "evdev"
        Option          "Dev Phys"      "isa0060/serio0/input0"

        # Configure your keyboard as usual
        Option          "XkbRules"      "xorg"
        Option          "XkbModel"      "pc104"
        Option          "XkbLayout"     "us"
        Option          "CoreKeyboard"
EndSection


Section "InputDevice"
        Identifier      "Configured Mouse 0"
        Driver          "mouse"

        # Change the value of the "Dev Phys" option to the physical
        # address of the corresponding mouse, found in the file
        # /proc/bus/input/devices .
        Option          "Protocol"      "evdev"
        Option          "Dev Phys"      "isa0060/serio1/input0"

        # All mice should have "CorePointer"
        Option          "CorePointer"
        Option          "ZAxisMapping"          "4 5"
EndSection


Section "Device"
        Identifier      "Generic Device 0"
        Driver          "sis"
        Screen          0

        # All cards must have an explicit BusID.  The addresses may be
        # obtained with "lspci | grep VGA".  Be careful with the
        # values, since lscpi displays hexadecimal addresses and XOrg
        # expects decimal.  For conversion, use
        # "echo $((0xVALOR_HEXADECIMAL))".
        BusID           "PCI:1:0:0"

        # This option disables VGA and VBE calls on IRQ 10, to avoid
        # calls for a card interfering with the others.  See also the
        # file "xorg.conf.probe".
        Option          "NoInt10"       "Yes"

        # This SiS driver options prevent problems when switching
        # virtual terminals or finishing the X server.
        Option          "RestoreBySetMode"      "no"

EndSection


# These are default values.  Configure your monitors as usual.
Section "Monitor"
        Identifier      "Generic Monitor 0"
        HorizSync       30-60
        VertRefresh     50-75
        Option          "DPMS"
EndSection


# The screen configuration is also illustrative, change it to your
# preference.
Section "Screen"
        Identifier      "Default Screen 0"
        Device          "Generic Device 0"
        Monitor         "Generic Monitor 0"
        DefaultDepth    24
        SubSection "Display"
        Depth           24
                Modes           "1024x768" "800x600" "640x480"
        EndSubSection
EndSection


Section "ServerLayout"
        # The Identifier value will be used in the command-line call.
        Identifier      "Layout0"
        Screen          "Default Screen 0"
        InputDevice     "Generic Keyboard 0"
        InputDevice     "Configured Mouse 0"

        Option          "SingleCard"
EndSection

xorg.conf.probe

[编辑 | 编辑源代码]

除了标准的 xorg.conf 外,我们还需要另一个配置文件 xorg.conf.probe。在多终端运行时,我们禁用了通道 10(IRQ 10)上的中断,以避免 VGA(和 VESA VBE)对板的调用干扰其他板。但是,如果没有这些调用,辅助板将不会初始化。为了解决这个问题,在系统启动期间,XOrg 服务器将使用 xorg.conf.probe 文件运行。它将在测试期间使用启用的 IRQ 10 调用探测这些卡,从而初始化它们。

要创建 xorg.conf.probe,请将 xorg.conf 作为基础,删除与主显卡相关的部分(主显卡在计算机启动时由 BIOS 初始化)并将所有 NoInt10 选项切换为“No”。一个布局就足够了,只要它包含所有辅助卡。为了说明,以下是来自先前 xorg.conf 的 xorg.conf.probe 文件的一些部分

# In all Device (graphics card) sections, toggle NoInt10 to:
        Option          "NoInt10"               "no"

# Declare only one layout, and without the "SingleCard" option.
# All the secondary screens should be present.  Their position
# (LeftOf, etc.) is not significant, nor the input devices.

Section "ServerLayout"
        Identifier      "probe"
        Screen          "Default Screen 1"
        Screen          "Default Screen 2"   LeftOf  "Default Screen 1"
        Screen          "Default Screen 3"   LeftOf  "Default Screen 2"
        InputDevice     "Generic Keyboard 1"
        InputDevice     "Configured Mouse 1"
EndSection

要运行探测,我们提供了 xorg-multiterminal 脚本。它以 probeonly 模式运行 X 服务器(检查视频适配器并退出),使用 xorg.conf.probe 作为配置文件。如前所述,此步骤初始化了辅助视频卡。该文件的内容为

file=/etc/X11/xorg.conf.probe

[[ -f "$file" ]] && /usr/X11R6/bin/X -config "$file" -probeonly 2>/dev/null

将它保存并设置可执行位,并将启动系统配置为运行该脚本。在 Debian 上,路径应该是 /etc/init.d/xorg-multiterminal,有两种配置系统的方法

  • 通过 update-rc.d 命令。这对默认 Debian 初始化系统(sysv-rc)和 file-rc 软件包的用户都有效。
update-rc.d xorg-multiterminal start 70 S .
  • 手动

在具有默认初始化系统的 Debian 系统上,创建一个符号链接

ln -s /etc/init.d/xorg-multiterminal /etc/rcS.d/S70xorg-multiterminal

在具有 file-rc 软件包的 Debian 系统上,在 /etc/init.d/runlevel.conf 文件的适当位置添加以下行

70        -        S        /etc/init.d/xorg-multiterminal

最后一步是配置登录管理器以启动所有 X 服务器。我们只配置 GDM。其他登录管理器,如 XDM 和 KDM,可以以类似的方式配置。

/etc/gdm/gdm.conf 文件的“[servers]”部分应该有多个条目,如下面的四终端示例所示

[servers]
0=XServer0
1=XServer1
2=XServer2
3=XServer3

服务器的名称是任意的。必须为每个服务器添加一个部分,其内容如下所示

[server-XServer0]
name=Standard server
command=/usr/X11R6/bin/X -br -audit 0 -layout Layout0 :0 vt7 -sharevts
flexible=true

[server-XServer1]
name=Standard server
command=/usr/X11R6/bin/X -br -audit 0 -layout Layout1 :1 vt8 -sharevts
flexible=true

[server-XServer2]
name=Standard server
command=/usr/X11R6/bin/X -br -audit 0 -layout Layout2 :2 vt9 -sharevts
flexible=true

[server-XServer3]
name=Standard server
command=/usr/X11R6/bin/X -br -audit 0 -layout Layout3 :3 vt10 -sharevts
flexible=true

故障排除

[编辑 | 编辑源代码]

启动多终端时遇到的问题将记录在 /var/log/Xorg.*.log 文件中。每个终端的 X 服务器都会创建自己的日志文件。

华夏公益教科书