哪个驱动程序在处理我的触摸板?

ban*_*nuy 27 linux drivers touchpad

我想知道如何确定哪个驱动程序(以下驱动程序之外)正在处理我的触摸板:

appletouch.ko.gz, 
cyapa.ko.gz, 
sermouse.ko.gz, 
synaptics_usb.ko.gz, 
bcm5974.ko.gz, 
psmouse.ko.gz, 
synaptics_i2c.ko.gz, 
vsxxxaa.ko.gz
Run Code Online (Sandbox Code Playgroud)

slm*_*slm 40

很可能他们都没有这样做。例如,在我使用 Fedora 19 和带有 Synaptic 触摸板的 Thinkpad 410 的系统上,我也没有内核驱动程序。

$ lsmod|grep -iE "apple|cyapa|sermouse|synap|psmouse|vsxx|bcm"
Run Code Online (Sandbox Code Playgroud)

那么,如何处理这个设备呢?那么它实际上是这个内核模块:

$ lsmod|grep -iE "input"
uinput                 17672  0 
Run Code Online (Sandbox Code Playgroud)

如果您想了解有关此模块的更多信息,可以使用modinfo uinput

$ modinfo uinput
filename:       /lib/modules/3.13.11-100.fc19.x86_64/kernel/drivers/input/misc/uinput.ko
version:        0.3
license:        GPL
description:    User level driver support for input subsystem
author:         Aristeu Sergio Rozanski Filho
alias:          devname:uinput
alias:          char-major-10-223
...
Run Code Online (Sandbox Code Playgroud)

事实证明,诸如此类的输入设备通常在更高级别处理,在这种情况下,实际驱动程序是在 X11 级别实现的。

uinput 是一个 linux 内核模块,它允许处理来自用户空间的输入子系统。它可用于从应用程序创建和处理输入设备。它在 /dev/input 目录中创建一个字符设备。该设备是一个虚拟接口,它不属于物理设备。

来源: uinput 入门:用户级输入子系统

那么我的触摸板驱动程序在哪里?

它们在 X11 的子系统中。您可以使用xinput --list命令查看设备。例如,这是我的 Thinkpad 笔记本电脑上的设备:

$ xinput --list 
? Virtual core pointer                      id=2    [master pointer  (3)]
?   ? Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
?   ? Logitech USB Receiver                     id=9    [slave  pointer  (2)]
?   ? Logitech USB Receiver                     id=10   [slave  pointer  (2)]
?   ? SynPS/2 Synaptics TouchPad                id=12   [slave  pointer  (2)]
?   ? TPPS/2 IBM TrackPoint                     id=13   [slave  pointer  (2)]
? Virtual core keyboard                     id=3    [master keyboard (2)]
    ? Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ? Power Button                              id=6    [slave  keyboard (3)]
    ? Video Bus                                 id=7    [slave  keyboard (3)]
    ? Sleep Button                              id=8    [slave  keyboard (3)]
    ? AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]
    ? ThinkPad Extra Buttons                    id=14   [slave  keyboard (3)]
Run Code Online (Sandbox Code Playgroud)

请注意,我的触摸板显示在此列表中。您可以通过 了解有关这些设备的其他信息/proc,例如:

$ cat /proc/bus/input/devices 
...
I: Bus=0011 Vendor=0002 Product=0007 Version=01b1
N: Name="SynPS/2 Synaptics TouchPad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input5
U: Uniq=
H: Handlers=mouse0 event4 
B: PROP=9
B: EV=b
B: KEY=6420 30000 0 0 0 0
B: ABS=260800011000003
...
Run Code Online (Sandbox Code Playgroud)

好的,但是司机呢?

如果您的系统使用的是 Synaptic 触摸板(我相信它们占所有触摸板的 90%),则进行更深入的挖掘,您可以执行locate synaptics | grep xorg以下操作:

$ locate synaptics | grep xorg
/usr/lib64/xorg/modules/input/synaptics_drv.so
/usr/share/X11/xorg.conf.d/50-synaptics.conf
/usr/share/doc/xorg-x11-drv-synaptics-1.7.1
/usr/share/doc/xorg-x11-drv-synaptics-1.7.1/COPYING
/usr/share/doc/xorg-x11-drv-synaptics-1.7.1/README
Run Code Online (Sandbox Code Playgroud)

第一个结果是您要询问的实际驱动程序。它通过这里的第二个文件加载到 X.org:

Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
EndSection
Run Code Online (Sandbox Code Playgroud)

而这一行:

        MatchDevicePath "/dev/input/event*"
Run Code Online (Sandbox Code Playgroud)

是将物理设备与此驱动程序相关联的内容。你可能会问自己,这家伙怎么能这么肯定?使用此命令显示与我之前显示id=12xinput --list输出中的给定 Synaptic TouchPad 关联的设备:

$ xinput --list-props 12 | grep "Device Node"
    Device Node (251):  "/dev/input/event4"
Run Code Online (Sandbox Code Playgroud)


小智 5

$ cat /var/log/Xorg.0.log | grep "input driver"
Run Code Online (Sandbox Code Playgroud)

在我的笔记本电脑上显示:

...
[     9.054] (II) Using input driver 'synaptics' for 'Elan Touchpad'
...
Run Code Online (Sandbox Code Playgroud)

  • 不要使用`cat | grep ` 因为您可以直接在文件上使用 `grep` ,跳过 `cat` 命令。 (2认同)