Mi portátil, un Fujitsu Siemens Amilo M 7440, es uno de los mejores que he tenido. Tiene casi tres años y en su momento, un Centrino a 2GHz, 2 GB de RAM, 100 GB de disco y varios extras era una golosina… Pero tiene un defecto: el botón que activa la Wireless va por software, es decir, no está controlado por la BIOS y sin sistema operativo no se puede activar.
Éso es un verdadero problema en algunas situaciones empresariales, pero a mi nivel, lo que realmente quita las ganas es que cada vez que instalo una distribución Linux debo hacer peripecias para poner en marcha el “controlador” del switch wireless.
En este artículo dejo constancia y explico la forma de tener control sobre el interruptor de software de la Wireless del portátil desde cualquier distribución Linux (aunque para el ejemplo me basaré en Ubuntu
).
Descargar el controlador
Por suerte, Alejandro y Javier Vidal Mata crearon un proyecto para solucionar este tema: RF Kill Switch’s Driver. Se trata de un módulo para los kernels 2.4.* y 2.6.* que permite activar y desactivar la radio de la tarjeta wireless del portátil.
De las versiones que hay disponibles, nos interesa la fsam-console-0.2, pues es la que nos permitira incluirla en scripts y demás
Compilación
El paquete viene comprimido y casi preparado para ser makeado. En primer lugar debemos descomprimirlo en algún lugar que vayamos a considerar definitivo. No es absolutamente necesario, pues al final del proceso obtendremos el ejecutable, pero no me gusta separar los archivos
En mi caso lo guardo en un directorio llamado /programs/fsam7440/.
tar -jxvf fsam7440-console-0.2.tar.bz2
Antes de seguir debemos asegurarnos que tenemos las herramientas necesarias para hacer el proceso. Depende de la configuración de la instalación de linux se deberá ejecutar una o varias de las siguientes instrucciones:
apt-get install gcc-3.4
apt-get install make
apt-get install build-essential
apt-get install kernel-headers-’uname -r’
El primer paso de todos es situarnos dentro del directorio descomprimido y ejecutar
./configure
Éso nos dará un resultado que es el checking que hace el instalador para ver si el sistema dispone de las herramientas necesarias para compilar el módulo. Según veamos en los mensajes, deberemos ir instalando los paquetes necesarios (ver más arriba).
Será entonces cuando podemos generar el ejecutable:
make && make install
Es muy possible que nos salgan varios avisos. Siempre que sean avisos no hay problema, pero si son errores deberemos investigar su causa.
Probamos que funciona
Bién, una vez compilado tendremos un ejecutable a nuestra disposición, el fsam7440. Para probar que funciona ejecutamos el archivo y le pasamos un parámetro (un cero o un uno) que definirá si queremos encender la wireless o apagarla:
./fsam7440 1
./fsam7440 0
Con el primero encendemos la wireless y nos devolverá un mensaje del tipo RF On, y con el segundo la apagamos, devolviéndonos un mensaje del tipo RF Off. Cuando la encendamos se debería encender también el led de la wireless en el panel de leds del portátil.
Para quedarnos tranquilos y verificar que realmente funciona (y no sólo enciende y apaga los leds) con la wireless teóricamente encendida ejecutaremos un escaneado del entorno en busca de redes disponibles (claro, deberíamos saber de antemano que hay alguna disponible
).
iwlist scanning
Ésto nos debería dar una lista de las redes inalámbricas a las que nos podemos conectar. Si no, es que no se ha compilado bién
Encenderla automáticamente al iniciar el ordenador
Obviamente, no vamos a abrir una consola e introducir el comando cada vez que arranquemos el ordenador. De hecho, lo ideal sería tener un servicio y configurarlo para que arranque automáticamente con el inicio del ordenador.
En primer lugar deberemos crear un script de servicio. Nos vamos a /etc/init.d (por convención únicamente), creamos un archivo llamado wireless.sh y nos disponemos a editarlo:
touch wireless.sh
vim wireless.sh
una vez dentro, le insertamos el siguiente código (Atención! Este código es orientativo. Funciona aunque podría ser mejor).
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: wireless
# Required-Start: fsam7440
# Required-Stop: fsam7440
### END INIT INFO
case “$1″ in
start)
echo “Activating RF Wireless…”
/programs/fsam7440/fsam7440-console-0.2/fsam7440 1
echo “Done”
exit 0
;;
stop)
echo “Deactivating RF Wireless…”
/programs/fsam7440/fsam7440-console-0.2/fsam7440 0
echo “Done”
exit 0
;;
force-reload|restart)
echo “Reactivating RF Wireless…”
/programs/fsam7440/fsam7440-console-0.2/fsam7440 0
/programs/fsam7440/fsam7440-console-0.2/fsam7440 1
echo “Done”
exit 0
;;
*)
echo “Usage: /etc/init.d/wireless {start|stop|restart|force-reload}”
exit 1
;;
esac
exit 0
NOTA: Todas las comillas que aparecen aquí deben ser comillas dobles normales.
Vale, ya podemos guardarlo. Ahora tenemos un servicio llamado wireless.sh que acepta el parámetro start, stop, restart y force-reload
El siguiente y último paso es agregarlo al proceso de arranque del sistema. Aquí cada distribución de Linux funcionará a su manera. En nuestro ejemplo con Ubuntu, lo hemos situado en los procesos locales (se arrancará en todas las situaciones). Entramos en el directorio /etc/rcS.d y generamos un enlace simbólico a nuestro servicio. Vamos a situarlo justo después de que se arranque la red normal (en mi caso, S40networking), así que el comando a ejecutar es:
ln -s ../init.d/wireless.sh S42wireless.sh
Perfecto. Si ahora hacemos un ls -l del directorio veremos el nuevo elemento a tener en cuenta en el arranque:
lrwxrwxrwx 1 root root 18 2007-09-23 12:45 S42wireless.sh -> ../init.d/wireless.sh
Conclusión y Comentarios
La verdad es que no es un proceso complicado. Son unos cuantos pasos, éso si, pero con paciencia y fijándonos en lo que hacemos llegamos a buen puerto. El problema es tener que repetir todo el proceso con cada distribución que instalamos en el portátil, que acaba siendo muy pesado.
Todas las instrucciones anteriores las he hecho con el usuario root. Es posible hacerlas todas con sudo, como se quiera.
Enlaces
Tags: fsam7440, Linux, Red, Script, Sistemas, Ubuntu, Wireless
Escribe un Comentario