Pull to refresh

Переключение между EDGE/3G/LTE в iPhone 5S/5C (jailbreak)

Network standards
Наконец-то свершилось, Apple включила возможность пользоваться LTE для всех Российских абонентов операторов Мегафон, МТС, Билайн на iPhone 5S/5C (http://www.iphones.ru/iNotes/346250). Ранее официально пользоваться LTE на iPhone могли только абоненты Билайн (http://www.iphones.ru/iNotes/336762).

Новые технологии — это, конечно, хорошо, но есть нюанс. Как известно, Российские реалии таковы, что покрытие 3G и LTE желают лучшего и многим (как и мне) важнее длительность работы iPhone и стабильность сети, чем скорости LTE, которые могут в перспективе быть когда-нибудь, а в некоторых местах вовсе LTE в ближайшей перспективе даже не пахнет.

Image #2084919, 262 KB

Нюанс в том, что при обновлении настроек оператора, становится невозможным отключить 3G. Даже выключение передачи данных полностью, телефон всё равно скачет между 2G и 3G при новых настройках. У меня дома, например, 3G очень плохо ловится и постоянно скачет между 3G и EDGE. Если включен 3G, начинаются проблемы с голосовыми вызовами, люди перестают дозваниваться ко мне с первого раза и прочее. Так же это сильно сказывается на батарее, поскольку постоянно происходит переключение между 2G/3G. Я думаю многие понимают, о чём я говорю.

Я лично решил эту проблему для себя и хочу поделиться решением со всеми.

Я покупал свой iPhone 5S модели A1530 с целью возможного пользования LTE от МТС, но я не подозревал о подставе невозможности отключения 3G. С выходом Jailbreak для iOS 7 стал исследовать возможности во-первых включения LTE, не дожидаясь официального анонса, во-вторых возможности переключения между 2G/3G/LTE. К сожалению, как показало гугление, на текущий момент нет стабильного твика, который позволил бы быстро и просто переключаться между 2G/3G/LTE. Я же начал придумывать свой способ.

Итак, мой способ переключения достаточно брутален и требует некоторых минимальных знаний и умений, связанных с jailbreak.
Способ заключается в том, что я создал скрипт, который переключает Carrier Bundle (грубо говоря настройки операторов) со старой версии, которая включает только 3G на новую и обратно.

Сразу хочу сказать, что способ обкатывался на iPhone 5S A1530 на операторе МТС. Я не знаю, как это будет работать на 5C и на других операторах, однако постарался сделать максимально защищённый и стабильный универсальный скрипт

Для реализации понадобится:
  1. Jailbreak iPhone 5S/5C
  2. Средство для взаимодействия с консолью (на выбор)
    • MobileTerminal из сидии. Из плюсов — проще всего поставить и пользоваться. Но из минусов — нужно будет каждый раз вводить команду вручную.
    • OpenSSH + SSH клиент, который умеет сохранять настройки и при соединении сразу запускать команду (я выбрал и купил iSSH, поскольку он достаточно идеален для работы с консолью и имеет нужные функции)

  3. Bash и команды dirname, echo, cat, grep, killall, cp, rm — по идее они должны ставиться автоматически при установке Cydia, но я не уверен
  4. Пакет afc2add из Cydia для доступа к полной файловой системе iOS (для работы по идее не нужен, но на момент установки может понадобиться хотя бы для бекапа)
  5. iFunBox или что-то похожее для доступа к ФС iOS для ручной установки скрипта


После реализации пункта 1 и 4, обязательно сделайте backup настроек оператора средством из пункта 5 или своим способом папок (в зависимости от своего оператора):
/System/Library/Carrier Bundles/iPhone/MTS_ru.bundle
/System/Library/Carrier Bundles/iPhone/MegaFon_ru.bundle
/System/Library/Carrier Bundles/iPhone/VimpelCom_ru.bundle
и
/private/var/mobile/Library/Carrier Bundles/iPhone/MTS_ru.bundle
/private/var/mobile/Library/Carrier Bundles/iPhone/MegaFon_ru.bundle
/private/var/mobile/Library/Carrier Bundles/iPhone/VimpelCom_ru.bundle
Последних папок может не быть или они могут появиться после обновления настроек оператора.
Если что-то пойдёт не так, то нужно будет вернуть содержимое этих папок обратно.

Далее файлы для реализации:
  1. www.mafet.ru/lte/lteswitch.zip
    Данный архив содержит скрипт с автооопределением текущего оператора, а так же набор Carrier Bundle для тройки операторов для режима 2G/3G only и для LTE
  2. www.mafet.ru/lte/services
    После перехода по ссылке, нужно данный файл просто сохранить на диске без изменений. Это нужно будет для нового инстанса SSH (подробности далее)
  3. www.mafet.ru/lte/com.openssh.sshd2.plist
    Это файл для реализации запуска второго инстанса SSH (подробнее далее)
  4. www.mafet.ru/lte/lteswitch_all.zip
    Все файлы одним архивом


Мой способ предполагает относительно удобное управление через интерфейс iOS функциями переключения, поэтому я лично пользуюсь iSSH для переключателя. Интерфейс переключения у меня выглядит так:
Image #2084891, 65.4 KB

Приступим к установке скрипта.
  • Необходимо распаковать архив из пункта 1 и поместить в папку /var/root (или любую другую папку, это не сильно важно) с помощью упомянотого мной iFunBox, но может быть что угодно — главное результат. Должно получиться что-то типа:
    Image #2084888, 31.5 KB
  • Поскольку архив zip и скопированные файлы вряд-ли сохранят атрибут исполняемости файла, на всякий случай нужно зайти в папку lteswitch через терминал и присвоить флаг исполняемости.
    Небольшой ликбез: Перемещение по папкам в unix системах делается с помощью cd разделители пути — обычный слэш /, в отличии от виндового обратного \. Т.е. путь пишется, как /var/root…
    Итак. Переходите в папку, например cd /private/var/root/lteswitch/ и вводите chmod +x lteswitch.sh
  • В принципе всё готово для работы переключателя, но не совсем удобно. Для проверки можно выполнить команды (путь может быть иной, в зависимости от того, куда вы скопируете скрипт)
    Переключение в режим 2G/3G only: /private/var/root/lteswitch/lteswitch.sh 3G
    результатом будет что-то типа:
    Image #2084910, 25.8 KB
    Переключение в режим LTE: /private/var/root/lteswitch/lteswitch.sh LTE
    результатом будет что-то типа:
    Image #2084906, 24.5 KB
  • Нужно бы сделать, чтоб всё было удобно. К сожалению я так и не нашёл работающий способ запускать скрипты с помощи иконки SpringBoard и по этому делаю это через iSSH, как софтину, которая умеет запускать команды при соединении по SSH, но для этого нужно подготовить SSHd. Если кто-то знает способ запускать скрипты с иконки SpringBoard — очень жду в комментах. Перепишу статью и будет гораздо меньше гемороя с SSH.
    • Файл services необходимо поместить в папку /etc или же вручную добавить в данный файл строку:
      sshalt 8022/tcp # SSH Remote Login Protocol
      Данной строчкой мы добавляем описание порта 8022 для нового инстанса SSH
      Это нужно для того, чтоб с localhost можно было подключаться к SSH. Я не знаю зачем, но Apple с 7 прошивки запретила возможность коннектиться к портам ниже 1024 локально. Если кто знает, как это поправить — опять же очень жду в комментах.
    • Опять же в рамках поднятия SSH на порту 8022, нужно скопировать файл com.openssh.sshd2.plist в папку /Library/LaunchDaemons/ и перезапустить iPhone, чтоб сервис запустился.

  • Финальный этап, нужно настроить iSSH (или аналогичное ПО) для удобного запуска скрипта. Для этого нужно добавить две конфигурации с такими параметрами:
    Для переключения на 2G/3G
    Description: Switch to 3G (название может быть любое)
    Host: 127.0.0.1
    Port: 8022
    Login: root
    Command: /private/var/root/lteswitch/lteswitch.sh 3G
    Password: пароль для root (по-умолчанию alpine)

    Для переключения на LTE
    Description: Switch to LTE (название может быть любое)
    Host: 127.0.0.1
    Port: 8022
    Login: root
    Command: /private/var/root/lteswitch/lteswitch.sh LTE
    Password: пароль для root (по-умолчанию alpine)



Вот в принципе и всё, что нужно для переключения между профилями.
Продублирую вопросы, на которые, возможно, кто-нибудь ответит (если нет профиля на хабре, пишите mafet@mafet.ru):
  1. Как создавать иконки на SpringBoard на iOS7 для запуска скриптов? Возможно есть какой-то генератор?
  2. Как отключить ограничение на коннект к портам <1024 на iOS7?
  3. Существует ли более лайтовый способ переинициализации Carrier Bundle, кроме как killall CommCenter?

p.s. 0 Как ни странно, SSH никак не ест батарею, поскольку сам демон по сути не запущен. Слушает порт аналог inetd. Сам sshd запускается, только при установлении соединения от клиента.
p.s. 1 После установки OpenSSH обязательно поменяйте пароль со стандартного alpine на свой с помощью команды в консоли: passwd <новый пароль>.
p.s. 2 Если нужно выпилить LTE для операторов других стран или других операторов России, то методика та же самая, но нужно найти настройки оператора без функций LTE и подменить текущие. Хотя по логике, чтоб выпилить LTE для произвольного оператора, достаточно выполнить команду rm /private/var/mobile/Library/Carrier\ Bundle.bundle/overrides_* и перезагрузить телефон, но это на свой страх и риск и желательно забекапить перед этим содержимое /private/var/mobile/Library/Carrier Bundle.bundle.
p.s. 3 Если нужно выключить 3G и LTE и нет jailbreak, можно воспользоваться утилитой iRoseTool.
Tags:iphoneltejailbreak3gпереключениеedgeтелекомы
Hubs: Network standards
Total votes 66: ↑47 and ↓19+28
Views195K

Popular right now

Top of the last 24 hours