Linux
哪個驅動程序在處理我的觸摸板?
我想知道如何確定哪個驅動程序(以下驅動程序)正在處理我的觸摸板:
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 目錄中創建一個字元設備。該設備是一個虛擬介面,它不屬於物理設備。
那麼我的觸摸板驅動程序在哪裡呢?
它們在 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=12
的xinput --list
輸出中的給定 Synaptic TouchPad 關聯的設備:$ xinput --list-props 12 | grep "Device Node" Device Node (251): "/dev/input/event4"