среда, 14 марта 2012 г.

ad-hoc wifi на Android

Как это водится в любом не-опенсорс продукте, в Андроиде есть вещи, которые невозможно понять и объяснить логически. Один из самых раздражающих примеров: отсутствие поддержки ad-hoc wifi (например, у меня дома для доступа в интернет через Wi-Fi используется ноутбук, подключённый к Beeline).
Впрочем, в таких случаях народ не сидит на месте, а пытается решить проблему своими силами. Гугль даст вам немало рецептов на эту тему, но ИМХО самым действенным и безопасным методом является правка конфигурационного файла wpa_supplicant.conf:
  1. скачиваем файл к себе на компьютер:
    adb pull /data/misc/wifi/wpa_supplicant.conf
  2. Правим файл: добавляем такие строки:
    eapol_version=2
    ap_scan=2

    network={
        ssid="ADHOCnet"
        scan_ssid=1
        key_mgmt=NONE
        priority=1
        mode=1
    # использовать, если установлен WEP-пароль
        wep_key0="use this param if needed"
    }
  3. сгружаем файл назад:
    adb push wpa_supplicant.conf /data/misc/wifi/
  4. поправляем права:
    adb shell chmod 666 /data/misc/wifi/wpa_supplicant.conf
(Трёх шестёрок бояться не нужно. Это всего лишь восьмеричное число.)
Ну а если Ваш кунг-фу как никогда силён, можете зайти на андроид и сделать всё прямо там, например, редактором vi.

Добавлено Чт дек 27 11:49:13 ALMT 2012:
Действительно, практика показала, что этот рецепт работает не всегда. Кроме диверсии с неподдержкой Ad-hoc в пользовательском интерфейсе (что обходится приведённым выше рецептом), бывает ещё "вырезанние" поддержки Ad-hoc из бинарника wpa_supplicant.

Конечно, если обойдётся только правкой wpa_supplicant.conf, это можно считать везением. Мне повезло дважды: на Samsung i5500 и RoverPad 3WT70 (на прошивке 2.3beta).
Cлучай с дефектным wpa_supplicant тяжёлый, и тут надо либо
  1. искать исправленные бинари wpa_supplicant в форумах
  2. брать патчи, и перекомпилировать самому
по пункту первому могу дать некоторые рекомендации (НЕКОТОРЫЕ ИЗ НИХ ОЧЕНЬ ОПАСНЫЕ!):
  1. Конечно, идеально взять файл, который сделан или проверен для Вашего гаджета и именно той прошивки, которая у Вас стоит. Вот очень правильный, "наш" ресурс.
  2. Если "готовенького" нет, то можно попробовать подобрать из того, что найдёт для Вас Google (типа такого запроса)
  3. перед установкой можно проверить:
    adb push wpa_supplicant /data/local
    adb shell chmod 755 /data/local/wpa_supplicant
    adb shell /data/local/wpa_supplicant -v
  4. И, таки, установить (примерно так, но если не знаете точно, что делают эти команды, НЕ ДЕЛАЙТЕ ТАК!):
    adb remount
    adb shell
    cd /system/bin
    cp wpa_supplicant wpa_supplicant.ORIG
    cat /data/local/wpa_supplicant > wpa_supplicant
удачи!

Добавлено Пт дек 28 17:15:34 ALMT 2012:
И, наконец, решение OVERKILL, если ничего больше не помогает, а Ad-hoc нужен любыми средствами, то можно обойти этого гадкого wpa_supplicant-а:
  1. добавить точку доступа в wpa_supplicant.conf, как написано выше
  2. adb shell iwconfig wlan0 mode Ad-hoc key "s:use this param if needed" essid "ADHOCnet"
Чуть погодя dhcp должен сам получить адрес и всё заработает!