5.1. 查找真实设备

稍后我们将需要此信息,以便能够将给定的键盘/鼠标分配给给定的 X 服务器/显示器。

要查找输入设备的 PHYS ID(地址)或名称(通常与设备上标记的名称不同),您必须读取文件/proc/bus/input/devices.

这是我的

[svetljo@svetljo How-To]# cat /proc/bus/input/devices 
I: Bus=0011 Vendor=0002 Product=0002 Version=0034
N: Name="PS2++ Logitech Wheel Mouse"
P: Phys=isa0060/serio1/input0
H: Handlers=mouse0 ts0 
B: EV=7 
B: KEY=f0000 0 0 0 0 0 0 0 0 
B: REL=103 

I: Bus=0011 Vendor=0001 Product=0002 Version=ab02
N: Name="AT Set 2 keyboard"
P: Phys=isa0060/serio0/input0
H: Handlers=kbd 
B: EV=120003 
B: KEY=4 2000000 8061f9 fbc9d621 efdfffdf ffefffff ffffffff fffffffe 
B: LED=7 

I: Bus=0003 Vendor=046d Product=c303 Version=0700
N: Name="Logitech    USB Keyboard"
P: Phys=usb-00:10.1-1.1/input0
H: Handlers=kbd 
B: EV=120003 
B: KEY=10000 7f ffe00000 7ff ffbeffdf ffffffff ffffffff fffffffe 
B: LED=7 

I: Bus=0003 Vendor=046d Product=c303 Version=0700
N: Name="Logitech    USB Keyboard"
P: Phys=usb-00:10.1-1.1/input1
H: Handlers=kbd 
B: EV=100003 
B: KEY=1078 1800d100 1e0000 0 0 0 

I: Bus=0003 Vendor=05fe Product=0011 Version=0000
N: Name="Cypress Sem. PS2/USB Browser Combo Mouse"
P: Phys=usb-00:10.1-1.2/input0
H: Handlers=mouse1 ts1 
B: EV=7 
B: KEY=1f0000 0 0 0 0 0 0 0 0 
B: REL=103 

Note注意
 

  • /proc/bus/input/devices将提供除 USB 多媒体/办公键盘之外的所有设备所需的信息。

  • 对于此类 USB 多媒体/办公键盘,您将需要收集其他信息,例如借助 lsusb

  • 在 Ruby-2.6 下,对于 usb 设备,它看起来像 "usb-0000:00:10.x" 而不是 "usb-00:10.x"

因此,我的 USB 键盘有两个接口(参见 bInterfaceNumber);第一个是真正的键盘 (bInterfaceProtocol 1 Keyboard),第二个 (bInterfaceProtocol 0 None) 是附加键。 因此,真正的 USB 键盘是

.....
N: Name="Logitech    USB Keyboard"
P: Phys=usb-00:10.1-1.1/input0
H: Handlers=kbd 
.....

"P: Phys=" 字段(物理描述符/地址)由以下组成:

  1. 总线类型:"usb"

  2. USB 控制器的 PCI 功能:"00:10.1 "(对于 Ruby-2.6 为 "0000:00:10.1")

  3. USB 设备 ID:"1.1"

  4. 字符串:"/input"

  5. 接口号:"0"