Archivo

Entradas Etiquetadas ‘bug’

Guía de supervivencia para disfrutar de Linux Mint Debian Edition (II : Synaptics / ipw2200/cambios menores/driver NVIDIA/SMP)

Jueves, 15 de Septiembre de 2011 Gaspar Fernández Sin comentarios

Esta segunda entrega puede que a muchos no os interese mucho. Sobre todo trataré el tema de Synaptics, no confundir con el gestor de paquetes synaptic. Yo me refiero al controlador del touchpad de mi portatil. Es un touchpad algo antiguo (no multitouch), y es que, LMDE, por defecto no permite hacer click golpeando con suavidad el touchpad, ni permite hacer scroll deslizando el dedo por la parte derecha… por eso, vamos a cambiar un poco la configuración.

Configuración cómoda para el panel Synaptics

En esta versión de Xorg, que ya no se apoya en HAL para detectar dispositivos, podemos añadir múltiples ficheros de configuración.  La configuración inicial se encuentra en /usr/share/X11/xorg.conf.d/, aunque no es recomendable tocar ahí, ya que cualquier actualización podría borrar del disco nuestro trabajo; para ello, tenemos que crear el directorio /etc/X11/xorg.conf.d/ y meter ahí todos los ficheros de configuración para las X que queramos.

Crearemos pues, el archivo /etc/X11/xorg.conf.d/50-synaptics.conf (el 50 es sólo un número que establecerá el orden de carga, nada más):

Section "InputClass"
        Identifier                     "touchpad catchall"
        Driver                         "synaptics"
        MatchIsTouchpad                "on"
        Option  "Protocol"             "auto-dev"
        Option  "LeftEdge"             "1700"
        Option  "TapButton1"           "1"
        Option  "TapButton2"           "2"
        Option  "TapButton3"           "3"
        Option  "RightEdge"            "5300"
        Option  "TopEdge"              "1700"
        Option  "BottomEdge"           "4200"
        Option  "FingerLow"            "25"
        Option  "FingerHigh"           "30"
        Option  "MaxTapTime"           "180"
        Option  "MaxTapMove"           "220"
        Option  "VertScrollDelta"      "100"
        Option  "MinSpeed"             "0.66"
        Option  "MaxSpeed"             "0.92"
        Option  "AccelFactor"          "0.0010"
        Option  "SHMConfig"            "off"
        Option  "VertTwoFingerScroll"  "1"
        Option  "HorizTwoFingerScroll" "1"
        Option  "VertEdgeScroll"       "1"
        Option  "HorizEdgeScroll"      "1"
        MatchDevicePath "/dev/input/event*"
EndSection

Muchos valores son descargados de Internet, de varios foros, y otros son gracias a la investigación y tanteo. Aquí una explicación rápida de cada opción:

  • LeftEgde, RightEdge, BottomEdge, TopEdge, son los bordes, podemos jugar con estos valores para dar y quitar resolución al panel táctil.
  • FingerHigh es la presión necesaria para que el driver considere que hemos tocado el panel y FingerLow es la presión necesaria para que se considere soltado el panel.
  • MaxTapTime es el tiempo máximo de un toque al panel.
  • MaxTapMove es el movimiento máximo del dedo para que se detecte toque y no movimiento
  • VertScrollDelta, HorizScrollDelta, es lo que se tiene que mover el dedo para detectar un desplazamiento vertical u horizontal
  • MinSpeed, MaxSpeed, la máxima y mínima velocidad
  • AccelFactor, factor de aceleración
  • SHMConfig, permite configuración desde un cliente externo, además es una salida de depuración del panel synaptics.
  • VertTwoFingerScroll, HorizTwoFingerScroll, desplaza vertical y horizontalmente con dos dedos (en cualquier parte del panel)
  • VertEdgeScroll, HorizEdgeScroll, activa el desplazamiento en el borde del panel.

Para muchas más opciones, podéis consultar:

man synaptics

Arreglar desconexiones aleatorias del driver ipw2200

Los que tengáis este driver wifi lo sabréis, cuando llevas un rato conectado a una red, y no estamos haciendo nada, se cierra la conexión y perdemos la red inalámbrica. Esto es un fallo por parte de Intel, y lo encontramos en todas las distribuciones. Y es que es hardware antiguo y ya no tiene soporte apenas. El problema está en el firmware, y es que todas las distribuciones instalan la versión 3.1 cuando ésta es la que tiene el gran fallo. Volviendo a la versión 3.0 todo volverá a ir bien.

Para ello:

$ sudo apt-get remove firmware-ipw2×00

Ahora descargamos de aquí la versión 3.0 del firmware, la descomprimimos en un directorio temporal y la copiamos en /lib/firmware:

$ mkdir tmp
$ cd tmp
$ tar xvzf ipw2200-fw-3.0.tgz
$ cp ipw2200-fw-3.0/* /lib/firmware

Debería funcionar mucho mejor ahora.

Cambios menores: bug de evdev

Si por algún casual, al reiniciar el ordenador, no puedes mover ni el teclado, ni el ratón, consulta este artículo.

Cambios menores: recorrer el historial de bash con Av-pag y Re-pag

Si te gustaría tener esta característica (la cual es muy interesante para escribir mucho más rápido), consulta este artículo

Cambios menores: desactivar el altavoz interno

Este altavoz interno produce un pitido muy molesto cada vez que estamos en el terminal y nos equivocamos o damos un par de veces al tabulador para ver las posibles opciones.

Para ello editamos el archivo /etc/modprobe.d/blacklist.conf y añadimos esta línea:

blacklist pcspkr

Cambios menores: devolver la búsqueda por defecto de Google a Firefox

Apoyo LinuxMint, aunque me gusta la búsqueda tradicional de Google, y con el tema de LinuxMint pierde muchísimo, hay miles de cosas que ya no puedo hacer cuando busco. Por eso, tendremos que cambiar esto también.

Para ello, debemos descargar el fichero google.xml desde aquí y lo debemos copiar a /usr/share/linuxmint/adjustments/firefox y en /opt/firefox/searchplugins:

$ wget http://mxr.mozilla.org/firefox/source/browser/locales/en-US/searchplugins/google.xml?raw=1
$ sudo cp google.xml /usr/share/linuxmint/adjustments/firefox/
$ sudo cp google.xml /opt/firefox/searchplugins/

# Si ya teníamos instalado Linux Mint, o hemos accedido a Firefox (y por ello se ha creado un perfil), debemos también borrar search.json del directorio de nuestro perfil de Firefox (esto es un ejemplo):

$ rm ~/.mozilla/firefox/1q356xaz.default/search.json

Reiniciamos Firefox y ya está.

El audio no funciona bien

Si tienes problemas con el sonido, puede deberse a muchas cosas, normalmente la configuración que viene de fábrica es buena, pero a veces hay problemas en este sentido con algún driver que no funciona del todo bien o con algún programa que no se lleva bien con los demás.

Por ello, mi primera recomendación es instalar pavucontrol, es un control de volumen gráfico para pulseaudio, que nos permite saber qué aplicaciones están reproduciendo sonido y por qué dispositivos físicos (puede que no sea un dispositivo físico el que esté sonando), también nos permite silenciar aplicaciones y alguna cosa más.

$ sudo apt-get install pavucontrol

Si no has conseguido hacer que el sistema suene, lo mejor es visitar el foro de Linux Mint donde dan muchas pistas sobre la configuración de pulseaudio y de los módulos controladores del dispositivo. Aquí lo encontramos.

Instalar controlador binario para tarjetas NVIDIA

El controlador que viene por defecto, nouveau, no da el rendimiento máximo para tareas en 3D por ejemplo, si queremos un escritorio con efectos y todo, por lo que tendremos que instalar el controlador oficial, para ello, primero, tendremos que eliminar algunas cosas:

$ sudo apt-get remove –purge xserver-xorg-video-nouveau xserver-xorg-video-nv

Ahora tenemos que instalar el controlador de NVIDIA:

$ sudo apt-get install xserver-xorg-video-nvidia

Y tras ello, hacer que el servidor X coja el driver, para ello creamos un archivo en /etc/X11/xorg.conf.d/ que se llame por ejemplo nvidia.conf y contenga lo siguiente:

Section "Device"
    Identifier "Graficos"
    Driver     "nvidia"
EndSection

Salvamos, reiniciamos, y ya estamos utilizando el driver oficial de NVIDIA.

Atención usuarios de MultiCore!

Si habéis instalado Linux Mint Debian Edition en un ordenador cuya CPU tenga más de un núcleo, tal vez habréis visto que sólo funciona un núcleo, y es que el núcleo que viene por defecto (en la versión 32bit) sólo soporta un núcleo (herencia de Debian, y desde abril de 2011).

Lo podemos ver  desde consola haciendo:

$ cat /proc/cpuinfo

Donde veremos sólo información de una CPU. O también:

$ inxi -C

CPU:       Single core Intel Atom D510 (-UP-) cache 512 KB flags (lm nx sse sse2 sse3 ssse3) clocked at 1662.501 MHz

Donde veremos una respuesta parecida a la anterior. Aunque si profundizamos un poco, podremos ver:

$ dmesg | grep CPU

[ 0.000000] ACPI: NR_CPUS/possible_cpus limit of 1 reached. Processor 1/0×2 ignored.
[ 0.000000] ACPI: NR_CPUS/possible_cpus limit of 1 reached. Processor 2/0×1 ignored.
[ 0.000000] ACPI: NR_CPUS/possible_cpus limit of 1 reached. Processor 3/0×3 ignored.

¿ Cómo que se ignoran los procesadores ? ¿El número de cpus posible es 1 ?

Lo que tenemos que hacer es instalar otra versión del núcleo que sí soporte multiprocesador. Para ello, debemos hacer lo siguiente:

$ sudo apt-get installlinux-headers-2.6-686-pae  linux-image-2.6-686-pae

Al instalar la versión para 686 en lugar de la versión para 486 (que viene por defecto), daremos soporte también para multi-procesador. Ahora veremos:

$ inxi -C

CPU:       Dual core Intel Atom D510 (-HT-MCP-) cache 512 KB flags (lm nx sse sse2 sse3 ssse3)
Clock Speeds: (1) 1662.501 MHz (2) 1662.501 MHz (3) 1662.501 MHz (4) 1662.501 MHz

Solución temporal al problema con udev 171

Jueves, 8 de Septiembre de 2011 Gaspar Fernández Sin comentarios

Desde Mayo de 2011 tenemos a nuestra disposición una de las versiones con más bugs de udev, este gestor de dispositivos de Linux. En concreto, el bug del que hablo está apareciendo desde Julio/Agosto de este año. La forma de reproducirlo es muy fácil, tenemos que tener el servidor X con la configuración automática (en muchas distribuciones) o utilizando dispositivos de eventos, desde el arranque, ni el teclado ni el ratón funcionan.

tecladosLa primera vez que me pasó pensé en el servidor X, de hecho, como no funcionaba el teclado, no se podía cambiar a consola con Ctrl+Alt+Fn (n=1,2,3,4,….) ; por lo que fue necesario pulsar Alt+Sysrq+R antes de poder cambiar a la consola con Alt+Fn.

Dicho esto, había que trastear un poco, y es que la culpa no es de las X, éstas estaban bien configuradas, aprovechando que utilizo una de las últimas versiones, está configurada para no utilizar HAL a la hora de detectar dispositivos de entrada, y apoyarse directamente en lo que udev le dice.

Si el sistema está recién instalado, podemos ver que la configuración sí que funcionaba perfectamente nada más arrancar, es a la segunda vez cuando ya no hace las cosas bien, esto nos da una pista de que puede haber algún archivo que se escribe y puede estar metiendo la pata… ¡ lo borramos y ya está ! Aunque tendremos que hacerlo cada vez que arrancamos el ordenador. Por otra parte, si enchufamos el teclado o ratón de nuevas, el sistema hace las cosas bien, es decir, podemos desenchufar y enchufar el ratón y no pasaría nada (sería un “problema menor” aunque incómodo), lo malo es si trabajamos desde un portátil.

Dado que la versión 171 de udev es una de las más actuales, y que para la 172 (aún experimental) hay que instalar muchos otros componentes también experimentales, no estaría mal aplicar un pequeño parche antes de actualizar nuestro sistema con componentes que a lo mejor luego nos dan algún problema, además de que para muchas distribuciones aún no están disponibles los paquetes.

Podemos optar por varias soluciones:

Eliminar archivos al apagar el ordenador automáticamente

Consiste en hacer rm -rf /var/run/udev al apagar el ordenador (más adelante pondré un ejemplo parecido, junto con otra solución).

Configurar el servidor X a la antigua usanza

Es decir, configurarlo con la ubicación exacta de los dispositivo. En un portátil no pasa nada, casi siempre vamos a tener los dispositivos en el mismo orden (el teclado, el touchpad, etc), aunque no seremos tan “modernos”, y puede que alguna vez sí que tengamos algún problema si se nos ocurre enchufar un teclado externo o varios dispositivos apuntadores o algo así, de esas veces que a udev se le ocurre asignar nombres diferentes a los dispositivos (eso, cuando todo funciona, no es un problema.

La forma de configurar los dispositivos a la antigua usanza es la siguiente (modificanfo /etc/X11/xorg.conf):

Section "InputDevice"
    Identifier     "Configured Mouse"
    Driver         "evdev"
    Option         "CorePointer"
    Option         "Device" "/dev/input/event1"
EndSection

Section "InputDevice"
    Identifier     "Configured Keyboard"
    Driver         "evdev"
    Option         "CoreKeyboard"
    Option         "Device" "/dev/input/event0"
EndSection

Suponiendo que el teclado está en /dev/input/event0 y el ratón (o touchpad) en /dev/input/event1 . Una forma de averiguarlo rápida y sencilla (ya que evdev no funciona bien) es hacer un cat…

$ ls /dev/input/
by-id  by-path  event0  event1  event2  event3  event4  mice  mouse0
$ cat /dev/input/event0

# Tocar las teclas Control, Mayúscula, Alt y alguna de esas que no imprimen caracteres y ver si sale algo por pantalla. Si vemos que sí, ese dispositivo será nuestro teclado. Si movemos el ratón y sale algo, ese dispositivo será el ratón.

# Control +C para salir, puede que cuando terminemos tengamos que hacer reset en la terminal.

$ cat /dev/input/event1

$ reset

Para saber más acerca de configurar los dispositivos para Xorg de esta forma, se pueden visitar las wikis de Gentoo o de Arch Linux, por poner dos ejemplos.

Desactivar AutoAddDevices en Xorg

Lo podemos hacer añadiendo en /etc/X11/xorg.conf las siguentes líneas:

Section "ServerFlags"
   Option "AutoAddDevices" "false"
EndSection

Esto hará que no se usen los drivers de dispositivos de eventos, sino los tradicionales “kbd” y “mouse”, y en algunas distribuciones tendremos que instalarlos a mano, ya que no vienen.

Hacer como que desenchufamos y enchufamos los dispositivos

Y es que en Linux podemos hacerlo de forma muy sencilla, sólo tenemos que descargar un módulo y cargarlo de nuevo. No me extenderé mucho en la explicación, ya que ésta llegará pronto a este blog, e incluso algo más extendida.

Lo malo es que este método está particularizado para los Debian-like (Debian/*Ubuntu/Linux Mint y otros 1000 más, aunque casi casi al 100% funcionarán en otras distribuciones.

Lo primero que tenemos que hacer es añadir el módulo del kernel evdev (sí, al menos tenemos que tenerlo como módulo, si no, debemos elegir una de las otras formas), para ello editamos /etc/modprobe.d/blacklist.conf y añadimos:

blacklist evdev

ahora lo que debemos hacer es cargar automáticamente el módulo de nuevo, así forzamos a udev a releer los nuevos dispositivos /dev/input/event* que se crearán. Para ello, creamos un script de arranque de esos que vemos en /etc/init.d/… y esto es lo que está particularizado para los Debian Like, haré un copia y pega de mi script, ya lo comentaré en profundidad más adelante. llamémoslo evdev_load. NOTA: los comentarios son necesarios :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh
#
### BEGIN INIT INFO
# Provides:     evdev_load
# Required-Start:       $dbus
# Required-Stop:
# Default-Start:        2
# Default-Stop:
# X-Interactive:        true
# Short-Description:    Carga el evdev en el arranque
### END INIT INFO

case "$1" in
        start)
                echo "Cargando evdev"
                modprobe evdev
        ;;
esac

Una vez hecho esto, terminamos el proceso de la siguiente manera:

$ sudo update-rc.d evdev_load start 99 2

para que arranque cada vez que arranquemos el sistema.

Foto: JohnJMatlock

Cuando Facebook hace de las suyas [ BUG CSS ]

Sábado, 17 de Abril de 2010 Gaspar Fernández Sin comentarios

Durante este año y varias veces ha habido un pequeño bug CSS que hace que los que mantenemos aplicaciones para Facebook (y no es un trabajo a tiempo completo) nos tiremos de los pelos.

Y es que al cargar nuestra aplicación, los estilos css no funcionan, no cargan, y si cargamos el archivo de Facebook del tipo:

http://external.ak.fbcdn.net/fbml_static_get.php?src=http%3A%2F%2Fmiurl.com%2Faplicacion%2Fcss%2Ffilo.css%3F_fb_q%3D1&appid=107083291268&pv=1&sig=5ee8229e4afbee29836224de876dfa&filetype=css

nos devolverá un precioso mensaje que dice:

Parámetro no válido: Error desconocido

Lo mejor es que el mensaje está traducido al español, por lo que al principio podemos sospechar que falla nuestra aplicación y luego cuando buscamos el error lo tenemos más difícil, aunque podemos buscar lo siguiente (aparece también en inglés, según nuestra localizacion):

Invalid parameter: Unknown error

El bug aún está abierto (a día 17 de Abril de 2010): podéis consultar el estado actualizado aquí.

Pero mientras investigaba el bug, encontré un pequeño fragmento de código interesante (y podemos utilizarlo como solución temporal al problema):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function minify( $css ) {
        $css = preg_replace( '#\s+#', ' ', $css );
        $css = preg_replace( '#/\*.*?\*/#s', '', $css );
        $css = str_replace( '; ', ';', $css );
        $css = str_replace( ': ', ':', $css );
        $css = str_replace( ' {', '{', $css );
        $css = str_replace( '{ ', '{', $css );
        $css = str_replace( ', ', ',', $css );
        $css = str_replace( '} ', '}', $css );
        $css = str_replace( ';}', '}', $css );

        return trim( $css );
}

function includeStyleCSS($filename)
{
        // due to: http://bugs.developers.facebook.com/show_bug.cgi?id=9053
        // We either must print the stylesheet inline
        // or include it with a link tag that does not include rel="stylesheet".
        // Fixed 3/6/2010
        // Broken 4/13/2010:http://bugs.developers.facebook.com/show_bug.cgi?id=9601

        // use this block when linked CSS is broken
        echo "<style type=\"text/css\">";
        $content = @file_get_contents($filename);
        echo minify( $content );
        echo "</style>";

        // use this block when linked CSS is working
        //      echo "<link rel=\"stylesheet\" href=\"http://MYSERVER.COM/$filename\" type=\"text/css\" />\n";
}

He dejado el fragmento de código original, pero podemos verlo atentamente y analizar lo que hace:

  • Dentro de minify(), el primer regexp_replace elimina cuando hay más de un espacio seguido; el segundo, elimina los comentarios. Los str_replace que le siguen, sirven para eliminar espacios sobrantes cerca de caracteres de inicio y fin, y separación.
  • includeStyleCss() introduce dentro de nuestro archivo resultante el CSS del archivo (más o menos reducido por minify()).

Hay que destacar que es una medida provisional, pero es interesante incluir este código en nuestras aplicaciones porque Facebook es reincidente en este fallo y no descartamos que vuelva a ocurrir.

Pero bueno, como yo no me puedo quedar quieto, vamos a intentar mejorar este código (propuesto en la discusión del bug por Ed Holzwarth, aunque he podido encontrar algún fragmento de minify por la red.

La modificación de este código viene de un poquito de investigación por otras webs:

1
2
3
4
5
6
7
8
9
10
11
12
13
function minify($css)
{
  // Quitamos comentarios
  $css = preg_replace('#/\*.*?\*/#s', '', $css);
  // Quitamos espacios en blanco cerca de {}|:;,
  $css = preg_replace('/\s*([{}|:;,])\s+/', '$1', $css);
  // Quitamos espacio en blanco al inicio
  $css = preg_replace('/\s\s+(.*)/', '$1', $css);
  // Quitamos ; innecesarios
  $css = str_replace(';}', '}', $css);

  return $css;
}

Por cierto, sería interesante aplicar este minificador al script de cache y compresión de ficheros CSS. que publiqué hace un tiempo.

Visita otras webs de la red