Los iPhones más nuevos transmitirán un SSID en modo de punto de acceso como tal:
My Name\342\\\200\\\231\\s iPhone
Observé este SSID en la GUI.
Cuando tomo el SSID a través de la línea de comando:
$ sudo iwlist wlan0 scan | grep ESSID
> My Name\xE52\x80\x99s iPhone
En el iPhone aparece como:
My Name's iPhone
Si, en wpa_supplicant.conf, ingreso:
network={
ssid="My Name's iPhone"
psk="my_passcode"
}
La Raspberry Pi no se conectará al punto de acceso del iPhone.
Sin embargo, si, en wpa_supplicant.conf
, ingreso:
network={
ssid="My Name\342\\\200\\\231\s iPhone"
psk="my_passcode"
}
Me sale un error en la línea de comando.
$ sudo ifdown wlan0
$ sudo ifup wlan0
> wpa_supplicant: /sbin/wpa_supplicant daemon failed to start
> run-parts: /etc/network/if-pre-up/wpasupplicant exited with return code 1
> Failed to bring up wlan0
A través de la GUI, aparece el error "Argumento no válido".
Si wpa_supplicant.conf
entro entro:
network={
ssid="My Name\xE52\x80\x99s iPhone"
psk="my_passcode"
}
Entonces raspbian no se conectará a él, y se conectará a una red de menor prioridad (suponga que tengo las prioridades establecidas correctamente, que he probado).
SSID
el iPhone? No quiero que todos vean "Joe Bloggs iPhone" de todos modos y establezcan un sentidoSSID
.SSID
? El '\' es un carácter de escape NIX normal. Supongo que esto se deriva de Unicode (quizás U + 2019)\xE52\x80\x99
.Respuestas:
El mensaje del iPhone incluye el carácter Unicode U + 2019 "comillas simples a la derecha". Esto es válido (si es muy inconveniente).
Es bastante fácil incluir caracteres Unicode en cadenas. Lo siguiente haría eco de esto en el
bash
símbolo del sistema.La documentación (muy incompleta) de
man wpa_supplicant.conf
no parece especificar cómossid
se interpreta el parámetro. Puede probar el formulario de arriba$'My Name\u2019s iPhone'
y ver si eso ayuda.NOTA La cadena
"My Name\xE52\x80\x99s iPhone"
en su pregunta no es válida Unicode (hay un exceso de caracteres5
) pero esto PUEDE funcionar si lo corrige.fuente
Eché un vistazo a cómo wpa_supplicant analiza el archivo de configuración, y parece que extrae los bytes exactos entre
ssid="
y el último"
. Los caracteres unicode con escape (\ u) y los caracteres sin ascii con escape (\ x) no funcionarán.En su caso, debería especificar su SSID de esta manera:
Que se vería así en un editor hexadecimal:
Si está utilizando la salida de
iw
(que escapa caracteres no ascii), puede usar Python para interpretar y escribir los bytes exactos en un archivo:Tenga en cuenta que si desea conectarse a un punto de acceso con el SSID
A so called "SSID"
que funcionará para entrar de esta manera:ssid="A so called "SSID""
. Esto se debe a que wpa_supplicant buscará los bytes entre la primera y la última cita en una línea.Una limitación que encontré es que wpa_supplicant.conf no aceptará caracteres de nueva línea (0x0A) en el SSID, aunque técnicamente es posible.
fuente
ssid="\U0001F4A9"
y luego lo escribí confile.write(ssid.encode("UTF-8"))
. Leer elssid
archivo conxxd
y copiar los bytes sin espacios. La línea en mi configuración ahora se leessid=f09f92a9
.Puede tomar el ssid, en este caso "iPhone de mi nombre" (sin las comillas), y convertirlo a hexadecimal usando https://www.browserling.com/tools/text-to-hex .
Tome el resultado, en este caso 4d 79 20 4e 61 6d 65 e2 80 99 73 20 69 50 68 6f 6e 65 y elimine los espacios.
O en fiesta
Actualice /etc/wpa_supplicant/wpa_supplicant.conf:
Luego salga del editor y en la terminal:
Si no tiene errores, intente conectarse. Deberia trabajar. Solo asegúrese de que su valor hexadecimal ssid NO esté entre comillas y que no contenga espacios.
¡Salud!
fuente
Debe cambiar el nombre de su iPhone para eliminar cualquier espacio ... esto se puede hacer en Configuración> General> Acerca de.
Una vez que haya elegido un nombre sin espacios, podrá conectarse a un punto de acceso sin problemas.
fuente