Наконец-то свершилось, 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 Image #2084919, 262 KB](https://habrastorage.org/r/w1560/getpro/habr/post_images/8eb/fb6/3e4/8ebfb63e4772c0e24ca9bfd269df3958.png)
Нюанс в том, что при обновлении настроек оператора, становится невозможным отключить 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 и 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
Последних папок может не быть или они могут появиться после обновления настроек оператора.
Если что-то пойдёт не так, то нужно будет вернуть содержимое этих папок обратно.
Далее файлы для реализации:
Мой способ предполагает относительно удобное управление через интерфейс iOS функциями переключения, поэтому я лично пользуюсь iSSH для переключателя. Интерфейс переключения у меня выглядит так:
![Image #2084891, 65.4 KB Image #2084891, 65.4 KB](https://habrastorage.org/r/w1560/getpro/habr/post_images/71d/bef/b31/71dbefb313ed397a056caa09efd65d1c.png)
Приступим к установке скрипта.
Вот в принципе и всё, что нужно для переключения между профилями.
Продублирую вопросы, на которые, возможно, кто-нибудь ответит (если нет профиля на хабре, пишите mafet@mafet.ru):
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.
Новые технологии — это, конечно, хорошо, но есть нюанс. Как известно, Российские реалии таковы, что покрытие 3G и LTE желают лучшего и многим (как и мне) важнее длительность работы iPhone и стабильность сети, чем скорости LTE, которые могут в перспективе быть когда-нибудь, а в некоторых местах вовсе LTE в ближайшей перспективе даже не пахнет.
![Image #2084919, 262 KB Image #2084919, 262 KB](https://habrastorage.org/getpro/habr/post_images/8eb/fb6/3e4/8ebfb63e4772c0e24ca9bfd269df3958.png)
Нюанс в том, что при обновлении настроек оператора, становится невозможным отключить 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 и на других операторах, однако постарался сделать максимально защищённый и стабильный универсальный скрипт
Для реализации понадобится:
- Jailbreak iPhone 5S/5C
- Средство для взаимодействия с консолью (на выбор)
- MobileTerminal из сидии. Из плюсов — проще всего поставить и пользоваться. Но из минусов — нужно будет каждый раз вводить команду вручную.
- OpenSSH + SSH клиент, который умеет сохранять настройки и при соединении сразу запускать команду (я выбрал и купил iSSH, поскольку он достаточно идеален для работы с консолью и имеет нужные функции)
- Bash и команды dirname, echo, cat, grep, killall, cp, rm — по идее они должны ставиться автоматически при установке Cydia, но я не уверен
- Пакет afc2add из Cydia для доступа к полной файловой системе iOS (для работы по идее не нужен, но на момент установки может понадобиться хотя бы для бекапа)
- 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
Последних папок может не быть или они могут появиться после обновления настроек оператора.
Если что-то пойдёт не так, то нужно будет вернуть содержимое этих папок обратно.
Далее файлы для реализации:
- www.mafet.ru/lte/lteswitch.zip
Данный архив содержит скрипт с автооопределением текущего оператора, а так же набор Carrier Bundle для тройки операторов для режима 2G/3G only и для LTE - www.mafet.ru/lte/services
После перехода по ссылке, нужно данный файл просто сохранить на диске без изменений. Это нужно будет для нового инстанса SSH (подробности далее) - www.mafet.ru/lte/com.openssh.sshd2.plist
Это файл для реализации запуска второго инстанса SSH (подробнее далее)
- www.mafet.ru/lte/lteswitch_all.zip
Все файлы одним архивом
Мой способ предполагает относительно удобное управление через интерфейс iOS функциями переключения, поэтому я лично пользуюсь iSSH для переключателя. Интерфейс переключения у меня выглядит так:
![Image #2084891, 65.4 KB Image #2084891, 65.4 KB](https://habrastorage.org/getpro/habr/post_images/71d/bef/b31/71dbefb313ed397a056caa09efd65d1c.png)
Приступим к установке скрипта.
- Необходимо распаковать архив из пункта 1 и поместить в папку /var/root (или любую другую папку, это не сильно важно) с помощью упомянотого мной iFunBox, но может быть что угодно — главное результат. Должно получиться что-то типа:
- Поскольку архив 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
результатом будет что-то типа:
Переключение в режим LTE: /private/var/root/lteswitch/lteswitch.sh LTE
результатом будет что-то типа:
- Нужно бы сделать, чтоб всё было удобно. К сожалению я так и не нашёл работающий способ запускать скрипты с помощи иконки 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, чтоб сервис запустился.
- Файл services необходимо поместить в папку /etc или же вручную добавить в данный файл строку:
- Финальный этап, нужно настроить 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)
Для переключения на LTEDescription: 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):
- Как создавать иконки на SpringBoard на iOS7 для запуска скриптов? Возможно есть какой-то генератор?
- Как отключить ограничение на коннект к портам <1024 на iOS7?
- Существует ли более лайтовый способ переинициализации 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.