Ir al contenido
Conéctate para seguir esto  
Nible

Utilidad para conectar un Smartphone al Wifi con un QR

Recommended Posts

Saludines GNU/Linuxeros
Hace poco leí en un articulo que se pueden usar los códigos QR para conectar el Smartphone a la red WiFi simplemente escaneando el código con un programa como Barcode Scanner, ahorrándose uno así la faena de buscar el nombre de la red e introduciendo la contraseña manualmente.

Para generar el QR existen páginas web con un simple formulario que hasta ofrecen en github su código fuente en Javascript, concretamente he visto esta: https://qifi.org

La idea me pareció fantástica, ya que en casa a uno le pueden pedir esos datos cuando menos se lo espera.
Pero la idea de poner todos esos datos en una web publica no me hace mucha gracia, aunque en la página aseguran que el código javascript se ejecuta localmente y no se envía nada a nadie.
A pesar de eso, solo se trata de codificar una cadena cuyo "estándar" se encuentra aquí: https://github.com/zxing/zxing/wiki/Barcode-Contents#wifi-network-config-android

Así que pensé en hace un aplicación local igual de sencilla para generar los QR que no tenga muchas dependencias, por eso he elegido usar programación con bash y zenity para la GUI y a elección del usuario python-qrcode o qrencode para generar el QR.
Para la GUI habría quedado mejor con PyGTK o TkInter pero de momento es lo que hay.

A continuación os dejo los comandos para instalar estas dependencias (que me extrañaría que no las tuvieseis ya instaladas) y el programa en si:

Ubuntu:

sudo apt-get install zenity python-qrcode


Arch:

sudo pacman -S zenity python-qrcode


Para el que prefiera qrencode:

sudo apt-get install qrencode
o
sudo pacman -S qrencode



El script usando zenity:

Spoiler

#!/bin/bash

#Primera parte: pedir datos al usuario

zenity --title='Generador QR WiFi' --width=250 --question --ok-label='Si' --cancel-label='No' --text='Generador de códigos QR para el WiFi\n\nCon este asistente podrás generar un código QR y usarlo para conectar tu Smartphone escaneando el código y asi no tener que escribir la contraseña manualmente\n\n¿Deseas continuar?'

if [ $? -eq 0 ]
then
	nwifi=$(zenity --title='Generador QR WiFi' --entry --text='Nombre o SSID del WiFi:')
else
	exit 1
fi

if [ -n $nwifi ]
then
	#ewifi=$(zenity --title='Generador QR WiFi' --list --hide-header --radiolist --text='Tipo de encriptación' --column='Tipo' --column='Nombre' TRUE 'WPA' FALSE 'WEP'  FALSE 'Sin_Contraseña')
	ewifi=$(zenity --title='Generador QR WiFi' --list --hide-header --text='Tipo de encriptación' --column='Tipo' 'WPA' 'WEP' 'Sin_Contraseña')
fi

if [ -n $ewifi ] && [ $ewifi != "Sin_Contraseña" ]
then
	cwifi=$(zenity --title='Generador QR WiFi' --entry --text='Contraseña del WiFi:')
fi

zenity --title='Generador QR WiFi' --width=250 --question --ok-label='Si' --cancel-label='No' --text='¿La red WiFi está oculta?'
owifi=$?

nombre_generador=$(zenity --title='Generador QR WiFi' --list --hide-header --text='Elige el programa que tienes instalado para generar el QR' --column='Nombre' 'qr' 'qrencode')

echo "Nombre del SSID: $nwifi"
echo "Encriptación: $ewifi"
echo "Contraseña: $cwifi"
echo "Oculta: $owifi"
echo "Comando generador del QR: $nombre_generador"
echo


#Segunda parte: componer la cadena y generar el QR

codigo='WIFI:'

if [ -z $cwifi ] || [ $ewifi = 'Sin_Contraseña' ]
then
	codigo=$codigo'T:nopass;S:'$nwifi';'
else
	codigo=$codigo'T:'$ewifi';S:'$nwifi';''P:'$cwifi';'
fi

#codigo=$codigo'S:'$nwifi';'
#codigo=$codigo'P:'$cwifi';'

if [ $owifi -eq 0 ]
then
	codigo=$codigo'H:true;'
else
	codigo=$codigo';'
fi

echo "Codigo: $codigo"
echo
#qr $codigo

dhome=~
dhome=$dhome'/qrwifi.png'

if [ -z $nombre_generador ] || [ $nombre_generador != "qrencode" ]
then
	qr $codigo > $dhome
	r=$?
else
	qrencode -o $dhome $codigo
	r=$?
fi

if [ $r -eq 0 ]
then
	zenity --title='Generador QR WiFi' --width=250 --info --text="El código QR ha sido generado correctamente\n\nSe encuentra en: $dhome" --no-wrap
else
	zenity --title='Generador QR WiFi' --width=250 --error --text="El código QR no ha podido ser generado\nParece ser que no se encuentra el programa $nombre_generador \n\nCopia el siguiente texto para generarlo manualmente:\n $codigo" --no-wrap
fi

 



Para los que no quieran instalar zenity, sin GUI:

Spoiler

#!/bin/bash

#Primera parte: pedir datos al usuario

echo
echo 'Generador de códigos QR para el WiFi'
echo 'Con este asistente podrás generar un código QR y usarlo'
echo 'para conectar tu Smartphone escaneando el código y asi'
echo 'no tener que escribir la contraseña manualmente'
echo '¿Deseas continuar? [S/N]: '
read r
echo

if [ $r = 's' ] || [ $r = 'S' ]
then
	echo 'Nombre o SSID del WiFi: '
	read nwifi
	echo
else
	exit 1
fi

if [ -n $nwifi ]
then
	echo 'Tipo de encriptación [WPA|WEP|sin]: '
	read ewifi
	echo
fi

if [ -n $ewifi ] && [ $ewifi != "sin" ] && [ $ewifi != "SIN" ]
then
	echo 'Contraseña del WiFi: '
	read cwifi
	echo
fi

echo '¿La red WiFi está oculta? [S/N]: '
read owifi
echo

echo "Nombre del SSID: $nwifi"
echo "Encriptación: $ewifi"
echo "Contraseña: $cwifi"
echo "Oculta: $owifi"
echo


#Segunda parte: componer la cadena y generar el QR

codigo='WIFI:'

if [ -z $cwifi ] || [ $ewifi = 'Sin_Contraseña' ]
then
	codigo=$codigo'T:nopass;S:'$nwifi';'
else
	codigo=$codigo'T:'$ewifi';S:'$nwifi';''P:'$cwifi';'
fi

#codigo=$codigo'S:'$nwifi';'
#codigo=$codigo'P:'$cwifi';'

if [ $owifi = "s" ] || [ $owifi = "S" ]
then
	codigo=$codigo'H:true;'
else
	codigo=$codigo';'
fi

echo "Codigo: $codigo"
echo
qr $codigo

#Elige entre el comando qr o qrencode dependiendo de si tienes instalado python-qrcode o qrencode
dhome=~
dhome=$dhome'/qrwifi.png'
#qrencode -o $dhome $codigo
qr $codigo > $dhome

echo

if [ $? -eq 0 ]
then
	echo "El código QR ha sido generado correctamente"
	echo "Se encuentra en: $dhome"
else
	echo "El código QR no ha podido ser generado"
	echo "Parece ser que no se encuentra el programa"
	echo "Copia el siguiente texto para generarlo manualmente:"
	echo $codigo
fi

echo

 



Hace tiempo que no hago nada en bash así que es posible que os salte algún que otro error.
Pero como es un simple script podéis corregirlo y personalizarlo vosotros mismos (he procurado mantener la legibilidad del código lo mejor posible), y si es muy grave me lo comentáis por aquí y edito el mensaje para corregirlo.
Yo he realizado varias pruebas y me ha funcionado todo correctamente así que espero que no me acribilléis con muchos reportes XD

Y eso es todo, espero que os pueda ser útil ;)

Editado por Nible

Compartir este post


Enlace al post
Compartir en otros sitios

Registra una cuenta o conéctate para comentar

Debes ser un miembro de la comunidad para dejar un comentario

Crear una cuenta

Regístrate en nuestra comunidad. ¡Es fácil!

Registrar una cuenta nueva

Iniciar Sesión

¿Ya tienes cuenta? Conéctate aquí.

Iniciar Sesión
Conéctate para seguir esto  

×