5.4. 使用 "Phys" 描述符和 USB 设备

使用输入设备的 "Phys" 描述符大大简化了 XFree 中输入设备的配置,尤其是在使用大量显示器时。

由于 USB 设备以树状形式连接,您可以非常容易地指定键盘和鼠标设备绑定到指定 X 显示的方式。 您必须使用一个端口数量等于(或大于)X 显示数量的 USB 集线器,在这个集线器上连接更小的(2-4 端口)集线器(或带有集成集线器的键盘)。 小(集成)集线器的第一个端口连接键盘,第二个端口连接鼠标(如果有空闲端口,您可以将 usb-audio 设备连接到它们 :) )。 如果主 USB 集线器是第一个 USB 设备,这将导致以下 usb-id 布局

Note注意
 

在以下解释和示例中,我使用辅助(集成)集线器上的第一个设备作为键盘设备,因为我的键盘在内部连接到集成集线器的第 1 个端口。 我假设这适用于大多数带有集成集线器的键盘,但如果您拥有的键盘使用不同的端口,则您需要进行小的调整。

基于此,我们可以将连接到指定 USB 端口的所有设备绑定到给定的 X 服务器。

5.4.1. ... 使用 Input Agent

一个针对 4 用户系统使用 "Phys" 描述符与 Input Agent 和 USB 输入设备的示例。

Note注意
 

这里 USB 控制器的 PCI 功能被 *.* 屏蔽,因此它应该在 Backstreet Ruby 和 Ruby-2.6 下都能工作。 如果您使用多个 USB 控制器,则必须使用不同的掩码(例如 "usb-0*:xx.x-...")或指定完整的 PHYS_ID:。

对于 Backstreet Ruby,您应该具有 PHYS_ID "usb-00:xx.x-..."

对于 Ruby-2.6,您应该具有 PHYS_ID "usb-0000:00:xx.x-...."

我们将在启动 X 时使用 "vt[n]" 参数,以及以下键盘的配置文件(/etc/hotplug/kbd.conf ):

#
# keyboard configuration
#
# vt_name device_physicaly_location

VT0	usb-*.*-1.1.1/input0
VT1	usb-*.*-1.2.1/input0
VT2	usb-*.*-1.3.1/input0
VT3	usb-*.*-1.4.1/input0
      

对于鼠标设备,配置文件(/etc/hotplug/mouse.conf)将如下所示

#
# mouse device configuration
#
# sym_link device_physicaly_location
mouse0br	usb-*.*-1.1.2/input0
mouse1br	usb-*.*-1.2.2/input0
mouse2br	usb-*.*-1.3.2/input0
mouse3br	usb-*.*-1.4.2/input0
        

并且我们必须调整 XFree 配置文件,以便 XFree 使用符号链接而不是实际设备。 如果您已经配置了独立的鼠标,您只需将 "br" 附加到每个鼠标设备。

将每个 "/dev/input/mouse[n]" 更改为 "/dev/input/mouse[n]br"

对于第一个显示器

......
# **********************************************************************
# Pointer section
# **********************************************************************

Section "InputDevice"

    Identifier  "Mouse1"
    Driver      "mouse"
    Option "Protocol"    "IMPS/2"
    Option "Device"      "/dev/input/mouse0br"
    Option "ZAxisMapping" "4 5"

# ChordMiddle is an option for some 3-button Logitech mice
    Option "Emulate3Buttons"
#    Option "ChordMiddle"

EndSection
......
      

对于第二个显示器

......
# **********************************************************************
# Pointer section
# **********************************************************************

Section "InputDevice"

    Identifier  "Mouse1"
    Driver      "mouse"
    Option "Protocol"    "IMPS/2"
    Option "Device"      "/dev/input/mouse1br"
    Option "ZAxisMapping" "4 5"

# ChordMiddle is an option for some 3-button Logitech mice
    Option "Emulate3Buttons"
#    Option "ChordMiddle"

EndSection
......
      

等等。

或者在使用单个 XFree 配置文件的情况下

......
# **********************************************************************
# Pointer section
# **********************************************************************

Section "InputDevice"

    Identifier  "Mouse1"
    Driver      "mouse"
    Option "Protocol"    "IMPS/2"
    Option "Device"      "/dev/input/mouse0br"
    Option "ZAxisMapping" "4 5"

# ChordMiddle is an option for some 3-button Logitech mice
    Option "Emulate3Buttons"
#    Option "ChordMiddle"

EndSection
Section "InputDevice"

    Identifier  "Mouse2"
    Driver      "mouse"
    Option "Protocol"    "IMPS/2"
    Option "Device"      "/dev/input/mouse1br"
    Option "ZAxisMapping" "4 5"

# ChordMiddle is an option for some 3-button Logitech mice
    Option "Emulate3Buttons"
#    Option "ChordMiddle"

EndSection
......
      

5.4.2. ... 使用支持事件接口的 XFree

使用支持事件设备的 XFree 的 "Dev Phys" 选项和 USB 输入设备使我们能够为所有 X 服务器使用几乎相同的输入设备配置。 唯一的区别将是 usb-id 的一部分,它反映了主 USB 集线器的端口。

Note注意
 

以下示例适用于多个 XFree 配置文件,如果您使用单个 XFree 配置文件,则必须调整标识符。

第一个显示器的输入设备配置看起来像这样

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "kbd"
    Option      "Protocol"      "evdev"
    Option      "Dev Phys"      "usb-*-1.1.1/input0"
    Option      "AutoRepeat"    "250 30"
    Option      "XkbRules"      "xfree86"
    Option      "XkbModel"      "pc101"
    Option      "XkbLayout"     "dvorak"
EndSection
Section "InputDevice"
    Identifier  "Mouse1"
    Driver      "mouse"
    Option      "Protocol"      "evdev"
    Option      "Dev Phys"      "usb-*-1.1.2/input0"
    Option      "ZAxisMapping"  "4 5"
EndSection

第二个显示器的配置像这样

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "kbd"
    Option      "Protocol"      "evdev"
    Option      "Dev Phys"      "usb-*-1.2.1/input0"
    Option      "AutoRepeat"    "250 30"
    Option      "XkbRules"      "xfree86"
    Option      "XkbModel"      "pc101"
    Option      "XkbLayout"     "dvorak"
EndSection
Section "InputDevice"
    Identifier  "Mouse1"
    Driver      "mouse"
    Option      "Protocol"      "evdev"
    Option      "Dev Phys"      "usb-*-1.2.2/input0"
    Option      "ZAxisMapping"  "4 5"
EndSection

第三个显示器的配置像这样

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "kbd"
    Option      "Protocol"      "evdev"
    Option      "Dev Phys"      "usb-*-1.3.1/input0"
    Option      "AutoRepeat"    "250 30"
    Option      "XkbRules"      "xfree86"
    Option      "XkbModel"      "pc101"
    Option      "XkbLayout"     "dvorak"
EndSection
Section "InputDevice"
    Identifier  "Mouse1"
    Driver      "mouse"
    Option      "Protocol"      "evdev"
    Option      "Dev Phys"      "usb-*-1.3.2/input0"
    Option      "ZAxisMapping"  "4 5"
EndSection

等等。

您也可以使用 "?",这样无论您将主集线器插在哪里,所有显示器仍将具有所需的配置。

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "kbd"
    Option      "Protocol"      "evdev"
    Option      "Dev Phys"      "usb-*-?.1.1/input0"
    Option      "AutoRepeat"    "250 30"
    Option      "XkbRules"      "xfree86"
    Option      "XkbModel"      "pc101"
    Option      "XkbLayout"     "dvorak"
EndSection
Section "InputDevice"
    Identifier  "Mouse1"
    Driver      "mouse"
    Option      "Protocol"      "evdev"
    Option      "Dev Phys"      "usb-*-?.1.2/input0"
    Option      "ZAxisMapping"  "4 5"
EndSection