Neuere iPhones senden eine SSID im Hotspot-Modus als solche:
My Name\342\\\200\\\231\\s iPhone
Ich habe diese SSID in der GUI beobachtet.
Wenn ich die SSID über die Befehlszeile abrufe:
$ sudo iwlist wlan0 scan | grep ESSID
> My Name\xE52\x80\x99s iPhone
Im iPhone wird Folgendes angezeigt:
My Name's iPhone
Wenn ich in wpa_supplicant.conf Folgendes eingebe:
network={
ssid="My Name's iPhone"
psk="my_passcode"
}
Der Raspberry Pi stellt keine Verbindung zum iPhone-Hotspot her.
Wenn wpa_supplicant.conf
ich jedoch Folgendes eingebe:
network={
ssid="My Name\342\\\200\\\231\s iPhone"
psk="my_passcode"
}
Ich erhalte eine Fehlermeldung in der Befehlszeile.
$ 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
Über die GUI erhalte ich den Fehler "Ungültiges Argument".
Wenn, in wpa_supplicant.conf
gebe ich ein:
network={
ssid="My Name\xE52\x80\x99s iPhone"
psk="my_passcode"
}
Dann stellt raspbian keine Verbindung her und stellt eine Verbindung zu einem Netzwerk mit niedrigerer Priorität her (vorausgesetzt, ich habe die Prioritäten richtig eingestellt, die ich getestet habe).
SSID
auf dem iPhone ein? Ich möchte sowieso nicht, dass jeder "Joe Bloggs iPhone" sieht und ein vernünftiges setztSSID
.SSID
? Das '\' ist ein normales 'NIX-Escape-Zeichen. Ich denke, dies abgeleitet von Unicode (vielleicht U + 2019)\xE52\x80\x99
.Antworten:
Die iPhone-Eingabeaufforderung enthält das Unicode-Zeichen U + 2019 "einfaches Anführungszeichen". Dies ist gültig (wenn sehr unpraktisch).
Es ist einfach genug, Unicode-Zeichen in Zeichenfolgen aufzunehmen. Das Folgende würde dies an der
bash
Eingabeaufforderung wiederholen.Die (sehr skizzenhafte) Dokumentation von
man wpa_supplicant.conf
scheint nicht anzugeben, wie derssid
Parameter interpretiert wird. Sie können das obige Formular ausprobieren$'My Name\u2019s iPhone'
und prüfen, ob dies hilfreich ist.HINWEIS Die Zeichenfolge
"My Name\xE52\x80\x99s iPhone"
in Ihrer Frage ist kein gültiger Unicode (es gibt ein überschüssiges Zeichen5
), dies kann jedoch funktionieren, wenn Sie es korrigieren.quelle
Ich habe mir angesehen, wie wpa_supplicant die Konfigurationsdatei analysiert, und es scheint, als würde es die genauen Bytes zwischen
ssid="
und dem letzten extrahieren"
. Escapezeichen für Unicode (\ u) und Escapezeichen für Nicht-ASCII-Zeichen (\ x) funktionieren nicht.In Ihrem Fall müssten Sie Ihre SSID wie folgt angeben:
Was in einem Hex-Editor so aussehen würde:
Wenn Sie die Ausgabe von verwenden
iw
(bei der es sich nicht um ASCII-Zeichen handelt), können Sie mit Python die genauen Bytes interpretieren und in eine Datei schreiben:Beachten Sie, dass Sie, wenn Sie mit der SSID eine Verbindung zu einem Zugriffspunkt herstellen möchten,
A so called "SSID"
diese wie folgt eingeben können :ssid="A so called "SSID""
. Dies liegt daran, dass wpa_supplicant nach den Bytes zwischen dem ersten und dem letzten Anführungszeichen in einer Zeile sucht.Eine Einschränkung, die ich gefunden habe, ist, dass wpa_supplicant.conf keine Zeilenumbruchzeichen (0x0A) in der SSID akzeptiert, obwohl dies technisch möglich ist.
quelle
ssid="\U0001F4A9"
und dann habe ich ihn mit geschriebenfile.write(ssid.encode("UTF-8"))
. Lesen Sie diessid
Datei mitxxd
und kopieren Sie die Bytes ohne Leerzeichen. Die Zeile in meiner Konfiguration lautet jetztssid=f09f92a9
.Sie müssen Ihr iPhone umbenennen, um Leerzeichen zu entfernen. Dies kann unter Einstellungen> Allgemein> Info erfolgen.
Sobald Sie einen Namen ohne Leerzeichen ausgewählt haben, können Sie eine Verbindung zu einem Hotspot ohne Probleme herstellen.
quelle
Sie können die ssid, in diesem Fall "My Name's iPhone" (ohne Anführungszeichen), verwenden und unter https://www.browserling.com/tools/text-to-hex in hex konvertieren .
Nehmen Sie das Ergebnis, in diesem Fall 4d 79 20 4e 61 6d 65 27 73 20 69 50 68 6f 6e 65, und entfernen Sie die Leerzeichen.
Aktualisieren Sie /etc/wpa_supplicant/wpa_supplicant.conf:
Beenden Sie dann den Editor und im Terminal:
Wenn Sie keine Fehler haben, versuchen Sie, eine Verbindung herzustellen. Sollte arbeiten. Stellen Sie einfach sicher, dass Ihr ssid-Hex-Wert NICHT in Anführungszeichen steht und keine Leerzeichen enthält.
Prost!
quelle