Linux

哪個驅動程序在處理我的觸摸板?

  • May 6, 2021

我想知道如何確定哪個驅動程序(以下驅動程序)正在處理我的觸摸板:

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

很可能他們都沒有這樣做。例如,在我使用 Fedora 19 和帶有 Synaptic 觸摸板的 Thinkpad 410 的系統上,我也沒有核心驅動程序。

$ lsmod|grep -iE "apple|cyapa|sermouse|synap|psmouse|vsxx|bcm"

那麼是什麼在照顧這個設備呢?那麼它實際上是這個核心模組:

$ lsmod|grep -iE "input"
uinput                 17672  0 

如果您想了解有關此模組的更多資訊,可以使用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
...

事實證明,此類輸入設備通常在更高級別處理,在這種情況下,實際驅動程序是在 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)]

請注意,我的觸摸板出現在此列表中。您可以通過 找到有關這些設備的其他資訊/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
...

好的,但是司機在哪裡?

如果您的系統使用的是 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

第一個結果是您要詢問的實際驅動程序。它通過這裡的第二個文件載入到 X.org 中:

Section "InputClass"
       Identifier "touchpad catchall"
       Driver "synaptics"
       MatchIsTouchpad "on"
       MatchDevicePath "/dev/input/event*"
EndSection

而這一行:

       MatchDevicePath "/dev/input/event*"

是將物理設備與此驅動程序相關聯的原因。你可能會問自己,這傢伙怎麼能這麼肯定?使用此命令顯示與我之前顯示id=12xinput --list輸出中的給定 Synaptic TouchPad 關聯的設備:

$ xinput --list-props 12 | grep "Device Node"
   Device Node (251):  "/dev/input/event4"

引用自:https://unix.stackexchange.com/questions/131432