jueves, 16 de mayo de 2013

Tutorial: Convertir un cable bus PATA para usarlo con la Raspberry Pi


Raspberry es uno de los proyectos más interesantes de los últimos años en materia de electrónica/informática/educación. Mucho se ha hablado en Internet sobre ella, y voy a suponer que todo el que lea esto conoce la plataforma.

Una de las cosas que hacen maravillosa a esta pequeña placa son sus pines GPIO (General Purpose Input/Output) que permiten utilizar la Raspberry como si de una placa microcontroladora se tratase, recordando a proyectos como Arduino, de manera que podemos recibir y enviar datos por ellos para interactuar con hardware externo como sensores, motores, LEDs...

Pines GPIO de la Raspberry


Hay multitud de tutoriales sobre cómo programar la Raspberry para usarlos, como este. No es de lo que voy a hablar aquí.

Es probable que tengamos en casa una placa de prototipado como esta:


Y, claro está, queremos usarla con nuestra flamante Raspberry. Pero no tenemos en casa cablecillos hembra para conectarlos a los pines GPIO, que son macho. ¿Qué hacemos? Podemos ir a comprarlos, o...

Más de uno se habrá encontrado por casa con un cable bus P-ATA de alguna placa base antigua. Me refiero a estos cables:



Y habrá pensado... Esto se parece mucho a lo que necesito para la Raspberry. Le hago un agujero con el berbiquí en el pin 20, que no está (ver foto de la derecha) y ya está.

PUES NO. Estos cables están interconectados por dentro de una manera concreta, de forma que varios de sus pines (los destinados a tierra para su función PATA original) están cortocircuitados. Más información aquí. No basta con hacer el agujero en el pin 20. Si hacemos el agujero y conectamos uno de estos cables a la Raspberry sin más, uniremos varios pines que no deberían estarlo y nos la podemos CARGAR y quemar. Mucho ojo.

En resumen lo que vamos a hacer es "abrir" los cables y eliminar esa interconexión entre dichos pines, de forma que nos quede un simple conjunto de cables hembra-hembra.


Materiales: 


Berbiquí pequeño

Pinzas 
Cable Bus PATA
Raspberry Pi rev. 1 o rev. 2


Pasos:


  1. Quitamos la pestaña de plástico que protege uno de los 3 cabezales del cable. Con meter la uña por un lado se quita fácilmente, y si no podemos ayudarnos de un pequeño destornillador,
        pero siempre con cuidado de no romperla.

  2. Separamos el cabezal del cable propiamente dicho. Veremos que simplemente está metido a presión y que no es difícil. Empezamos desde un lado y vamos tirando despacio.

  3. Una vez sacado, veremos que por dentro tiene 3 filas de pines. La fila del medio es tierra, y está conectada a varios de los pines de las otras filas, y por tanto es la que nos molesta. Cogemos las pinzas y sacamos la fila del medio, tirando desde un lado.



  4. Ya tenemos el cabezal "modificado". Ahora simplemente lo reintroducimos en su sitio en el cable. Con cuidado, mirando los agujeros que habían quedado anteriormente. Los pines están en zig-zag, con lo que no hay riesgo de que lo pongamos del revés.

  5. Volvemos a poner la pestaña protectora de plástico que habíamos quitado en el paso 1. No hace falta que ahora quede el cable sujeto con ella, como estaba en un inicio.

  6. Repetimos los pasos 1-5 en los otros 2 cabezales.
Bien, hasta aquí la modificación del cable. Los cabezales que vamos a utilizar son los dos de los extremos, ya que al cabezal central le falta de conectar internamente uno de los pines (el 28).

En uno de ellos (da igual) usamos el berbiquí para hacer un agujero en el hueco que falta (pin 20) y que así pueda conectarse a los pines macho de la Raspberry. El pin que coincida con el hueco en la Raspberry no podremos usarlo, claro, pero no importa porque coincidirá con un pin de tierra y tenemos otros.



Ahora debemos observar el pinout de la Raspberry:

Pinout del GPIO de la Raspberry  rev.1 y rev.2

Según ese esquema, el pin 9 es GND (tierra), en ambas revisiones de la placa. Dicho pin será el que usemos como referencia para conectar nuestro cable, ya que es en el que conectaremos el agujero hecho con el berbiquí.

Es la única manera posible de conectar el bus y que el hueco coincida con un pin de tierra, y esto es porque el pin 34 del bus está desconectado en uno de los cabezales laterales (el que iría a la placa base en caso de usarlo en un PC), y de esta manera hacemos que no nos coincida con ninguno de los pines de la Raspberry.

De esa manera, al final, nos quedaría esta correspondencia de pines en el cable, con respecto a los de la Raspberry:

Y el cable conectado, así:

Ahora ya podemos tirar cablecitos macho-macho desde el cable a nuestra placa de prototipado para hacer un poco el friki y diseñar proyectos.

Espero que a alguien le sea útil. No sé yo si merece la pena hacer todo esto en vez de comprar unos cuantos cables hembra-hembra pequeños o un bus específico, como este, pero allá cada uno. Yo es que me lo paso bien haciendo estas cosas. En fin, un saludo.

sábado, 6 de octubre de 2012

Modificar tablet Odys Next para poder cargar la batería también por USB


Nota: Idea original sacada del foro alemán Android-Hilfe, de este post, donde no explican mucho, simplemente ponen un par de fotos. Aquí me he limitado a repetir yo el experimento y poner instrucciones más detalladas.

La tablet Odys Next es un dispositivo que viene con Android 4.0 ICS, pantalla de 7" 800x600, una CPU Cortex A8 a 1,2 GHz (ARM), 1 GB de RAM, 8 GB de memoria interna... Por su precio (130 € más o menos) no está nada mal, es un dispositivo multimedia interesante y funciona de forma bastante fluida. Lo único, que la pantalla se queda corta de resolución, pero en una tablet de ese precio no podemos pedir más y se ve bastante bien.

Bueno, resulta que en el lateral de la tablet nos encontramos lo siguiente:


  • El puerto USB PC, como su nombre indica, podemos usarlo para transferir datos entre la tablet y el PC, exclusivamente. 
  • El USB host, para conectar un teclado, ratón, memoria USB o módem 3G mediante un adaptador adecuado (este).
  • El conector DC 5V es la única manera que tenemos de cargar el dispositivo... de momento.

Con este pequeño tutorial de electrónica, conseguiremos que el puerto USB PC también sirva para cargar la tablet (sin quitar la funcionalidad del conector DC 5V). De esta manera, podemos utilizar el mismo cable que usamos para otros dispositivos (mini-USB) y/o cargar la tablet mientras está conectada al PC transfiriendo archivos.

En mi caso, el conector DC 5V hembra (el de la foto) se me debe haber roto, ya que para poder cargar la tablet debo mover y sujetar el cable constantemente, hay algún contacto suelto por dentro. Bueno, pues con este tutorial también he arreglado este problema. 

Es conveniente que se tenga, al menos, algo de experiencia al soldar. Los puntos de suelde son muy pequeños, y una gota de estaño fuera de lugar o un sobrecalentamiento de la placa debido a la alta temperatura del soldador pueden causar daños irreparables a la tablet. No me hago responsable si alguien la rompe, es un proceso delicado.

Materiales necesarios:

         
Tablet Odys Next
                               
                                       Pequeño destornillador (plano o de estrella)
        
Soldador (de punta fina mejor) y estaño
                                
                                          Cable mini-USB (diferente del micro-USB)

Trozo de cable (mejor de un solo hilo, es decir,
que por dentro no tenga un conjunto de hilos de cobre
trenzados, sino uno solo. Esto facilitará el soldar luego.
Si no tienes, uno de hilos trenzados puede servir.) 



















Cinta adhesiva


Pasos para realizar el tutorial

1.) Lo primero que haremos será quitar la carcasa principal de la tablet, lo cual nos permitirá acceder a su placa base, batería, etc. En este aparato es muy sencillo, ya que únicamente hay que quitar los dos tornillos que aparecen en el lateral derecho, a ambos lados de los puertos USB, microSD, etc. Cuidado con perderlos, son muy pequeños. 






2.) Posteriormente no tenemos más que extraer la carcasa tirando suavemente de todos los laterales. Ahora "doblamos" la pantalla hacia abajo poniendo al descubierto la placa base, batería, etc.


3.) Ahora, hay que fijarse bien en la parte de los puertos, vista desde dentro. Se ve algo así:

Clic para agrandar

Levantamos un poco la cinta transparente naranja que hay dentro, para dejar ver los puntos que he marcado en verde a la izquierda de la foto. El objetivo es unir mediante un cable los puntos verdes de la izquierda (uno de los dos) con el de la derecha. 

Respecto a los de la izquierda, he puesto los dos porque es igual, es el mismo nodo, están conectados. Sin embargo es más fácil utilizar el de la derecha de los dos, ya que la resistencia que hay allí es un poco más grande y nos será algo más cómodo soldar (no mucho más...).


Antes de soldar: Comprueba con cualquier cable que si unes dichos puntos sin tocar nada más cuando hay un cable mini-USB conectado desde el puerto USB PC hasta un PC o una toma de corriente USB, el LED rojo que está al lado del micrófono, a la derecha del conector DC 5V, se ilumina. Ejemplo ->

4.) A soldar. Cogemos el trozo de cable que hemos buscado. Es mejor que sea un cable de hilo único, como decía arriba, ya que como vamos a soldar en un espacio muy pequeño, tenemos de esta manera más precisión, pero no es importante. En todo caso, que sea un cable fino.

La manera más fácil es comenzar por el punto de la derecha, el que está en el conector DC 5V. Estañamos un poco el punto, con cuidado de que el estaño no toque ninguna otra zona. Nuestro soldador casero no fundirá el metal utilizado en la soldadura que viene hecha, así que nada, paciencia hasta que algo de estaño se nos quede ahí pegado.

5.) Es buen momento para cortar el cable que sobre. El otro extremo debe quedar casi justo sobre el punto donde lo vamos a poner. No podemos dejar ahí dentro dos metros de cable, encima de eso va la pantalla y casi no tenemos hueco entre ésta y la placa. De nuevo, antes de soldar el 2º punto, comprobamos que el LED rojo se sigue encendiendo, para asegurarnos que hemos soldado bien el punto de la derecha.
6.) Llega un momento crítico: soldar el punto de la izquierda, el de la miniresistencia. Es un punto DIMINUTO, aquí hay que tener aún más cuidado. Para estañar, con que quede una gotita de estaño sobre ella basta y sobra, que tampoco se puede mucho más. Vigila que los extremos pelados del cable al lado de las soldaduras no tocan ningún otro componente cercano.
7.) Tras comprobar de nuevo que el LED se enciende (= está cargándose), por si hubiera que rehacer o retocar alguna soldadura, pegamos el cable contra la placa para que no incordie. Podemos utilizar parte de la cinta naranja que retiramos al principio, y añadir algo de cinta adhesiva nosotros. Que quede algo similar a:

De esta manera aplanaremos el cable, y la pantalla no tendrá problemas de espacio.

8.) Ponemos la pantalla en su sitio, ponemos la carcasa a presión y la atornillamos. Ya tenemos nuestra tablet cargable por USB lista :)

Importante: La corriente máxima que puede proporcionar un puerto USB  de los de nuestro PC es de unos 500mA o poco más. Esto es importante, ya que la corriente máxima que admita es la que determina la velocidad a la que se va a cargar la tablet. El adaptador DC que viene con la tablet proporciona 2 amperios, por lo que si cargamos por el puerto USB del PC tardará probablemente... 4 veces más. Pero es útil para que se vaya cargando mientras transferimos datos, como una película grande (y que no se acabe la batería en la transferencia...).

Para que cargue a la misma velocidad, hay que utilizar un adaptador USB de corriente parecido a este
pero que sea capaz de proporcionar 2 amperios máximo. La mayoría de los que se venden proporcionan 500mA, 850mA, 1A... La corriente máxima aparece especificada en una pegatina o un grabado en el mismo adaptador.

¿Por qué utilizar ese adaptador y cargarla por USB en lugar de con el que viene por defecto, que ya la carga desde la toma de corriente? Pues porque el conector DC 5V se puede romper, como me ha pasado, y por lo cual he hecho esta modificación. El puerto mini-USB es mucho más seguro físicamente, es complicado que se rompa la conexión propiamente física.

Fotos de prueba, cargándose tras ser montada:

lunes, 1 de octubre de 2012

Script de Nautilus o Caja para quitar la contraseña de uno o varios PDF

Aviso: Este método no crackea la contraseña, debes conocerla ya. Pero es útil para dejar un PDF limpio de protecciones de manera rápida y cómoda, con apenas dos clicks encima del archivo. Si utilizas este script con un PDF sin contraseña, lo dejará igual, le digas la contraseña que le digas.

Lo primero: Nautilus es el explorador de archivos de Gnome y Caja es el explorador de archivos de Mate, un fork de Gnome 2 que utiliza, sobre todo, la distribución Linux Mint.

Los requisitos para poder utilizar este script son simplemente instalar

  • zenity (pequeño programa para generar ventanas con información/entrada de texto/etc. en GTK, suele venir preinstalado con Gnome o Mate)
  • qpdf (programa editor de PDF, es capaz de encriptar, desencriptar, y más cosas)

mediante la manera habitual de instalar paquetes de tu distribución (sudo apt-get install zenity qpdf por ejemplo, en Debian/Ubuntu/Linux Mint, etc).


Si utilizas Nautilus, debes guardar el script en la carpeta /home/tuusuario/.gnome2/nautilus-scripts y si utilizas Caja en la carpeta /home/tuusuario/.config/caja/scripts 

Este es el script que he hecho. Cambia la parte en rojo por $NAUTILUS_SCRIPT_SELECTED_URIS en caso de utilizar Nautilus en vez de Caja, el resto del script es exactamente igual.
#!/bin/bash
# Quitar la contraseña de un PDF si ya la conocemos

for archivo in $CAJA_SCRIPT_SELECTED_URIS; do
archivo=$(echo $archivo | cut -c 8-)
archivo=$(printf "${archivo//%/\\x}")
nombre=$(echo ${archivo##*/})
error=algo  # Vale, esto es poco ortodoxo, pero funciona
while [ "$error" != "" ]; do
if [ $(echo $archivo | tail -c 4) == "pdf" ]; then
input=$(zenity --text "Se eliminará la contraseña de $nombre\n\n¿Cuál es su contraseña actual?" --entry)
retval=$?
case $retval in
0)
error=`qpdf --password=$input --decrypt "$archivo" "$archivo.o" 2>&1 && mv -f "$archivo.o" "$archivo"`
echo $error
if [ "$error" != "" ] ; then zenity --text "Contraseña incorrecta." --info; fi
;;
1)
error=""
;;
esac;
else
zenity --text "El archivo $nombre no es un pdf." --info
error="";
fi
done
done

Lo copiamos y pegamos en un archivo llamado, por ejemplo, "Eliminar contraseña PDF" en el directorio de scripts que os he dicho antes y le damos permisos de ejecución. Se puede hacer dando a propiedades en el menú del botón derecho -> Permisos -> Permitir ejecutar el archivo como un programa, o bien abriendo una consola en dicha carpeta y escribiendo:
$ chmod +x Eliminar\ contraseña\ PDF

Una vez hecho todo esto, nos vamos a donde tengamos los PDF a los que queremos quitar la contraseña y los seleccionamos (se pueden seleccionar varios a la vez). Abrimos el menú con el botón derecho y seleccionamos Scripts -> Eliminar Contraseña PDF.


El script nos irá preguntando la contraseña de cada uno de ellos y, si ponemos la correcta, se la quitará. Ojo: El PDF original con contraseña desaparece, es sustituido con la versión limpia.

Captura del efecto:


Espero que a alguien le sea tan útil como a mí, buenas noches.






jueves, 12 de julio de 2012

Resolver el error del bucle "Obteniendo dirección IP..." en Android

Si te ha ocurrido que un día, en tu Android de cualquier versión, al intentar conectarte a una red Wi-Fi no se completa la conexión y se queda en un bucle infinito de "Conectando... --> Autenticando... --> Obteniendo dirección IP...", tienes dos posibles soluciones:

  • Limpiar archivos de configuración de DHCP (sólo root):
    • Necesitamos ser root en el terminal y tener un explorador root de archivos, como por ejemplo Solid Explorer (es mi favorito, es genial) que lo podéis obtener aquí, pero es válido cualquier otro.
    • Nos vamos a la ruta /data/misc/dhcp y borramos (se puede hacer un backup por si acaso, bastaría con renombrarlos) todos los archivos que hay dentro, que serán 3 o 4.
      Si no aparece la ruta /data/misc/dhcp se puede probar creando una nueva carpeta en /data llamada misc y luego metiéndose en ella, y aparecerá nuestra carpeta dhcp (si no, reinicia el móvil después de crearla),
    • Ahora reiniciamos el terminal e intentamos conectarnos de nuevo a una red. Debería funcionar ahora.

En caso de que no funcione, tenemos una segunda opción, más limitada:
  • Asignar una IP estática a la conexión (sólo válido para redes domésticas): Para ello, en los ajustes del sistema, en Conexiones Inalámbricas y Redes -> Ajustes de Wi-Fi -> Pulsamos en nuestra red Wi-Fi (si ya la teníamos guardada, pulsación larga --> Modificar red) y pulsamos en Mostrar opciones avanzadas --> Ajustes de IP --> IP Estática.

    Rellenamos los datos de esta manera:
    • Dirección IP: 192.168.1.8 (Por ejemplo. El último número puede ser otro, pero no puede coincidir con ninguna IP que ya esté asignada a algún aparato en la misma red)
    • Puerta de enlace: 192.168.1.1 (Depende del router, pero en el 98% de ellos es esta)
    • Longitud prefijo de red: 24
    • DNS 1: 8.8.8.8 
    • DNS 2: 8.8.4.4 (Son los DNS propios de Google)
    Al dar a guardar, probablemente ya podamos conectarnos sin problema. Si no, prueba con 192.168.0.8 en Dirección IP  y con 192.168.0.1 en Puerta de enlace.
La solución anterior no es válida para redes corporativas, por ejemplo, en las que no puedes asignarte tu propia dirección IP válida. Además, debemos realizarlo en cada una de las redes wi-fi que tengamos configuradas.

martes, 3 de julio de 2012

Solucionar el error 403 al descargar aplicaciones Android desde Google Play

Hay un error que afecta en diversas circunstancias a usuarios de diversas ROM's, versiones de Android y teléfonos, que consiste en ir a descargar o actualizar cualquier aplicación de Google Play y obtener este mensaje:

Could not be downloaded due to an error.(403)

En español debe ser algo como No se ha podido descargar debido a un error. (403) imagino.

A mi me ocurrió nada más instalar la ROM CyanogenMod 9 RC1 en mi Sony Ericsson Xperia Neo V y posteriormente instalar las gapps (Google Apps, es decir, principalmente el Play Store para poder bajar nuevas aplicaciones cómodamente).

Tras probar de todo (limpiar el cache, reiniciar a fábrica el teléfono, reinstalar la misma ROM u otra diferente...) y comprobar que nada funcionaba, descubrí la solución de casualidad.

Pasos para solucionar el error:

  1. En Google Play, abrimos el menú y seleccionamos Cuentas.
  2. Damos a Añadir cuenta en la parte de abajo y creamos una nueva. Ponemos cualquier nombre de usuario de gmail que no esté ocupado y, si se quiere, nuestro email actual como dirección alternativa por si perdemos la contraseña.
  3. Una vez terminado, habremos accedido a Google Play con la nueva cuenta en vez de la antigua. Intentamos descargar algo y veremos que ahora ya nos deja perfectamente. 
  4. Una vez comprobado esto, volvemos a seleccionar nuestra cuenta antigua en Cuentas y comprobamos que ahora ya nos deja bajar todo.
  5. Finalmente, si no queremos nuestra nueva cuenta para nada, en Ajustes del sistema -> Cuentas y sincronización  podemos eliminarla.

Si no funciona, en los comentarios me ha señalado Roberto Aguilera que a él le han servido estos otros sencillos pasos:
  1. Buscamos Google Play Store en la lista de aplicaciones dentro de Ajustes y borramos el caché de la aplicación.
  2. Desconectamos el wi-fi e intentar descargar una aplicación de las que fallaban antes, pero mediante la conexión de datos móviles, y ya descargará.
Espero que una de las dos soluciones te sirva, un saludo.

sábado, 28 de abril de 2012

Agregar soporte para PAP en una red wi-fi 802.1x/EAP o WPA-Enterprise con wicd en Linux (Ej: red eduroam universitaria)

El tema de gestionar una red wi-fi en Linux siempre ha traído muchos quebraderos de cabeza, pero por suerte cada vez hay más utilidades y programas para hacerlo de forma gráfica.

wicd, programa para gestionar el wi-fi en Linux
Uno de los mejores, para mi gusto, es el programa wicd, fácil de instalar en cualquier distribución Linux buscando el paquete del mismo nombre.

Hace un tiempo publiqué una entrada en la que proporcionaba un script para conectarse a la red wi-fi eduroam para centros universitarios, que hace uso de un tipo de encriptación llamada usualmente WPA-Enterprise (o 802.1x/EAP), con el método TTLS con autenticación PAP.

De todas formas esa manera me he dado cuenta de que era poco útil, el script no funcionaba bien siempre y además obligaba a hacer todo por consola, lo cual echaba atrás a muchos usuarios poco experimentados, supongo. Por eso hoy voy a poner un método general para poder conectarse NO SÓLO A EDUROAM sino a cualquier red wi-fi que utilice este método de encriptación TTLS con PAP (y realmente cualquier otro método ya incluido en el programa wicd, simplemente este no se incluye por defecto).

Además este método vale para cualquier distribución Linux del universo conocido siempre que tengas interfaz gráfica y los drivers de la tarjeta wi-fi funcionando, lo cual no es parte de este tutorial.

El gestor de red de Gnome, el Network Manager, ya incluye soporte para este método, pero si no utilizas Gnome o bien quieres sustituirlo por este otro gestor (lo cual te recomiendo, para mí es bastante mejor) te será útil el tutorial.

  • Lo primero será, claramente, instalar el programa wicd de la forma usual en tu distribución (apt-get install wicd, emerge -av wicd, pacman -S wicd, etc). En principio al instalar el paquete se configura para iniciarse con el sistema (no el modo gráfico, pero sí el demonio para gestionar las conexiones).
  • Si lo abrís veréis que os gestiona tanto la conexión por cable como las conexiones wi-fi, prefiriendo por defecto la de cable si este está conectado (siempre es más fiable). Una vez que añadáis los datos para una red wi-fi en concreto recordará las opciones y se conectará automáticamente la siguiente vez que la detecte.

Para añadir el soporte para autenticación PAP a las opciones ya disponibles:
  • Necesitamos crear un archivo concreto y poner unos datos en él, para ello:
$ sudo nano /etc/wicd/encryption/templates/ttls-80211
  • En el archivo ponemos lo siguiente:
name = TTLS para WPA
author = Alexander Clouter
version = 1
require anon_identity *Identidad_anónima identity *Identidad password *Contraseña
optional ca_cert *Ruta_al_certificado_CA cert_subject *Sujeto_del_certificado
-----
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="$_ESSID"
scan_ssid=$_SCAN
key_mgmt=WPA-EAP
eap=TTLS
ca_cert="$_CA_CERT"
subject_match="$_CERT_SUBJECT"
phase2="auth=PAP"
anonymous_identity="$_ANON_IDENTITY"
identity="$_IDENTITY"
password="$_PASSWORD"
}
  • Guardamos el archivo y añadimos una pequeña línea a otro, así:
$ sudo echo ttls-80211 >> /etc/wicd/encryption/templates/active

Pues ya está. Ahora si abrimos la interfaz gráfica del programa wicd (el comando es wicd-client, o si no aparecerá en los menús de aplicaciones de tu entorno de escritorio) e intentamos conectarnos a una red con el tipo de encriptación TTLS no tenemos más que seleccionar "TTLS para WPA" y añadir los datos ( identidad anónima, identidad, contraseña y si es necesario un certificado CA) y ya debería funcionar sin mayor problema.

Recuerdo los datos para eduroam, aunque tu universidad te los debería dar. Cambia uva.es con el dominio de tu Uni:
  • Identidad anónima: anonymous@uva.es
  • Identidad: e11111111a@uva.es (aquí pon tu DNI con esa e delante)
  • Contraseña: La tuya.
  • Certificado CA: Sólo si es necesario. Por ejemplo, en la UVa (Universidad de Valladolid) no hace falta.
Bueno, espero como siempre que le sea útil a alguien, un saludo.

Si te da error o no te deja conectar de ninguna manera: 
Prueba a borrar la línea que dice subject_match="$_CERT_SUBJECT" en el archivo /etc/wicd/encryption/templates/ttls-80211 .

También puedes probar en las preferencias de wicd a cambiar el cliente DHCP entre los que tengas instalados (sección Programas Externos) y a cambiar las Opciones Avanzadas (controlador de WPA Supplicant e Infraestructura). Normalmente el controlador wext y la infraestructura ioctl van bien, pero puede que otra configuración te funcione mejor (o directamente te funcione).

viernes, 9 de marzo de 2012

wmii: Trucos avanzados (III)


Tutorial wmii:
  1. wmii: Introducción e instalación (I)
  2. wmii: Configuración y comandos de uso básico (II)
  3. wmii: Trucos avanzados (III)
Si habéis seguido el tutorial hasta aquí, tendréis un sistema con wmii funcionando perfectamente. Pero aún le podemos sacar muchísimo más partido, como veremos ahora. La mayor parte de estos trucos, si no todos, requerirán editar el archivo de configuración básico de wmii que ya usamos en las anteriores entradas, del que recomiendo que hagáis copia de seguridad de vez en cuando, por si acaso. Este archivo se encuentra en
/usr/local/etc/wmii-hg/wmiirc
si no cambiasteis el directorio por defecto al instalar wmii. Empecemos pues.

Cambiar colores

Es realmente simple. En el archivo de configuración, al principio veréis unas líneas como estas:
export WMII_NORMCOLORS='#000000 #c1c48b #81654f'
export WMII_FOCUSCOLORS='#000000 #81654f #000000'
export WMII_BACKGROUND='#333333'
 La variable WMII_NORMCOLORS se refiere a todas las barras excepto la de la ventana activa en este momento. Los 3 campos de colores, como #000000, son, respectivamente, los colores del texto, fondo y borde, en ese orden.

La variable WMII_FOCUSCOLORS se utiliza igual, pero se refiere a la barra de título de la ventana activa.

Por último, la variable WMII_BACKGROUND especifica el color de fondo del escritorio, que será un color sólido si en la entrada II del tutorial ignorasteis la sección "Añadir un fondo de pantalla".

Los códigos de colores son códigos hexadecimales (HEX). Maneras de conseguir el código hexadecimal de un color concreto hay muchas, en cualquier programa de dibujo lo podemos obtener, o si no os dejo aquí un pequeño selector parecido al del Photoshop en el que el código HEX sale abajo:


Recordad poner el # al poner el código en el archivo de configuración.

Escoger qué ventanas se abrirán automáticamente en la capa flotante

Hay ciertos programas que no están preparados para el sistema de ventanas de mosaico de wmii, y cada vez que se abren nos toca pasarlos a la capa flotante con la combinación Mod+shift+espacio para poder usarlos correctamente. Pero podemos crear filtros para que wmii lleve automáticamente a esta capa las ventanas que le digamos.

Para ello debemos buscar una sección (las secciones empiezan por un #) en nuestro archivo de configuración que se llama Tagging Rules (es la 4ª después de las variables del inicio)

Por defecto, en esa sección hay unas líneas que ponen:

# MPlayer and VLC don't float by default, but should.
/MPlayer|VLC/ floating=on
Las ventanas que contengan en su título algunas de las palabras que añadamos a esa lista, se irán por defecto a la capa flotante. Las palabras o frases deben ir separadas con un | y la lista debe tener un / a cada lado. Un ejemplo típico de esto es las ventanas de operaciones sobre archivos de muchos exploradores (las de "Copiando...", "Moviendo...", etc) ya que suelen ser ventanas pequeñas, y por defecto wmii nos las maximizaría a toda la columna. En este caso dejaríamos la lista así: 
/MPlayer|VLC|Copiando|Moviendo/ floating=on

Si os interesa la siguiente sección, combinaciones personalizadas de teclas, añadid a esa lista "Event Tester".

Combinaciones de teclas personalizadas

En el archivo de configuración se encuentran definidas todas las combinaciones de teclas que ya conocemos,  ya que las combinaciones que entiende wmii son las que aparecen en este archivo. ¿Por qué no añadir las nuestras propias? Por ejemplo: Usamos mucho el programa eclipse y queremos asignar su apertura a una combinación de teclas para abrirlo más rápido.

Pero el que podamos añadir nuestras propias combinaciones es casi necesario en wmii, porque por ejemplo ¿qué pasa con las teclas de subir y bajar el volumen que tan bien funcionan en Windows o en Ubuntu? Nuestro wmii no maneja nada de eso por defecto...

Lo primero de todo, debemos instalar un pequeño programa llamado xev, que simplemente nos permitirá saber el "nombre real" o ID de cada una de las teclas que pulsamos en el ordenador, de forma que luego al escribir nuestras combinaciones personalizadas el wmii sepa qué hemos pulsado exactamente y actúé en consecuencia. El programa xev está en los repositorios de cualquier distro, así que no habrá problema en encontrarlo e instalarlo.

Cuando lo tengamos, abrimos una terminal y escribimos: xev
Se abrirá una pequeña ventanita blanca en la capa flotante (mirar sección anterior, la última línea). En la terminal de detrás irá apareciendo cualquier acción (mover ratón, pulsar tecla, soltar tecla) que hagamos si tenemos el ratón en esa ventanita. Por ejemplo, al pulsar y soltar la tecla "k" obtendremos estos dos eventos:

KeyPress event, serial 31, synthetic NO, window 0x1a00001,
    root 0xba, subw 0x0, time 82478811, (163,178), root:(1532,195),
    state 0x10, keycode 45 (keysym 0x6b, k), same_screen YES,
    XLookupString gives 1 bytes: (6b) "k"
    XmbLookupString gives 1 bytes: (6b) "k"
    XFilterEvent returns: False
KeyRelease event, serial 31, synthetic NO, window 0x1a00001,
    root 0xba, subw 0x0, time 82478875, (163,178), root:(1532,195),
    state 0x10, keycode 45 (keysym 0x6b, k), same_screen YES,
    XLookupString gives 1 bytes: (6b) "k"
    XFilterEvent returns: False
Al pulsar otra tecla cualquiera, aunque no sea una letra, obtendremos su ID, que aparecerá en una línea de la forma: state ###, keycode ### (keysym ###, ID), same_screen YES,
(los ### variarán según la tecla pulsada).

No sólo las teclas "normales" generan eventos. Las teclas especiales de algunos teclados, el botón de encendido de los portátiles, las teclas de función Fn+Tecla (símbolos azules en teclas de algunos teclados de portátiles), etc también los generan, por tanto los podemos utilizar en una combinación exactamente igual que el Control o las letras. 

Esto nos valdrá, por ejemplo, para controlar el volumen del sonido con las teclas Fn azules que hay casi siempre en los teclados de los portátiles, o abrir un cuadro de diálogo de ¿Desea apagar el sistema? al apretar el botón de apagado.

¡Bien! Ya tenemos la ID de nuestras teclas a utilizar. Nos falta decir qué harán esas teclas. Podemos asociar las combinaciones a un comando concreto, cualquiera que funcione en nuestra terminal. Puede ser simplemente el nombre de un programa para iniciarlo o comandos más complejos, como los de subir y bajar el volumen.

Ojo: Algunas teclas no tienen exactamente la misma ID para wmii que la que aparece en el xev, pero sí el 99%, por eso os pongo este truco. Algunas teclas que NO funcionarán con su ID de xev y su ID real son:

  • La tecla Control Izquierdo probablemente salga con ID Control_L. Pues el nombre a poner es simplemente Control.
  • La tecla Alt se llama Mod1 (en mi teclado. Puede que se llame Mod[otronúmero]. Prueba)
  • La tecla Alt Gr se llama Mod5 (de nuevo, en mi teclado al menos).


Ahora para crear efectivamente la combinación nos vamos al final de nuestro fichero de configuración, justo encima de la tercera sección empezando por abajo, subimos hasta que veamos la línea KeyGroup Other y a partir de ahí vamos poniendo nuestras combinaciones (para ordenar un poco la lista, ya que ahí estarán todas las combinaciones predefinidas también).

¿Pero cómo se ponen las combinaciones? No hay más que usar esta sintaxis:
Key IDtecla1-IDtecla2-IDtecla3
(comandos a ejecutar)
Simplemente cambiando lo rojo por las IDs de las teclas que queremos que activen la combinación al pulsarlas a la vez. También se puede usar una sola tecla.

Ojo: Si en la combinación que vais a poner alguna de las teclas tiene una ID del tipo Mod[número], poned esa tecla la primera de la combinación o no funcionará, no sé bien por qué.

Os pongo algunos posibles comandos útiles para que los añadáis a las teclas que os apetezcan:

Subir volumen:
amixer -c 0 set Master -- 2%+


Bajar volumen:
amixer -c 0 set Master -- 2%-


Sonido on/off:
amixer -c 0 set Master toggle


(para estos dos siguientes hay que instalar el programa xbacklight)


Aumentar brillo pantalla portátil:
xbacklight + 10


Disminuir brillo pantalla portátil:
xbacklight - 10


Menú de apagado:


Este siguiente comando desplegará un menú con opciones de apagar, reiniciar, hibernar y suspender. Yo lo tengo añadido a la tecla de encendido del portátil, que en mi caso tenía ID "XF86PowerOff". Para que funcione hay que hacer un par de cosas.

Primero, instalar el paquete pm-utils que proporcionará los comandos de hibernación y suspensión.

Ahora debemos editar el fichero sudoers, que gestiona el comando sudo. No se puede (no se debe) editar directamente, tiene un comando propio. Ejecutamos:
$ sudo visudo
Se abrirá el nano y añadimos al final esta línea:
tunombredeusuario ALL=(ALL) NOPASSWD:/usr/sbin/pm-suspend, /usr/sbin/pm-hibernate, /sbin/poweroff, /sbin/reboot
En donde pongo "tunombredeusuario" cámbialo por el tuyo. Guardar y cerrar nano, y el fichero sudoers  se editará él solito, pero sólo si no habéis cometido errores de sintaxis que podrían hacer que sudo ya no funcionara... Por eso lo de usar el comando visudo, que comprueba que existan esos errores.

Bien, tras todo esto estamos en condiciones de añadir el comando a una combinación de teclas. El comando es:

msg="Opciones:$wi_newline"
                resp=$(wihack -type dialog xmessage -nearmouse -buttons Apagar,Reiniciar,Hibernar,Suspender,Cancelar -print \
                              -fn "${WMII_FONT%%,*}" "$msg")
                if [ "$resp" = "Apagar" ]; then
                        sudo poweroff
                elif [ "$resp" = "Reiniciar" ]; then
                        sudo reboot
                elif [ "$resp" = "Hibernar" ]; then
                        sudo pm-hibernate
                elif [ "$resp" = "Suspender" ]; then
                        sudo pm-suspend
                fi


Cambiar fuentes y activar anti-aliasing en ellas

En el archivo de configuración debemos buscar una línea que empieza por export WMII_FONT='... y cambiarla por:
export WMII_FONT='xft:nombrefuente-tamaño'
¿Qué ponemos en "nombrefuente"? El comando fc-list nos da una lista (probablemente larga) de todas las fuentes que tenemos instaladas, podemos elegir una de ahí. Yo lo tengo así:
export WMII_FONT='xft:Sans-9'
y se lee perfectamente y es mucho más agradable a la vista que la fuente que viene por defecto.

Modificar la información que sale en la barra inferior

El contenido de esa barra lo gestiona una función en el archivo de configuración. Buscadla, tendrá un aspecto así:
status() {
echo -n label blablabla...
}
 Lo que vaya después de label es un comando cuyo resultado debe ser una sola línea, podemos poner lo que queramos, se actualizará cada segundo. Lo normal es poner, al menos, un reloj y la fecha, como ya viene por defecto. Pero ¿qué son esos 3 números con 2 decimales cada uno? Son proporcionados por el comando uptime y simbolizan la carga de trabajo que tiene(n) la(s) CPU(s) en este momento con respecto a un momento anterior(1, 5 y 15 minutos en este caso).

Me explico. El primer número indica cuántas CPUs necesitaría ahora mismo para poder atender completamente los procesos que tenía hace un minuto. El segundo número, hace 5 minutos, y el tercer número, hace 15 minutos. El valor más cercano a la carga actual es claramente el primero, entonces. Por tanto, un número menor que 1 significa que no hay exceso de carga, la CPU está bastante liberada y le da tiempo a atender a todos los procesos corriendo actualmente sin hacer esperar a ninguno. Si tenemos más de un CPU o núcleo, este número hay que dividirlo entre el nº de CPUs/Núcleos que tengamos.

¿Que por qué se usa este sistema de carga de CPU en lugar del típico porcentaje del Administrador de Tareas de Windows? Porque representa de forma más realista el trabajo que está realizando nuestra CPU, ya que en porcentaje no habría diferencia en usar el 100% sin mucha carga de trabajo (no deja "nada pendiente" aunque lo hará en cuanto se le mande algo más) y usar el 100% con mucho trabajo pendiente (demasiados procesos a la vez, tienen que esperar su turno de CPU, lo que deriva en un funcionamiento más lento del sistema).

Bueno, estábamos con la modificación de la información de la barrita inferior para poner lo que queramos. Para que aparezca, debemos poner el comando cuyo resultado queremos de esta manera:
echo -n label $(comando)
Como ejemplo, os dejo el comando que tengo yo:
echo -n label $(echo Carga CPU: $(uptime | sed 's/.*://; s/, / /g' | cut -c 2-5)) '|' RAM usada: $(free -m -o | sed -n 2p | cut -c 26-29)/$(free -m -o | sed -n 2p | cut -c 15-18) MB '|' $(date +"%a %e %b %Y | %T") '|' Volumen: $(if [ -z $(amixer get Master | sed 1,6d | grep -o off) ]; then echo $(amixer get Master | sed 1,6d
 | cut -d '[' -f2 | cut -d ']' -f1); else echo 'Off'; fi) $(if [ "$(acpi -a)" = "Adapter 0: off-line" ]; then echo "| Batería: $(acpi | cut -d' ' -f4,5 | sed -e 's/,//' -e 's/:..$//') horas"; fi
)
Sí, es un poco largo, pero consigo que me salga esta información:
  • Carga CPU: El primer número de los 3 que he comentado antes
  • RAM usada/disponible, en MB
  • Fecha y hora
  • Volumen de audio en porcentaje (o Off si lo tengo silenciado)
  • Batería restante del portátil en porcentaje y tiempo en horas, sólo cuando tengo desconectado el adaptador de corriente.