Comment configurer wpa_supplicant avec le SSID iPhone par défaut?

9

Les iPhones plus récents diffuseront un SSID en mode point d'accès en tant que tel:

My Name\342\\\200\\\231\\s iPhone

J'ai observé ce SSID dans l'interface graphique.

Lorsque j'attrape le SSID via la ligne de commande:

$ sudo iwlist wlan0 scan | grep ESSID
> My Name\xE52\x80\x99s iPhone

Dans l'iPhone, il apparaît comme:

My Name's iPhone

Si, dans wpa_supplicant.conf, j'entre:

network={
    ssid="My Name's iPhone"
    psk="my_passcode"
}

Le Raspberry Pi ne se connectera pas au point d'accès iPhone.

Cependant, si, en wpa_supplicant.conf, j'entre:

network={
    ssid="My Name\342\\\200\\\231\s iPhone"
    psk="my_passcode"
}

J'obtiens une erreur dans la ligne de commande.

$ 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

Via l'interface graphique, j'obtiens l'erreur "Argument invalide".

Si, dans wpa_supplicant.confJ'entre:

network={
    ssid="My Name\xE52\x80\x99s iPhone"
    psk="my_passcode"
}

Ensuite, raspbian ne s'y connectera pas et se connectera à un réseau de priorité inférieure (supposons que les priorités soient correctement définies, que j'ai testées).

ericmjl
la source
Pourquoi ne configurez-vous pas simplement SSIDl'iPhone? Je ne veux pas que tout le monde voie "Joe Bloggs iPhone" de toute façon et mette en place un sens SSID.
Milliways
Cela nécessite de changer le nom de l'iPhone de mon collègue, ce que je préférerais ne pas faire. Le but est d'obtenir Internet sur un site de terrain où nous collectons des données avec le framboise Pis, afin qu'il puisse régler l'heure correctement.
ericmjl
@ Milliways: je ne veux en aucun cas être en désaccord avec votre suggestion en tant que solution potentielle; si c'était mon propre appareil, je ferais totalement ce que vous avez suggéré :).
ericmjl
Comment avez-vous déterminé le SSID? Le «\» est un caractère d'échappement NIX normal. Je suppose que cela dérive d'Unicode (peut-être U + 2019)
Milliways
@ Milliways: J'ai mis à jour mon message avec des détails sur la façon dont j'ai récupéré les SSID. De l'interface graphique, j'obtiens ceux avec des barres obliques triples. Depuis le terminal, j'obtiens la version avec \xE52\x80\x99.
ericmjl

Réponses:

2

L'invite iPhone comprend le caractère Unicode U + 2019 "guillemet droit simple". Ceci est valable (si très gênant).

Il est assez facile d'inclure des caractères Unicode dans les chaînes. Ce qui suit ferait écho à l' bashinvite de commandes.

echo $'My Name\u2019s iPhone'
echo $'My Name\xE2\x80\x99s iPhone'

La documentation (très sommaire) de man wpa_supplicant.confne semble pas préciser comment le ssidparamètre est interprété. Vous pouvez essayer le formulaire ci $'My Name\u2019s iPhone'- dessus et voir si cela aide.

REMARQUE La chaîne "My Name\xE52\x80\x99s iPhone"de votre question n'est pas Unicode valide (il y a un caractère en excès 5) mais cela PEUT fonctionner si vous le corrigez.

Milliways
la source
J'avais ce même problème, mais changer le SSID de l'iphone a tout résolu. Merci Milliways
2

J'ai regardé comment wpa_supplicant analyse le fichier de configuration, et il semble qu'il extrait les octets exacts entre ssid="le dernier et le dernier ". Unicode échappé (\ u) et caractères non ascii échappés (\ x) ne fonctionneront pas.

Dans votre cas, vous devrez spécifier votre SSID comme ceci:

    ssid="My Name’s iPhone"

Qui ressemblerait à ceci dans un éditeur hexadécimal:

09 73 73 69 64 3D 22 4D 79 20 4E 61 6D 65 E2 80 99 73 20 69 50 68 6F 6E 65 22

Si vous utilisez la sortie de iw(qui échappe aux caractères non ascii), vous pouvez utiliser Python pour interpréter et écrire les octets exacts dans un fichier:

$ python
>>> ssid = 'My Name\xE5\x80\x99s iPhone'
>>> file = open('ssid', 'w')
>>> file.write(ssid)
>>> file.close()

Notez que si vous souhaitez vous connecter à un point d'accès avec le SSID , A so called "SSID"il travaillera pour entrer comme ceci: ssid="A so called "SSID"". En effet, wpa_supplicant recherchera les octets entre le premier et le dernier devis sur une ligne.

Une limitation que j'ai trouvée est que wpa_supplicant.conf n'acceptera pas les caractères de nouvelle ligne (0x0A) dans le SSID, même si cela est techniquement possible.

KyotoFox
la source
Je confirme que cela fonctionne. J'ai écrit le texte en chaîne python unicode, cependant: ssid="\U0001F4A9"puis je l'ai écrit avec file.write(ssid.encode("UTF-8")). Lisez le ssidfichier avec xxdet copiez les octets sans espaces. La ligne dans ma configuration se lit maintenant ssid=f09f92a9.
Christophe De Troyer
2

Vous pouvez prendre le ssid, dans ce cas "l'iPhone de mon nom" (sans les guillemets), et le convertir en hexadécimal en utilisant https://www.browserling.com/tools/text-to-hex .

Prenez le résultat, dans ce cas 4d 79 20 4e 61 6d 65 e2 80 99 73 20 69 50 68 6f 6e 65 et supprimez les espaces.

Ou en bash

    $ echo -n $'My Name\xE2\x80\x99s iPhone' | od -t x1 -A n -w100000 | tr -d ' '
    4d79204e616d65e2809973206950686f6e65

Mettez à jour /etc/wpa_supplicant/wpa_supplicant.conf:

network = {
    # Hex encoded 'My Name\xE2\x80\x99s iPhone', NO quotes in ssid=...
    ssid=4d79204e616d65e2809973206950686f6e65
    psk="your passphrase"
    key_mgmt=WPA-PSK
}

Quittez ensuite l'éditeur, et dans le terminal:

$ sudo ifdown wlan0
$ sudo ifup wlan0

Si vous n'avez aucune erreur, essayez de vous connecter. Devrait marcher. Assurez-vous simplement que votre valeur hexadécimale SSID n'est PAS entre guillemets et ne contient pas d'espaces.

À votre santé!

Tiffany Antopolski
la source
1

Vous devez renommer votre iPhone pour supprimer tous les espaces ... cela peut être fait dans Paramètres> Général> À propos.

Une fois que vous avez choisi un nom sans espaces, vous pourrez vous connecter à un point chaud sans problèmes.

iAN_MiLES
la source