Более новые айфоны будут транслировать SSID в режиме точки доступа как таковой:
My Name\342\\\200\\\231\\s iPhone
Я наблюдал этот SSID в GUI.
Когда я беру SSID через командную строку:
$ sudo iwlist wlan0 scan | grep ESSID
> My Name\xE52\x80\x99s iPhone
В iPhone это выглядит как:
My Name's iPhone
Если в wpa_supplicant.conf я введу:
network={
ssid="My Name's iPhone"
psk="my_passcode"
}
Raspberry Pi не будет подключаться к точке доступа iPhone.
Однако, если wpa_supplicant.conf
я введу:
network={
ssid="My Name\342\\\200\\\231\s iPhone"
psk="my_passcode"
}
Я получаю сообщение об ошибке в командной строке.
$ 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
Через графический интерфейс я получаю ошибку «Неверный аргумент».
Если в wpa_supplicant.conf
я вхожу:
network={
ssid="My Name\xE52\x80\x99s iPhone"
psk="my_passcode"
}
Тогда raspbian не будет подключаться к нему и подключится к сети с более низким приоритетом (предположим, что у меня правильно установлены приоритеты, которые я протестировал).
SSID
iPhone? Я не хочу, чтобы все видели «iPhone Джо Блоггса» в любом случае и внесли разумный вкладSSID
.SSID
? '\' - это обычный управляющий символ NIX. Я предполагаю, что это происходит от Unicode (возможно, U + 2019)\xE52\x80\x99
.Ответы:
Приглашение iPhone содержит символ Unicode U + 2019 «одинарная правая кавычка». Это действительно (если очень неудобно).
Достаточно просто включить символы Unicode в строки. Следующее повторяет это в
bash
командной строке.(Очень схематичная) документация
man wpa_supplicant.conf
, похоже, не определяет, какssid
интерпретируется параметр. Вы можете попробовать форму выше$'My Name\u2019s iPhone'
и посмотреть, поможет ли это.ПРИМЕЧАНИЕ Строка
"My Name\xE52\x80\x99s iPhone"
в вашем вопросе не является допустимым Unicode (есть лишний символ5
), но это МОЖЕТ работать, если вы исправите это.источник
Я посмотрел, как wpa_supplicant анализирует файл конфигурации, и кажется, что он извлекает точные байты между
ssid="
последним и последним"
. Экранированный Unicode (\ u) и экранированные символы не-ascii (\ x) не будут работать.В вашем случае вы должны указать свой SSID следующим образом:
Который будет выглядеть так в шестнадцатеричном редакторе:
Если вы используете вывод из
iw
(который выходит за пределы символов, отличных от ascii), вы можете использовать Python для интерпретации и записи точных байтов в файл:Обратите внимание , что если вы хотите подключиться к точке доступа с SSID
A so called "SSID"
он будет работать , чтобы ввести его в :ssid="A so called "SSID""
. Это потому, что wpa_supplicant будет искать байты между первой и последней кавычкой в строке.Одно ограничение, которое я обнаружил, заключается в том, что wpa_supplicant.conf не будет принимать символы новой строки (0x0A) в SSID, даже если это технически возможно.
источник
ssid="\U0001F4A9"
и затем я написал его сfile.write(ssid.encode("UTF-8"))
. Прочитатьssid
файлxxd
и скопировать байты без пробелов. Строка в моем конфиге теперь читаетssid=f09f92a9
.Вы можете взять ssid, в данном случае «iPhone моего имени» (без кавычек), и конвертировать в гекс, используя https://www.browserling.com/tools/text-to-hex .
Возьмите результат, в этом случае 4d 79 20 4e 61 6d 65 e2 80 99 73 20 69 50 68 6f 6e 65 и удалите пробелы.
Или в баш
Обновите /etc/wpa_supplicant/wpa_supplicant.conf:
Затем выйдите из редактора и в терминале:
Если у вас нет ошибок, попробуйте подключиться. Должно сработать. Просто убедитесь, что ваше шестнадцатеричное значение ssid НЕ в кавычках и не содержит пробелов.
Ура!
источник
Вы должны переименовать свой iPhone, чтобы удалить пробелы ... это можно сделать в меню «Настройки»> «Основные»> «О программе».
Как только вы выбрали имя без пробелов, вы сможете подключиться к горячей точке, которая не вызывает проблем.
источник