Menú principal

Fedora 16, resolver problema con trackpad en Dell Latitude E6420

25 Nov
Published by carlos.garcia in

Tags 

GNU/Linux, Fedora

Mi sistema

Dell Latitude E6420 
Fedora 16 x86_64
kernel 3.1.2-1.fc16.x86_64

El problema

El sistema reconoce el trackpad como un mouse PS/2 Genérico, por lo tanto no tenemos scroll vertical y las opciones de configuración del ratón no tienen una pestaña "Touchpad". 
$ synclient
Couldn't find synaptics properties. No synaptics driver loaded?
$ less /proc/bus/input/devices
...
I: Bus=0011 Vendor=0002 Product=0001 Version=0000
N: Name="PS/2 Generic Mouse"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input6
U: Uniq=
H: Handlers=mouse1 event6
B: PROP=0
B: EV=7
B: KEY=70000 0 0 0 0
B: REL=3
...
Al parecer la causa de esto es la falta de soporte para los trackpads de la compañia Alps.
 

La Solución

La gente de Canonical ha liberado un parche para ubuntu el cual agrega el soporte para el trackpad, el problema es que fedora trae el driver del mouse integrado en el kernel y no como un módulo, por lo cual si queremos solucionar este problema tendremos que recompilar el kernel aplicando los parches necesarios.
 
Recompilar el kernel aplicando los patches liberados por canonical.
 

Prerequisitos

1. Ver que se tengan instalados los paquetes necesarios
 
$sudo yum install rpmdevtools yum-utils
 
2. Ejecutar el comando 
 
$rpmdev-setuptree
 
El cual nos crea un entorno dentro de nuestro home para poder realizar la compilación de paquetes rpms, esto nos permite generar rpms personalizados de los paquetes que necesitemos. En nuestro home nos crea un directorio rpmbuild el cual contiene la siguiente estructura
${HOME}/rpmbuild/SOURCES  <- Código fuente de los paquetes
${HOME}/rpmbuild/SPECS    <- Especificaciones de compilación
${HOME}/rpmbuild/BUILD    <- Para realizar el build de los rpms
${HOME}/rpmbuild/RPM      <- Aquí se colocan los paquetes finales una vez que concluye la compilación
 
Compilando el kernel personalizado
1. Primero se tienen que obtener los fuentes del kernel
 
$ yumdownloader --source kernel
 
Esto nos descarga un paquete de fuentes de nombre kernel-<version>.src.rpm, donde <version> es la versión del kernel en mi caso <version> = 3.1.2-1.fc16 por lo tanto el archivo se llama kernel-3.1.2-1.fc16.src.rpm 
 
2. Instalar las dependencias necesarias para compilar el kernel. Para ejecutar este comando se requieren privilegios de administrador.
 
$ sudo yum-builddep kernel-3.1.2-1.fc16.src.rpm
 
3. Instalar el paquete .src.rpm
 
$ rpm -Uvh kernel-3.1.2-1.fc16.src.rpm
 
Ignorar advertencias 
 
...
advertencia:usuario mockbuild no existe - utilizando root
advertencia:grupo mockbuild no existe - utilizando root
...
 
4. Preparar el árbol del código fuente del kernel con los siguientes comandos:
 
$ cd ~/rpmbuild/SPECS
$ rpmbuild -bp --target=$(uname -m) kernel.spec
 
5. Descargar los parches necesarios y colocarlos en el directorio ~/rpmbuild/SOURCES, en mi caso usé los 8 parches que se encuentran en http://people.canonical.com/~sforshee/alps-touchpad/psmouse-alps-0.10/
 
6. Cambiamos al directorio SPECS 
 
$ cd ~/rpmbuild/SPECS
 
7. Editamos el archivo kernel.spec
 
8. Lo primero será colocar un buildid personalizado para reconocer que es un kernel personalizado.
Cambiamos esta línea:
 
# % define buildid .local
 
Por una como esta, donde .local se cambia por el nombre que queramos, en mi caso la dejé como:
 
%define buildid .bz590880
 
Por el número de bug que resuelve.
 
9. En el mismo archivo, agregar los parches en la sección # Standalone patches
 
# Standalone patches
...
#Para la detección del touchpad
Patch91: 0001-Input-ALPS-Move-protocol-information-to-Documentatio.patch
Patch92: 0002-Input-psmouse-Add-PSMOUSE_CMD_RESET_WRAP.patch
Patch93: 0003-Input-ALPS-Add-protocol-version-field-in-alps_model_.patch
Patch94: 0004-Input-ALPS-Remove-assumptions-about-packet-size.patch
Patch95: 0005-Input-ALPS-Add-support-for-protocol-versions-3-and-4.patch
Patch96: 0006-Input-ALPS-Add-semi-MT-support-for-v3-protocol.patch
Patch97: 0007-Input-ALPS-Add-documentation-for-protocol-versions-3.patch
Patch98: 0008-Input-ALPS-dump-raw-packet-data.patch
...
Patch100: taint-vbox.patch
 
10. Después agregar las isntrucciones para aplicar dichos parches. En la sección  # Architecture patches, agregar
 
# Architecture patches
# x86(-64)
ApplyPatch 0001-Input-ALPS-Move-protocol-information-to-Documentatio.patch
ApplyPatch 0002-Input-psmouse-Add-PSMOUSE_CMD_RESET_WRAP.patch
ApplyPatch 0003-Input-ALPS-Add-protocol-version-field-in-alps_model_.patch
ApplyPatch 0004-Input-ALPS-Remove-assumptions-about-packet-size.patch
ApplyPatch 0005-Input-ALPS-Add-support-for-protocol-versions-3-and-4.patch
ApplyPatch 0006-Input-ALPS-Add-semi-MT-support-for-v3-protocol.patch
ApplyPatch 0007-Input-ALPS-Add-documentation-for-protocol-versions-3.patch
ApplyPatch 0008-Input-ALPS-dump-raw-packet-data.patch
...
 
11. Compilar el kernel con la siguiente línea:
 
$ rpmbuild -bb --with baseonly --without debuginfo --target=`uname -m` kernel.spec
 
12. Cuando termine, los paquetes generados se encontrarán en el directorio ~/rpmbuild/RPMS, instalamos el nuevo kernel
 
$ cd ~/rpmbuild/RPMS
$ sudo rpm -ivh --force kernel-*
 
13. Una vez instalado el kernel hay que actualizar la lista de SOs en el grub.
 
$sudo grub2-mkconfig -o /boot/grub2/grub.cfg
 
14. Ponemos que sea la selección por default, para esto revisamos que nombre le dió en /boot/grub2/grub.cfg
$sudo less /boot/grub2/grub.cfg
...
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Fedora Linux, with Linux 3.1.2-1.bz590880.fc16.x86_64' --class ...
load_video
...
 
En donde vemos que el nombre es 'Fedora Linux, with Linux 3.1.2-1.bz590880.fc16.x86_64'
 
para hacerlo default hacemos:
 
$ sudo grub2-set-default 'Fedora Linux, with Linux 3.1.2-1.bz590880.fc16.x86_64'
 
Y revisamos que sea el default con:
 
$ sudo grub2-editenv list
saved_entry=Fedora Linux, with Linux 3.1.2-1.bz590880.fc16.x86_64
 
15. Reiniciamos y vemos que el grub ya selecciona por default nuestro custom kernel :D, el trackpad ya debería estar funcionando.
Vemos que synclient nos muestra los parámetros del touchpad
$ synclient
Parameter settings:
LeftEdge = 300
RightEdge = 1700
TopEdge = 210
BottomEdge = 1190
FingerLow = 12
FingerHigh = 15
FingerPress = 128
MaxTapTime = 180
MaxTapMove = 107
MaxDoubleTapTime = 180
SingleTapTimeout = 180
ClickTime = 100
FastTaps = 0
...
 
Y que el touchpad ya es reconocido como un touchpad del fabricante Alps
 
$ less /proc/bus/input/devices
...
I: Bus=0011 Vendor=0002 Product=0008 Version=7326
N: Name="AlpsPS/2 ALPS DualPoint TouchPad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input6
U: Uniq=
H: Handlers=mouse1 event6
B: PROP=8
B: EV=b
B: KEY=e420 70000 0 0 0 0
B: ABS=260800001000003
...
 
Ya podremos manejarlo desde Configuración -> Ratón y <<touchpad>>
 
Espero que sea de utilidad.

Fuentes