10 enero 2013

Configurando el Wi-Fi USB en la Raspberry PI ( Con Realtek RTL8188CUS )

Como he comentado en entradas anteriores para disponer espacio de trabajo me he mudado "al comedor", ya que es la mesa mas grande que tengo a mi disposición en mi casa. El problema es que tanto cable dando vuelta alrededor mío ya me esta volviendo un poco "loco".



El problema se vuelve aún más grande cuando conecto la Raspberry PI ya que me conecto vía cable Ethernet. Usualmente para trabajar en la RasPI utilizo SSH así me evito el tener que usar un teclado y un ratón extra, de esta manera trabajo todo desde la laptop


Esta entrada les explicaré como he configurado mi adaptador Wireless en el Raspberry PI y de paso como eliminar algunos molestos cables de sus alrededores.



El patito feo de la familia, la Sabrent Mini USB Wireless-N (RTL8188CUS)


Hoy en la tarde, aprovechando mis últimos días de vacaciones, me fuí a dar una vuelta por Metrocentro. Luego de caminar y vitrinear un rato, me encontré con este pequeñísimo adaptador Wireless a un precio bastante razonable ($17).



Este mini adaptador es apenas más grande que una moneda de 10 centavos de dólar y está basado en el chip Realtek RTL8188CUS.


No me van a negar que se ve muy bonito conectado a la Raspberry PI.

El problema (porque siempre tiene que haber más de alguno), es que al parecer esta versión específica del chip daba serios problemas en versiones anteriores del kernel utilizado en la distribución raspian.

Esto último me mantuvo bastante confundido buscando compilar el driver de Realtek, hasta que me di cuenta que la última versión de Raspian "wheezy" incluye el controlador correcto por lo que no era necesario hacer nada más que jugar un poco con la configuración.

Actualizando los paquetes necesarios


Es muy recomendable que se aseguren de estar utilizando la última versión de los paquetes en su Raspberry PI, esto lo pueden hacer ejecutando el siguiente comando:
pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade

Esta entrada asume que ustedes están usando la última versión del kernel 3.2.27+, si no es así pueden actualizar con el siguiente comando:
pi@raspberrypi ~ $ sudo apt-get install raspberrypi-bootloader

Adicionalmente tienen que asegurarse de tener la última versión del software wpa_supplicant, este pequeño programa se encarga de realizar la autenticación con redes inalámbricas.
pi@raspberrypi ~ $ sudo apt-get install wpasupplicant


Verificando el hardware



Primero tienen que verificar que se haya detectado el "dongle" haciendo uso del comando "lsusb":
pi@raspberrypi ~ $ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter


Estamos interesados en que se muestre RTL8188CUS en alguna de las líneas. Si no aparece pueden intentar volverlo a conectar o reiniciar la Raspberry PI.

Siguiendo a lo anterior se debe verificar que la configuración Wireless ha detectado el adaptador, para ello nos es útil el comando "iwconfig":
pi@raspberrypi ~ $ iwconfig
lo        no wireless extensions.

wlan0     unassociated  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency=2.412 GHz  Access Point: Not-Associated   
          Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

eth0      no wireless extensions.

Si verificamos la configuración de red podemos observar como no se encuentra asociada a ninguna dirección ip:
pi@raspberrypi ~ $ ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 00:09:c9:19:a0:b2  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2 errors:0 dropped:3 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:368 (368.0 B)  TX bytes:288 (288.0 B)

Realizando la configuración


Modificando /etc/network/interfaces


Lo primero que debemos hacer es modificar un poco nuestro archivo /etc/network/interfaces, este archivo guarda la configuración de todas las interfaces de red existentes.

Vamos a usar el comando "nano" para editarlo:
pi@raspberrypi ~ $ sudo nano /etc/network/interfaces

Modifiquen su archivo de configuración para que quede como el siguiente:
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

iface default inet dhcp

Las primeras dos líneas configuran la interfaz "loopback", esta es la famosa dirección 127.0.0.1 que apunta a si misma.

La siguiente es nuestra nunca bien ponderada interfaz de Ethernet que tanto nos ha ayudado estos días

Por último y un poco más complicado se encuentra la configuración de la red wireless. Para este caso la configuración es "manual" ya que la aplicación wpa_supplicant se encargará de hacer el trabajo, en este caso simplemente indicamos el archivo que queremos utilizar como configuración para la aplicación.

Modificando el archivo /etc/wpa_supplicant/wpa_supplicant.conf


Ahora viene la parte interesante, en este archivo es donde vamos a especificar los detalles de nuestra red wireless.

Un comando que nos ayudará a darnos una configuración de base es "wpa_passphrase". Para ejecutarlo tenemos que escribir el siguiente comando:
pi@raspberrypi ~ $ wpa_passphrase MI_RED_WIFI mipasswordwifi

La salida de este comando es lo que vamos a agregar al final del archivo /etc/wpa_supplicant/wpa_supplicant.con:
network={
 ssid="MI_RED_WIFI"
 #psk="mipasswordwifi"
 psk=09540eea57cf951fdfd7586c2c078e94ca6808533cd2478a3b0f0d8b21a8ba8c
}

Pueden notar que se incluye el password en "texto plano", si son un poco desconfiados pueden dejar solo la versión "codificada" en hexadecimal.
Lo siguiente es editar el archivo /etc/wpa_supplicant/wpa_supplicant.conf con el comando "nano":
pi@raspberrypi ~ $ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Copien la salida generada por el comando wpa_passphrase y modifiquen el archivo para que quede similar a como se muestra a continuación:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
  ssid="MI_RED_WIFI"
  # Usen la siguiente linea si no se pueden
  # conectar a redes ocultas
  scan_ssid=1
  proto=RSN
  key_mgmt=WPA-PSK
  pairwise=CCMP TKIP
  group=CCMP TKIP
  psk=09540eea57cf951fdfd7586c2c078e94ca6808533cd2478a3b0f0d8b21a8ba8c
}

Notarán en el comentario que utilizo la opción scan_ssid=1, pasé un buen rato tratando de averiguar porque no conectaba a mi red local. Resulta que en mi casa he configurado el router para que no haga broadcast del nombre de la red, si no especificamos esta opción el wpa_supplicant simplemente no identificará a nuestra red inalambrica. 

Configuración alternativa


Por alguna razón que desconosco, la configuración con "hotplug" me estaba dando problemas. A veces conectaba y otras veces no, si la configuración anterior les daba problemas pueden intentar con una configuración alternativa se muestra a continuación:
auto lo
iface lo inet loopback

iface eth0 inet dhcp

auto wlan0
iface wlan0 inet dhcp
        wpa-ssid "MI_RED_WIFI"
        wpa-psk 09540eea57cf951fdfd7586c2c078e94ca6808533cd2478a3b0f0d8b21a8ba8c
        wpa-key-mgmt WPA-PSK
        wpa-pairwise TKIP CCMP
        wpa-group TKIP CCMP
        wpa-proto WPA RSN
        wpa-ap-scan 1
        wpa-scan-ssid 1

iface default inet dhcp

<<<here>>

Probando todo 


Luego de esto todo es muchísimo más simple, verifiquen que los archivos están bien escritos y ejecuten el siguiente comando: 
pi@raspberrypi ~ $ sudo ifup wlan0

Esperen unos cuantos segundos para que pueda obtener su dirección IP vía DHCP y verifiquen que todo funciona bien con el comando ifconfig:
pi@raspberrypi ~ $ sudo ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 00:09:c9:19:a0:b2  
          inet addr:192.168.0.5  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1086 errors:0 dropped:1182 overruns:0 frame:0
          TX packets:779 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:140409 (137.1 KiB)  TX bytes:114472 (111.7 KiB)

En este caso mi router asignó la 192.168.0.5, en su caso esto puede ser diferente. Si hacen ping desde otra máquina en la red la Raspberry PI deberá responder felizmente.

¡¡Y eso es todo!!


Si todo funcionó bien no necesitarán hacer configuraciones adicionales y su Raspberry PI funcionará felizmente en su red Wireless.

No habiendo nada más que decir... ¡¡Hasta la próxima!!

Fuentes:



Glosario salvadoreño:


*vitrinear: Término usado en "salvadoreño" para denominar a aquellas personas que se pasean frente a las vitrinas de los centros comerciales sin comprar nada.


+Actualizado 13/01/2013: Se agregó una configuración alternativa ya que la configuración original estaba generando varios problemas de conexión.

9 comentarios:

Fabianelo dijo...

gracias. me sirvio. Tuve el mismo problema de que no conectaba y configure la forma alterna. y listo. nuevamente gracias. mi adaptador es el Tenda W311MI en raspberry pi con raspbian.

franco dijo...

Que tal, soy principiante en linux y raspberry, el problema que tengo es que mi red wireless tiene seguridad wep, quisiera que me ayuden para la configuracion del adaptador en tal caso, muhas gracias

Adrian dijo...

Hola! la verdad que muy bien documentada tu nota y muy bien armada ella. Si tuviera una raspberry seguro que sale funcionado.
Te queria hacer una consulta ya que veo que has lideado con el mini dongle este usb. Compre para mi tablet uno de estos mini dongles usb ya que a la misma se le arruino el modulo wifi y como imaginaras una tablet sin wifi es como un auto sin ruedas. Compre un ComFast que viene con chipset RTL8188CUS que googleando es el que tu conseguiste "vitrineando". Yo precisaria si fueras tan amable me dieras alguna indicacion de como se podria adaptar o compilar el driver para android ya sea gingerbread o ICS o jellybean. Tengo toda la documentacion de como hacerlo pero la verdad escapa a mis conocmientos aunque intuyo que con lo que poseo no estoy tan lejos de lograrlo. Ojala puedas ayudarme y sino gracias tambien por tu tiempo. Saludos. Adrian

Abrahan Márquez García dijo...

Hola:
Te comento mi caso;
Configure con las MAC de la rasp y del penwifi dos ip estaticas en mi router.

Arranco con el pen wifi y el ethernet:
-Todo correcto, puedo conectarme por ssh tanto con la ip del wifi como del cable. Incluso si me conecto con la del wifi y en caliente desconecto el cable sigue funcionando.
-Arranco solo con el penwifi; no funciona. No se conecta a la ip estatica, ni ssh ni nada.

-Mi intencion es conectar la rasp a un HDexterno y un monitor, y por shh con el portatil reproducir el contenido del HD en el monitor. No puedo poner un cable de red en ese lugar, así que necesito que la rasp arranque y derectamente se conecte por wifi sin el cable conectado...

Blown dijo...

Hola, tengo el mismo usb wifi que el tuyo, sigo todos los pasos que indicas en la solución alternativa, (ya que la solución original no me funcionaba) y me sale esto:

sudo ifup wlan0
ioctl[SIOCSIWAP]: Operation not permitted
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
Internet Systems Consortium DHCP Client 4.2.2
Copyright 2004-2011 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/wlan0/00:13:ef:d0:05:f0
Sending on LPF/wlan0/00:13:ef:d0:05:f0
Sending on Socket/fallback
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 7
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 8
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 12
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 19
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 9
No DHCPOFFERS received.
No working leases in persistent database - sleeping.

al hacer ifconfig no me indica ip para la wifi, tengo todo actualizado y todo igual a lo que indicas...

Jordi Grande dijo...

buenas mira te cuento mi problema e echo todo lo k me dices pero no me funciona nada de nada creo k e echo todos los tutoriales habidos y por haber para intentar tener wifi en la raspbery mi usb es un vilros 150mbps por favor ayudaaaaa

Exgande dijo...

Excelente!! pero si lo quiero hacer graficamente como seria? usando el applet de gestor de conexiones wifi y que no sea el wpa-supplicant-gui... gracias... me ha dado problemas por ejemplo con systemd que se conecta cuando le da la gana aunque raspbian no usa systemd quizas es mas facil.... uso Archlinux Arm

Aleksa dijo...

Gracias!! no se cuál era exactamente el problema pero esta fue la solución...

Blown dijo...

He vuelto a revisar todo y sigo sin poder conectarme via wifi... Alguna ayuda?