Archivo de la categoría: Trucos

Trucos generales para distribuciones

La nueva Ubuntu y mi viejo ratón

(Actualizado 2. Ver al final del artículo) Ayer actualicé mi sistema a la nueva Ubuntu 8.10 y me encontré con el primer problema: mi ratón empezó a funcionar correctamente.

Para explicarlo un poco mejor: mi ratón tiene un total de siete botones: los dos de siempre, el central en la rueda, y dos extra en el pulgar. La rueda, además, se puede mover a derecha e izquierda: dos botones más. Hasta ahora Ubuntu (o más concretamente, las X-Windows) no reconocían los botones extra, y los interpretaba como si fuesen el botón central, lo que para mí era muy cómodo. En efecto, si uso el botón central de la rueda para pegar texto o abrir un enlace de Firefox en una nueva pestaña, es raro que no se me mueva algo y acabe pinchando donde no quiero, problema que resuelvo usando el botón del pulgar.

Por desgracia la nueva versión utiliza HAL para detectar y gestionar el ratón, y éste sí reconoce los nuevos botones, con lo que el botón del pulgar ahora me lleva a la página anterior cada vez que lo pulso.

Por suerte el nuevo sistema también permite reconfigurar el sistema con más comodidad, y lo que es más interesante, sin necesidad de reiniciar las X, sino simplemente desenchufando y volviendo a enchufar el ratón. La manera es mediante unos ficheros XML (con extensión .fdi ) almacenados en /etc/hal/fdi/policy. Estos ficheros permiten modificar y personalizar completamente el funcionamiento de cualquier dispositivo, aunque la documentación es algo confusa.

Para los impacientes, la solución es tan simple como crear un fichero cualquiera en ese directorio (por ejemplo, /etc/hal/fdi/policy/mouse.fdi ) que contenga las siguientes lineas:

<device>
    <match key="info.capabilities" contains="input.mouse">
        <merge key="input.x11_options.ButtonMapping" type="string">1 2 3 4 5 6 7 2 2</merge>
    </match>
</device>

Para los que quieran personalizarlo más, la asignación de eventos es:

  1. Botón izquierdo
  2. Botón central
  3. Botón derecho
  4. Rueda arriba
  5. Rueda abajo
  6. Rueda izquierda
  7. Rueda derecha
  8. Página anterior (en un navegador)
  9. Página siguiente (en un navegador)

En el fichero anterior lo que hago es especificar que los eventos 8 y 9 deben responder como un evento 2, mientras que los demás permanecen inalterados.

Actualización: modifiqué el fichero FDI para que filtre los dispositivos, quedándose sólo con los ratones (tag match).

Actualización 2: Por desgracia la solución no sirve porque sólo funciona cuando primero se cargan las X y luego el módulo del ratón (por ejemplo, al desenchufarlo y volverlo a enchufar con las X ya cargadas). Cuando se arranca el ordenador desde cero, como se carga primero el módulo USB y luego las X, no hace nada.

La solución, al final, es más sencilla:

  • Se crea un fichero .Xmodmap en el directorio del usuario, que contenga la línea pointer = 1 8 3 4 5 6 7 2
  • Se sale de las X y se vuelve a entrar
  • Preguntará si se quiere utilizar un fichero Xmodmap, y mostrará la lista de los que ha encontrado (estará el que acabamos de crear)
  • Lo seleccionamos y lo añadimos a la lista de activos, y nos aseguramos de marcar la opción «No volver a preguntar».

Y con esto sí se resolverá el problema. El único defecto es que no se pueden repetir eventos, por lo que tuve que, simplemente, invertir los eventos 2 y 8, en lugar de asignar el 2 a todos los que me interesaba. Pero menos da una piedra…

Bailando Samba

En el trabajo han montado un servidor windows para compartir ficheros e impresoras, y como la mayoría de los servidores de este tipo, utiliza el protocolo SMB de Microsoft.

Acceder a estos servicios desde Linux parecía tan sencillo como abrir Lugares->Red y navegar gracias a SAMBA; pero, como de costumbre, las cosas nunca son tan sencillas. En efecto, el firewall que utilizo no me dejaba acceder, así que tras rebuscar en Internet encontré que tenía que abrir los puertos 135, 137, 138, 139 y 445. Me parecía extraño que, queriendo trabajar sólo como cliente (sin compartir yo nada) tuviese que abrir puertos, pero de todas formas lo probé. El resultado: ni con esas funcionaba, aunque si quitaba el firewall entonces iba como la seda.

Bastante mosqueado volví a buscar en Internet, pero no encontré absolutamente nada, así que me armé de paciencia y de Wireshark y empecé a ver qué demonios pasaba con los paquetes. Así fue como descubrí que el problema estaba en la resolución de nombres. En efecto, cuando un recurso no está en el DNS (un servidor, una impresora), SAMBA utiliza su propio servicio para descubrir su dirección IP, para lo que envía una petición UDP a toda la red usando la dirección de broadcast. El problema es que la respuesta no viene de la dirección de broadcast, sino de un equipo concreto (el buscado), por lo que el firewall la bloquea.

Pensando que era un bug del módulo ip_conntrack escribí a los desarrolladores para avisarles. Su respuesta, sin embargo, fue que cargase el módulo nf_conntrack_netbios_ns. Y efectivamente, con dicho módulo, y sin necesidad de abrir ningún puerto, todo ha funcionado perfectamente.

RealMedia sin RealPlayer

Por casualidades de la vida tengo una película en formato RealMedia (.rm), pero no era capaz de reproducirla. MPlayer, mi reproductor favorito (es el único que se puede controlar completamente desde teclado) se negaba a mostrar el vídeo, sólo reconocía el audio.

Me harté de buscar en google y en todas partes decían lo mismo: si tenía los w32codecs instalados debería poder reproducir archivos .rm sin problemas. Pero a la vez mucha gente se quejaba de que los tenía instalados y ni con esas (como era mi caso).

Los volví a bajar de la página oficial, probé con otros reproductores… y nada. Al final ya me veía resignado a utilizar el RealPlayer para Linux, pero su interfaz me tiraba para atrás. Hasta que echando un vistazo a la salida de Mplayer encontré un mensajito de error en el que no había reparado antes:

 Error: libstdc++.so.5: cannot open shared object file: No such file or directory

Y efectivamente: un simple sudo apt-get install libstdc++5 resolvió el problema.

Por si le sirve a alguien más.