lunes, 2 de abril de 2007

Fix: Configurando un mouse con mas de 3 botones y scroll con evdev

Por defecto cuando conectas un mouse por usb se usa un driver generico que tiene soporte para 3 botones mas el scroll, considerados como dos botones mas.
En mi caso, tengo un Microsoft Laser Mouse 6000 (si si, ya lo se pero es decente). Este en particular tiene 5 botones y el scroll, por lo que da un total de 7 botones. En general funciona bien con el driver generico, pero no usar los botones disponibles es un desperdicio.

Para aprovecharlos se utiliza "evdev" un driver para perifericos haciendo posible tener multiples mouses y teclados u otros dispositivos en una maquina en la misma sesion de linux o en x-servers distintos corriendo en la misma maquina con todas las teclas o eventos que pueden dar.
Estos pasos sirven para cualquier distro que utilice X.org que tenga el driver evdev.

CONFIGURACION
Nota: Recuerda hacer una copia de seguridad de /etc/X11/xorg.conf y en vez de borrar lineas, solamente comentarlas con el caracter #. Ademas es necesario editar el archivo como superusuario (su o sudo si es necesario).

Si uno se mete al archivo '/etc/X11/xorg.conf' podras buscar dentro del archivo y encontrar algo parecido a esto, esta puede varear segun como lo haya detectado linux:
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ExplorerPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection
Comenta todas las lineas (poniendo el simbolo # al inicio de cada linea) y debajo de la parte comentada ingresa esta plantilla:
Section "InputDevice"
Identifier "Configured Mouse"
Driver "evdev"
Option "Device" ""
Option "Dev Name" ""
Option "Dev Phys" ""
Option "ZAxisMapping" ""
Option "Buttons" ""
Option "Resolution" ""
Option "SendCoreEvents" "True"
EndSection
Procura mantener el nombre del identificador comentado para no tener que modificar mas lineas del xorg.conf. Todas las lineas con solo "" seran cambiadas por los siguientes datos. Aun cuando sea el mismo mouse existen distintas revisiones, asi que es necesario hacer todos los pasos. Toda la info devuelta por los comandos es para mi caso en particular y puede o no ser igual a la que responda tu distro.

Device, Dev Name y Dev Phys
Mi version abreviada de los perifericos conectados al bus para la captura de datos:
$ cat /proc/bus/input/devices
(...)
I: Bus=0003 Vendor=045e Product=00f0 Version=0101
N: Name="Microsoft Corporation Microsoft Laser Mouse 6000"
P: Phys=usb-0000:00:1d.0-2/input0
S: Sysfs=/class/input/input2
H: Handlers=mouse1 event2 ts1
B: EV=7
B: KEY=1f0000 0 0 0 0 0 0 0 0
B: REL=103
(...)
Para la opcion "Device" buscamos en la linea "H: Handlers=mouse1 event2 ts1" y nos fijamos en la parte que dice "event2". Es necesario usar la ruta completa al dispositivo y esta es "/dev/input/" por lo que la linea Device queda:
Option "Device" "/dev/input/event2"
La opcion "Dev Name" es practicamente obvia, la linea "N: Name="Microsoft Corporation Microsoft Laser Mouse 6000"".
Option "Dev Name" "Microsoft Corporation Microsoft Laser Mouse 6000"
Para la opcion "Dev Phys" usamos la linea "P: Phys=usb-0000:00:1d.0-2/input0". La opcion queda:
Option "Dev Phys" "usb-0000:00:1d.0-2/input0"

ZAxisMapping, Buttons y Resolution
Usamos una utilidad que permite ver las entradas desde cualquier periferico conectado al pc, permitiendo constatar cuantos son y que nombre tienen (el nombre puede varear despues de reiniciar xorg, asi que revisa si es necesario luego del reinicio).
La utilidad tambien captura los cambios del sensor de movimiento, asi que es mejor que levantes el mouse para evitar llenar la pantalla de info que no nos importa.
$ xev
En mi caso, conte 7 botones y el scroll es "4" hacia arriba y "5" hacia abajo. Asi que estas lineas quedan asi:
Option "ZAxisMapping" "4 5"
Option "Buttons" "7"
Y la resolucion es cosa de revisar las especificaciones del mouse. Yo pensaba que tenia un mouse de 1000 dpi, pero es solo de 800 (Micro$oft del ass):
Option "Resolution" "800"
Al final mi xorg.conf quedo algo asi:
Section "InputDevice"
Identifier "Configured Mouse"
Driver "evdev"
Option "Device" "/dev/input/event2"
Option "Dev Name" "Microsoft Corporation Microsoft Laser Mouse 6000"
Option "Dev Phys" "usb-0000:00:1d.0-2/input0"
Option "ZAxisMapping" "4 5"
Option "Buttons" "7"
Option "Resolution" "800"
Option "SendCoreEvents" "True"
EndSection
Y listo, ahora es cosa de revisar como quedaron los botones con 'xev' nuevamente y utilizarlos como mas les guste, por lo menos a mi se me ha hecho mucho mas facil la navegacion desde que los puedo usar.

miércoles, 28 de marzo de 2007

Fix: Multimedia Audio Intel 82801 ICH6 AC'97

 
Debo aclarar que este fix es solo si alguien con el mismo modelo de tarjeta no tiene sonido despues de sacarle el mute a todos los canales con la utilidad 'alsamixer'. Y solo esta confirmado en laptops parecidos, no se si se da el mismo bug en placas de desktop. Ademas, solo habilita la salida de audio y el plug de los headphones, el microfono esta todavia inservible.

El dispositivo
$ lspci
00:1e.2 Multimedia audio controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller (rev 04)

$ cat /proc/asound/card0/codec97#0/ac97#0-0
0-0/0: Conexant id 31

PCI Subsys Vendor: 0x152d
PCI Subsys Device: 0x0745

Revision : 0x00
Compat. Class : 0x00
Subsys. Vendor ID: 0x0000
Subsys. ID : 0x0000

Capabilities :
DAC resolution : 18-bit
ADC resolution : 18-bit
3D enhancement : No 3D Stereo Enhancement

Current setup
Mic gain : +20dB [+20dB]
POP path : pre 3D
Sim. stereo : off
3D enhancement : off
Loudness : off
Mono output : MIX
Mic select : Mic1
ADC/DAC loopback : off
Extended ID : codec=0 rev=2 AMAP LDAC SDAC CDAC DSA=0 SPDIF
Extended status : PRL LDAC SDAC CDAC SPDIF=10/11 SPDIF
SPDIF Control : Consumer PCM Category=0x2 Generation=1 Rate=44.1kHz
Extended modem ID: codec=0 LIN1
Modem status : PRA(GPIO) PRB(res) PRC(ADC1) PRD(DAC1) PRE(ADC2) PRF(DAC2) PRG(HADC) PRH(HDAC)
Line1 rate : 48000Hz

$ cat /proc/asound/pcm
00-04: Intel ICH - IEC958 : Intel ICH6 - IEC958 : playback 1
00-03: Intel ICH - ADC2 : Intel ICH6 - ADC2 : capture 1
00-02: Intel ICH - MIC2 ADC : Intel ICH6 - MIC2 ADC : capture 1
00-01: Intel ICH - MIC ADC : Intel ICH6 - MIC ADC : capture 1
00-00: Intel ICH : Intel ICH6 : playback 1 : capture 1
En sintesis, un dispositivo Intel ICH6 con chip Conexant Cx20468-31 codec AC'97

Pasos a seguir
Fuente: https://bugtrack.alsa-project.org/alsa-bug/view.php?id=1134
Lo primero es bajarse el source code del driver ALSA (Advanced Linux Sound Architecture. Link: http://www.alsa-project.org) Yo lo probe con la version 1.0.14rc2.
Ahora se necesita compilar con los flags necesarios para usar el driver en modo debug y para especificamente compilar solo con el driver para nuestra tarjeta: intel8x0.
Descomprime, configura, compila e instala de la siguiente manera:
$ su
# ./configure --with-debug=full --with-cards=intel8x0 --with-isapnp=no --with-sequencer=yes --with-os=yes
# make
# make install
Ahora sacale el mute a todos los canales:
# alsamixer
En la misma consola como superusuario:
# echo 5c 0001 > '/proc/asound/card0/codec97#0/ac97#0-0+regs'
Si todo resulto bien, ya tienes sonido.

Ahora solo falta el script de booteo:
# nano /etc/init.d/intel8x0.sh
Copia las siguientes lineas:
#!/bin/sh -e
/bin/echo 5c 0001 > '/proc/asound/card0/codec97#0/ac97#0-0+regs'
exit 0
Ahora dale permisos de ejecucion y un update para publicar el script:
# chmod +x /etc/init.d/intel8x0.sh
# update-rc.d /etc/init.d/intel8x0.sh defaults
Lista la salida de sonido, por ahora sigue siendo problema la entrada de sonido. Se reporto en el bugtrack que si es que se dispone de microfono interno funciona, pero yo dispongo solo del plug de microfono externo, asi que seguire buscando como.

lunes, 26 de marzo de 2007

Fix: Tarjeta Wireless Inprocomm IPN 2200 funcionando.


Algo importante en un laptop son las capacidades inalambricas, ya sea bluetooth, infrarrojo o 802.11 en cualquiera de sus versiones.
Lamentablemente la mayoria de las compañias no dan soporte para Linux y ni siquiera liberan las especificaciones del hardware para que gente sin animos de lucro programen drivers.

Ndiswrapper
Para ello se dio forma a Ndiswrapper, un paquete que implementa NDIS, Network Drivers Interface Specification la API de WinXP, permitiendo usar drivers nativos de WinXP en Linux.

Instalacion
Primero es necesario bajar el paquete desde Synaptics o cualquier sistema de repositorios disponibles para tu OS.
Si no esta disponible, tienes que bajar el codigo fuente, compilar e instalar (link: http://ndiswrapper.sourceforge.net).
$ su
# make uninstall
# make
# make install
Configuracion
Ahora se necesita identificar el modelo y el driver acorde. Si tienes a mano los drivers de WinXP usalos, pero si tienes unos lindos drivers empaquetados como los proporciona Packard Bell, mejor busca la otra opcion. Para esta tarjeta en particular, la lista de pci la identifica como un periferico Lynksys.
# lspci
(...)
06:03.0 Ethernet controller: Linksys, A Division of Cisco Systems [AirConn] INPROCOMM IPN 2220 Wireless LAN Adapter (rev 01)
(...)
Baje los drivers desde Linksys. Es enorme el sitio asi que hay que tomarse su tiempo y buscar bien, les aseguro que los baje desde ahi. Ahora hay que descomprimirlo y seguir los siguientes pasos, el nombre del dispositivo o los archivos pueden variar.
# ndiswrapper -i WLIPNDS.INF
Revisar si se instalo y se detecta el hardware:
# ndiswrapper -l
wlipnds : driver installed
                                    device (17FE:2220) present
# ndiswrapper -m
# modprobe ndiswrapper
Ahora, si estas en Ubuntu, la forma mas facil de configurar ndiswrapper es irse a 'Sistema>Administracion>Red' y configurar la interface inalambrica que ahora se muestra en la lista.



La otra es crear un script con las siguientes lineas:
/sbin/modprobe ndiswrapper
exit 0
Guardarlo en '/etc/init.d/ndiswrapper'. Ademas hay que darle permisos de ejecucion y hacer un update para su posterior carga cada vez que se inicie el sistema.
# chmod +x /etc/init.d/ndiswrapper
# update-rc.d /etc/init.d/ndiswrapper defaults
La forma de conectarse a las redes ya depende de que programa usen para administrarlas. Yo uso el NetworkManager y es raro, a veces funciona, otras veces no. Tengo que buscar uno mejor.

sábado, 24 de marzo de 2007

Fix: Usando resoluciones WXGA con la tarjeta de video Intel 915GM

Lo mas molesto de tener un laptop que tiene un panel plano con proporciones WXGA es no poder usarlo con esa resoluciones.
El panel nos proporciona una resolucion nativa de 1280x768 a 24 bpp y seria tonto no tratar de sacarle el maximo provecho y para ello existe '915resolution'.

El paquete 915resolution permite hacer un hack temporal a la BIOS de video, la fuente de todos los problemas. En WinXP no pasa esto, porque simplemente ese sistema demoniaco hace caso omiso de la informacion de la BIOS, pudiendo acarrear problemas directos en el hardware, aunque todos sabemos que Micro$oft no se precia de ser seguro, solo facil y muy caro.

Instalacion y configuracion en Ubuntu 6.10 Edgy Eft:
Me lleve una gran sorpresa viendo que el paquete esta disponible en los repositorios oficiales de Ubuntu, ademas que al momento de bajar e instalar el paquete, se configura automaticamente todo: el reemplazo de ciertos modos, la configuracion del xorg.conf e incluso el script de booteo para que se ejecute cada vez que se inicie el sistema.

Instalacion y configuracion en cualquier otra distro:
Si es que no estas en Ubuntu o no encuentras los paquetes en los repositorios o en alguna distro o cualquier eventualidad desde catastrofes mundiales a invasiones intergalacticas, hay que compilar, instalar y configurar todo por consola.

Primero, bajar el codigo fuente de la pagina del autor del paquete (link: http://www.geocities.com/stomljen/)
Ahora descomprime en una carpeta el codigo fuente, abre un terminal, ingresa como superusuario, compila e instala el paquete:
$ su
# make
# make install
Ahora de la misma terminal listamos los modos, elegimos uno de ellos que nunca usemos y lo reemplazamos con la resolucion deseada usando el formato '915resolution '. Yo reemplace el modo 5c.
# 915resolution -l
# 915resolution 5c 1280 768 24
El siguiente paso editar el archivo de configuracion de X.org ubicado en '/etc/X11/xorg.conf'.

Usando cualquier editor, hay que buscar la configuracion del monitor y reemplazar las resoluciones por las validas. En mi caso fue un tanto extremista, pero se eliminaron todas las resoluciones y solamente se dejo la nativa.

Parte de mi xorg.conf que modifique:
Section "Screen"
    Identifier "Default Screen"
    Device "Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller"
    Monitor "Monitor genérico"
    DefaultDepth 24
    SubSection "Display"
        Depth 1
        Modes "1280x768"
    EndSubSection
    SubSection "Display"
        Depth 4
        Modes "1280x768"
    EndSubSection
    SubSection "Display"
        Depth 8
        Modes "1280x768"
    EndSubSection
    SubSection "Display"
        Depth 15
        Modes "1280x768"
    EndSubSection
    SubSection "Display"
        Depth 16
        Modes "1280x768"
    EndSubSection
    SubSection "Display"
        Depth 24
        Modes "1280x768"
    EndSubSection
EndSection
NOTA: Recuerda hacer un backup por cualquier problema que se presente.

Y para terminar, usando un editor cualquiera, yo use 'nano':
# nano /etc/init.d/915resolution
Ingresando las 3 lineas siguientes:
    #!/bin/sh -e
    /usr/sbin/915resolution 1280 768 24
    exit 0
Ahora desde consola se le dan permisos de ejecucion y se notifica al sistema.
# chmod +x /etc/init.d/915resolution
# update-rc.d /etc/init.d/915resolution
Y listo, el sistema ya esta parchado para la resolucion nativa, ahora basta con Ctrl+Alt+Backspace para reinicir el entorno grafico o reiniciar si es necesario.

viernes, 23 de marzo de 2007

Activar la cuenta root para evitar el sudo

Personalmente ya estoy harto de escribir sudo, asi que aqui hay una forma de loguearse como superusuario:

Abre un terminal y escribe:
$ sudo -u root passwd
Ahi se preguntara la nueva clave que se quiere ocupar y su confirmacion.
Ahora cada vez que se necesite puedes loguearte como superusuario y evitar escribir el bendito sudo antes de cada comando que necesita privilegios solo escribiendo tu clave una sola vez usando.
$ su
Fuente: http://www.ubuntu-es.org/index.php?q=node/357

Tutorial: Como configurar la Tarjeta de Red para conectarse a Internet

Algo que pase por alto es como configurar la tarjeta de red para conectarse a internet, algo esencial si es que usas una distribucion Ubuntu, en donde un cd no siempre contiene todo lo necesario para que un sistema este completo ademas de las actualizaciones.

Hay 2 escenarios posibles:
- Que estes conectado a un router o gateway.
- Que estes conectado a un modem ADSL directamente, por lo que es necesario configurar una cuenta PPPoE.

Conectado a un router o gateway:
Si el router o gateway esta con DHCP, solo hay que configurar la tarjeta con DHCP.

Yendo a 'Sistema>Administracion>Red' configuras tu tarjeta de red para usar el DHCP en las propiedades de tu dispositivo:

Si el router no tiene DHCP o simplemente se quiere tener una direccion ip fija, se necesita poner los valores manualmente:

Conectado a un modem ADSL directamente:
Si este es el caso, se necesita configurar una cuenta PPPoE. Usando la terminal ejecutas el asistente:
$ sudo pppoeconf

Siguiendo los pasos, se hara una autodeteccion para buscar el concentrador u/o modem, puedes leer las recomendacion o incluso puedes usar el querido 'siguiente, siguiente, siguiente' de WinXP. En algun momento te pedira el nombre de usuario de la cuenta y luego la contraseña. Eso ya es responsabilidad de cada uno saber su nombre y contraseña, si es necesario se puede pedir a tu ISP.
Al finalizar ya esta lista y configurada.

Ahora tienes acceso a los siguientes comandos:
pon dsl-provider: Proceso de marcacion y autentificacion de la cuenta PPPoE.
poff -a: Proceso que termina todas la conexiones PPP iniciadas.
plog: Log de eventos de las interfaces PPP.

Ahora estas listo para actualizar y navegar sin ningun problema.

Paquetes necesarios para compilar codigo fuente

En lo que peca Ubuntu es en pensar mucho en los denominados seres humanos, pero solo los que se valen de los repositorios oficiales. Hay ciertas aplicaciones que no estan dentro de los repositorios y que solo te dan el codigo fuente.
En estos casos se hacen imprescindibles los paquetes necesarios para compilar ademas de los headers del kernel.
Siguiendo estos pasos se tendran todos los paquetes y algunas reglas generales para la compilacion de codigo.

Identificando tu kernel para bajar los headers de los repositorios.
$ uname -a
Linux midas 2.6.17-11-386 #2 Thu Feb 1 19:50:13 UTC 2007 i686 GNU/Linux

Ahora usando Synaptic hay que buscar 'linux headers' y buscando la version del kernel, en mi caso 2.6.17.11-386, pongo para descargar e instalar el paquete 'linux-headers-2.6.17-11-386' con sus dependencias.

Con esto ya tenemos el codigo, ahora necesitamos los demas paquetes de compilacion.
En Synaptic buscamos 'build essential' y lo seleccionamos para su descarga e instalacion. Con esto ya tendremos todas las herramientas basicas para la compilacion de codigo fuente.

Algunas reglas basicas para la compilacion de codigo fuente:
- Siempre lee el README y el INSTALL adjunto con el codigo fuente. Cuando compilas manualmente no se resuelven las dependencias, asi que asegurate de tener los paquetes necesarios para la compilacion.
- Evita usar rutas con espacios en blanco, reemplazalas por '_' si fuera necesario. La razon es que algunas veces el compilador se marea con los espacios en blanco y da errores que evitan la compilacion.
- Algunas veces es mucho mejor bajarse el codigo fuente que usar los paquetes precompilados. La compilacion in-situ asegura el mayor rendimiento en tu sistema.
- Y sobre todo, LEER e INVESTIGAR es lo mas importante. Personalmente me molesta la gente que no le resultan las cosas y de flojo empieza a preguntar.