多座配置/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 或更高版本的内核。
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 服务器。
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
此配置将在多终端运行时使用。该文件将根据终端数量添加额外的部分。对于每个终端,我们将创建鼠标、键盘、图形设备、监视器、屏幕和布局部分。例如,在具有四个终端的多终端中,该文件将包含四个鼠标部分、四个键盘部分,等等。
“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 外,我们还需要另一个配置文件 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 服务器都会创建自己的日志文件。