Chciałbym wiedzieć, jak ustalić, który sterownik (spośród poniższych) obsługuje mój 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
Chciałbym wiedzieć, jak ustalić, który sterownik (spośród poniższych) obsługuje mój 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
Odpowiedzi:
Prawdopodobnie żaden z nich tego nie robi. Na przykład w moim systemie, w którym korzystam z Fedory 19 i Thinkpad 410 z touchpadem Synaptic, nie mam również sterownika jądra.
$ lsmod|grep -iE "apple|cyapa|sermouse|synap|psmouse|vsxx|bcm"
Więc co dba o to urządzenie? To właściwie ten moduł jądra:
$ lsmod|grep -iE "input"
uinput 17672 0
Jeśli chcesz dowiedzieć się więcej o tym module, możesz użyć 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
...
Jak się okazuje, urządzenia wejściowe takie jak te są często traktowane na wyższym poziomie, w tym przypadku rzeczywiste sterowniki są implementowane na poziomie X11.
uinput to moduł jądra systemu Linux, który pozwala obsługiwać podsystem wejściowy z poziomu użytkownika. Można go używać do tworzenia i obsługi urządzeń wejściowych z aplikacji. Tworzy urządzenie znakowe w katalogu / dev / input. Urządzenie to interfejs wirtualny, nie należy do fizycznego urządzenia.
ŹRÓDŁO: Pierwsze kroki z uinput: podsystem wprowadzania na poziomie użytkownika
Są w podsystemie X11. Możesz zobaczyć urządzenie za pomocą xinput --list
polecenia. Oto na przykład urządzenia na moim laptopie 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)]
Zauważ, że mój TouchPad pojawia się na tej liście. Możesz znaleźć dodatkowe informacje o tych urządzeniach /proc
, na przykład:
$ 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
...
Kopiąc głębiej, jeśli Twój system korzysta z touchpada Synaptic (który, jak sądzę, stanowi ~ 90% wszystkich touchpadów), możesz zrobić, locate synaptics | grep xorg
co powinno ujawnić następujące pliki:
$ 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
Pierwsze wyniki to rzeczywisty sterownik, o który pytasz. Zostaje załadowany do X.org poprzez drugi plik tutaj:
Section "InputClass"
Identifier "touchpad catchall"
Driver "synaptics"
MatchIsTouchpad "on"
MatchDevicePath "/dev/input/event*"
EndSection
I ta linia:
MatchDevicePath "/dev/input/event*"
To, co kojarzy urządzenia fizyczne z tym sterownikiem. I prawdopodobnie zadajesz sobie pytanie, jak ten facet może być taki pewien? Za pomocą tego polecenia pokazuje urządzenie związane z moim danego Synaptic TouchPad używając id=12
z xinput --list
wyjściem pokazałem wcześniej:
$ xinput --list-props 12 | grep "Device Node"
Device Node (251): "/dev/input/event4"
journalctl -b 0
a potem touchpad
szukałem i mam tę linię (**) bcm5974: Applying InputClass "evdev touchpad catchall"
. Tak więc wiem, że bcm5974
jest sterownik urządzenia
uinput
moduł jądra (sterownik). Co nie jest jasne w tym stwierdzeniu?
uinput
moduł nie jest związany z urządzeniami sprzętowymi; podanie poprawnych informacji zależy od sterowników sprzętowych, a następnie uinput zapewnia ujednolicony interfejs wejściowy dla obszaru użytkownika. Oprogramowanie użytkownika, w tym przypadku sterownik synaptics xorg, może łączyć xorg z jądrem (i dane wejściowe użytkownika pośrednio) za pomocą uinput. Popraw mnie, jeśli się mylę, ponieważ nie jestem ekspertem w tej dziedzinie.
hid_multitouch
do swojej listy. Myślę, że to właśnie zarządza touchpadem w moim Dell Precision i nie mam uinput
załadowanego modułu.
$ cat /var/log/Xorg.0.log | grep "input driver"
Na moim laptopie pokazuje:
...
[ 9.054] (II) Using input driver 'synaptics' for 'Elan Touchpad'
...
cat | grep
ponieważ możesz bezpośrednio używać grep
do plików pomijając cat
polecenie.
grep -e "input driver" /var/log/Xorg.0.log
journalctl -u display-manager | grep "input driver"
i xinput --list
pomógł mi zorientować się, że muszę włączyć opcję jądra „Elantech” podczas ponownej kompilacji jądra.
lsmod
i sprawdź, który z tych sterowników jest załadowany. Możesz także przeczytać swoją/var/log/Xorg.0.log
.