Мне очень нравится линейка продуктов Unifi, но так как я тоже большой фанат эмодзи в SSID, меня немного расстроило, что их не поддерживают. Однако, учитывая другие упоминания, что сам стандарт должен это поддерживать, раз уж я смог заставить это работать на всех остальных роутерах, что только находил, и зная, что хотя бы в какой-то предыдущей версии это частично работало, я решил разобраться.
Кратко: работает! Но потребуется немного усилий.
Сначала:
Добавляем эмодзи в интерфейс
Хотя интерфейс контроллера не позволяет вводить эмодзи из-за валидации, сама конфигурация хранится в MongoDB, поэтому через SSH-туннель к MongoDB на контроллере (127.0.0.1:27117) можно напрямую изменить конфиг. Меняя имя в документах в коллекции wlanconf, после обновления в контроллере появится ваш крутой новый SSID с эмодзи. Учтите: нельзя менять настройки, не вернув имя обратно, поэтому любые изменения сети требуют временно вернуть SSID в обычный вид, сохранить остальные изменения, а потом поменять имя напрямую в MongoDB.
Если код эмодзи (проверяется, например, на emojipedia.org) ниже U+FFFF — этого достаточно. Принудительно обновите настройки WLAN на своих точках доступа — и всё будет работать.
Если же хотите использовать 🍆, 🚀 или 🤓 — у них код выше U+FFFF, и в SSID получается странный набор символов, к которому не подключиться. Значит:
Как исправить «сложные» эмодзи:
Hex-код 🍆 — 'F0 9F 8D 86', но есть альтернативный, не UTF-совместимый вариант: 'ed a0 bc ed bd 86'. Хотя system.cfg для AP в /var/lib/unify/ap/[mac] содержит правильный бинарный код эмодзи, на самом AP стоит альтернативный шестибайтный код. Значит, что-то идёт не так при передаче. Если же «починить» system.cfg на устройстве и заново запустить все скрипты настроек, эмодзи заработают!
Идеальный вариант — чтобы Ubnt исправили эту ошибку передачи и просто убрали фильтр из интерфейса. А пока я добавил небольшой скрипт в /usr/etc/rc.d/rc, который заменяет неправильный код эмодзи на правильный. Команда сводится к такому виду:
LC_ALL='C' sed 's/old/new/g' system.cfg > tmp.fixemoji; mv tmp.fixemoji system.cfg
Далее через hex-редактор я заменил «old» и «new» соответственно на неправильный шестибайтный код и правильный четырёхбайтный. Сейчас это выдержало несколько (тестовых) обновлений, сети работают отлично.
Надеюсь, это кому-то поможет или даст достаточно информации, чтобы Ubnt исправили это в будущих релизах.
P.S. Сделал небольшой скрипт, который берёт несколько эмодзи, проверяет, нужен ли фикс, и если да — создаёт файл с исправлением:
Кратко: работает! Но потребуется немного усилий.
Сначала:
Добавляем эмодзи в интерфейс
Хотя интерфейс контроллера не позволяет вводить эмодзи из-за валидации, сама конфигурация хранится в MongoDB, поэтому через SSH-туннель к MongoDB на контроллере (127.0.0.1:27117) можно напрямую изменить конфиг. Меняя имя в документах в коллекции wlanconf, после обновления в контроллере появится ваш крутой новый SSID с эмодзи. Учтите: нельзя менять настройки, не вернув имя обратно, поэтому любые изменения сети требуют временно вернуть SSID в обычный вид, сохранить остальные изменения, а потом поменять имя напрямую в MongoDB.
Если код эмодзи (проверяется, например, на emojipedia.org) ниже U+FFFF — этого достаточно. Принудительно обновите настройки WLAN на своих точках доступа — и всё будет работать.
Если же хотите использовать 🍆, 🚀 или 🤓 — у них код выше U+FFFF, и в SSID получается странный набор символов, к которому не подключиться. Значит:
Как исправить «сложные» эмодзи:
Hex-код 🍆 — 'F0 9F 8D 86', но есть альтернативный, не UTF-совместимый вариант: 'ed a0 bc ed bd 86'. Хотя system.cfg для AP в /var/lib/unify/ap/[mac] содержит правильный бинарный код эмодзи, на самом AP стоит альтернативный шестибайтный код. Значит, что-то идёт не так при передаче. Если же «починить» system.cfg на устройстве и заново запустить все скрипты настроек, эмодзи заработают!
Идеальный вариант — чтобы Ubnt исправили эту ошибку передачи и просто убрали фильтр из интерфейса. А пока я добавил небольшой скрипт в /usr/etc/rc.d/rc, который заменяет неправильный код эмодзи на правильный. Команда сводится к такому виду:
LC_ALL='C' sed 's/old/new/g' system.cfg > tmp.fixemoji; mv tmp.fixemoji system.cfg
Далее через hex-редактор я заменил «old» и «new» соответственно на неправильный шестибайтный код и правильный четырёхбайтный. Сейчас это выдержало несколько (тестовых) обновлений, сети работают отлично.
Надеюсь, это кому-то поможет или даст достаточно информации, чтобы Ubnt исправили это в будущих релизах.
P.S. Сделал небольшой скрипт, который берёт несколько эмодзи, проверяет, нужен ли фикс, и если да — создаёт файл с исправлением:


