Как стать автором
Обновить

Комментарии 20

Когда пишут про линукс и перегрузиться — хочется плакать :( Ведь, насколько было у меня, достаточно просто сделать рестарт udev сервису, т.к. правило на добавления и определение флешки как модема отводится именно ему.

Ну а вообще зачет, хоть кто-то сделал для этого более-менее адекватный ман.
Хм. Если честно, мне тоже эта строчка как-то не нравилась. Сейчас изменю, спасибо!
Не совсем в тему, но всё же.
Я тут прикупил хуавеевский 3G-роутер E586 в исполнении «от Мегафона» — он гораздо, гораздо удобнее 3G-модемов, и при этом разница в цене(если покупать в том же мегафоне) не такая уж и большая. По USB он видится как Ethernet-интерфейс + умеет раздавать вайфай и батарейки хватает на 4-5 часов работы. Все эти usb-modeswitch-и больше не нужны, равно как и прыжки с wvdial и т.п.
Да, это удобно, не спорю, я сам раньше пользовал тот же MR3020. Только вот всё же хотелось задействовать этот ноутбук, плюс изучить Linux. При этом обе цели достигнуты =) К тому же я стремлюсь к «Один раз настроил — больше не копаешься», так что в конце нетбук будет работать почти так же хорошо, как этот модем.
Автор, это, конечно, все хорошо и работает, но это девяностые. Вы могли бы поставить NetworkManager и создать 3g-соединение там буквально 4-5 строчками в конфиге. Более того, вы могли бы настроить NAT тоже буквально 3-5 строчками. И еще больше: вы могли бы настроить раздачу интернета через вайфай еще одними 3-5 строчками. И это еще не все! Вы смогли бы отслеживать состояние 3g-соединения через dbus какими-нибудь самописными скриптами (если это требуется) и производить действия, только когда его состояние изменяется, а не постоянно опрашивая.
А по мне так нормально написано. Как и любой Howto нужно читать через призму собственных требований/предпочтений и данный howto хорошая точка отправки. Хорошо, что автор указал про usb-modeswitch — на него сейчас часто приходится наступать.
Что не понравилось — то, что автор не нашёл решения на «ньюансы использования»:
… даже если что-то глючит и модем отключается от сети? Ну тогда поможет следующий скрипт…
По мне, так это костыль, думаю есть более правильное решение.
… Пока что я не могу предоставить нормального решения, поскольку сам ещё не занялся этим. Предполагают, что это из-за того, что программа usb-modeswitch не отрабатывает корректно...
Значит нужно ожидать этих проблем и бороться самому(.
В условиях плохого приёма соединение часто обрубается… Дело в том, что у портов ЮСБ есть ограничение на отдаваемый ток, при превышении которого, насколько я помню, порт отрубается.
А можно какие-нибудь доказательства? У меня складываются сомнения, что это так.
По мне, так это костыль, думаю есть более правильное решение.

Да, но… Падения соединения могут происходить, в теории, по множеству причин. Бывает даже так, что падения происходят каждые две минуты из-за того, что модем пытается узнать — используют ли его с фирменной утилитой, которая, кроме прочего, ещё и команды особые отсылает, и если не используют — кладёт трубку. Если соединение часто рвётся по неизвестным причинам — этот скрипт оптимальное решение, чтобы хотя бы временно обеспечить более-менее стабильную связь без работы ручками.
Значит нужно ожидать этих проблем и бороться самому(.

Да, тут Вы правы, просто пока что я совершенно забыл про этот аспект =) Пока что он не актуален, но в будущем я обязательно как минимум допишу это в статью.
А можно какие-нибудь доказательства? У меня складываются сомнения, что это так.

Прямых доказательств, если честно, нет. Но я действительно испытывал такое в месте со слабым сигналом сети — порт просто отрубался. вот и всё. Тогда колхозить что-либо с кабелем не было возможности, а активных хабов, как совершенно правильно ниже советует Aspos, рядом не было. Так что предупреждаю =)
Да, но… Падения соединения могут происходить, в теории, по множеству причин...

Согласен, просто решение с применением cron видится мне всегда костылеобразным. Тут скрипт проверяет не вылетел ли wvdial. Я с ним совсем немного работал, но… неужели он при разрыве связи выгружается из памяти без возможности передозвона?
Хм, по моему опыту — так и есть. Насчёт функции передозвона — сейчас погуглю.
Auto Reconnect = on
Оно! Блин, я ступил что-то. Скоро отредактирую статью.
Ну или так =) Вы знаете, я писал статью, зная про то, что этот метод отлично работает, но не подозревая о существовании nmcli и cnetworkmanager, потому, не ожидая подвохов, использовал его =) Спасибо, буду знать, на что ориентироваться в будущем.
Про отваливавающийся USB-порт: лечится USB-хабом с внешним питанием. Тогда модем не будет «просаживать» порт компьютера и тот не будет отключаться.
Да, Вы совершенно правы, забыл о таком простом устройстве. Спасибо за совет.
В Debian/Ubuntu используйте iptables-persistent.
В статье есть ремарка о том, что это не подходит для моего случая. Но спасибо за напоминание =)
Нам необходимо лишь одно — под номером 0, остальные 2 мы не используем — они не для наших целей. Насколько мне известно, одно из них, скорее всего, используется для отсылки СМС, а второе — для просмотра уровня сигнала сети и прочего.
Немного не так: устройство 0 получает команды и отдает статус команд (а СМС читаются и отправляются тоже через команды), 1 — для звонков, 2 — собственно интернет (если я последние 2 не путаю, давно интересовался).
Я буду использовать программу wvdial, дополнительно к ней нужно установить пакет ppp, если он ещё не установлен.
при запуске wvdial ”занимает собой” всю консоль, не давая возможности запустить что-либо ещё
Вот поэтому либо использовать NetworkManager как высокоуровневую запускалку, либо спускаться на самый низ к pppd, т.к. wvdial — обертка к pppd, о чем и говорит строка
PPPD Options
Они оба консоль не занимают: у NM GUI не касается вообще, а консольный вариант nmcli, как и pppd, освобождает после выполнения (уходят в фон).
Modem = /dev/ttyUSB0
здесь стоит добавить, что если два модема/еще какая ситуация, да хоть зависон первых трех портов, то есть модем выдернули, а порты не освободились — udev присвоит адреса ttyUSB3/5 и надо прописать решение для этого случая (обращаться к /dev/ttyUSB3). Хотя два модема — экзотика, но бывает. Телефон в качестве модема через кабель может появиться как /dev/ttyACM0.
для этого надо было бы определять принадлежность вставленной сим-карты тому или иному провайдеру, а решение с использованием этого становится очень сложным.
Здесь отца русской демократии спасет команда AT+COPS?, которая возвратит оператора, к которому зарегистрировались, в виде +COPS: 0,2,«25002»,0 где первый 0 — домашний оператор, а число в кавычках — международный код оператора (Мегафон в данном случае), список кодов операторов вместе с их названиями вызывается командой AT+COPN (российские начинаются на 250). Вот чтобы определить, какая из симок одного оператора стоит, надо будет поискать, сходу не нашел такого.
usb-modeswitch не отрабатывает корректно, если модем вставлен в компьютер при запуске системы
не замечал, чаще pppd зависает и не освобождает порт. Для программного перезапуска USB был нагуглен файлик, к сожалению, сейчас удален оттуда. Закинул на pastebin, автору респект.

Еще отмечу, что параметр `lock` указывает монополизировать порт, так что если в дальнейшем столкнетесь с отказом своего веб-интерфейса работать при запущенном интернете, уберите.
устройство 0 получает команды и отдает статус команд (а СМС читаются и отправляются тоже через команды), 1 — для звонков, 2 — собственно интернет (если я последние 2 не путаю, давно интересовался).

Хм, ну интернет точно работает через нулевой порт, через остальные 2 не работает, так что — видимо, это варьируется в зависимости от модема, чего, впрочем, следует ожидать.
здесь стоит добавить, что если два модема/еще какая ситуация, да хоть зависон первых трех портов, то есть модем выдернули, а порты не освободились — udev присвоит адреса ttyUSB3/5 и надо прописать решение для этого случая (обращаться к /dev/ttyUSB3). Хотя два модема — экзотика, но бывает. Телефон в качестве модема через кабель может появиться как /dev/ttyACM0.

Да, такое имеет место быть. Но достаточно редко, впрочем, пока что не планируется подключать ещё и второй модем. Предлагаете упомянуть это в статье?
Вот поэтому либо использовать NetworkManager как высокоуровневую запускалку, либо спускаться на самый низ к pppd, т.к. wvdial — обертка к pppd, о чем и говорит строка

А, собственно, нужно ли подниматься на уровень выше? =) Всё пока работает и нормально конфигурируется, честно-честно. То, что обёртка — понимаю, но обёртка более чем работоспособная и полезная. Понимаю, что тут всё решает глубина погружения =)
Здесь отца русской демократии спасет команда AT+COPS?...

Спасибо за команду. Хорошо бы проверить, везде ли она работает. Думаю, если будет свободное время, напишу решение для автоподключения на базе этой команды. А пока что — у меня только одна симка у каждого оператора, значит, пока что решение подходит =) У меня пока проблемы с pySerial, не могу нормально наладить терминал на python для работы с модемом. Как налажу, буду писать модули для взаимодействия и настройки.
Для программного перезапуска USB был нагуглен файлик, к сожалению, сейчас удален оттуда. Закинул на pastebin, автору респект.

Вам тоже спасибо большое за то, что поделились =) Я вроде как видел что-то похожее на ГитХабе, только тогда мне почему-то показалось, что оно перезапускает все USB-контроллеры, подключённые к компьютеру. У себя скомпилирую, проверю, если заработает нормально — буду использовать.
(тихим голосом) А как это лучше компилировать? Использовать просто стандартную команду gcc или какие-либо опции? А то я нуб в этих делах, с С хорошо если HelloWorld более-менее нормально написал, из консоли с помощью gcc компилил пару раз и давно...
Еще отмечу, что параметр `lock` указывает монополизировать порт, так что если в дальнейшем столкнетесь с отказом своего веб-интерфейса работать при запущенном интернете, уберите.

Хм, веб-интерфейс будет брать информацию с другого порта — /dev/ttyUSB1 или 2, если вы об этом. Но — спасибо, учту при дебаге.
Хм, ну интернет точно работает через нулевой порт, через остальные 2 не работает, так что — видимо, это варьируется в зависимости от модема, чего, впрочем, следует ожидать.
Я в исходники не лазил, сказать не могу. В принципе да, раз уж телефону хватает одного порта, тогда так и есть. Для чего остальные два — не скажу, чтоб опять не слажать.

пока что не планируется подключать ещё и второй модем. Предлагаете упомянуть это в статье?
Ну одна строка роли не сыграет, лучше указать. Туториал есть туториал, не просто в два жеста нарисовать сову, а понять, почему к такому порту в таком случае.

А, собственно, нужно ли подниматься на уровень выше? =) Всё пока работает и нормально конфигурируется, честно-честно. То, что обёртка — понимаю, но обёртка более чем работоспособная и полезная. Понимаю, что тут всё решает глубина погружения =)
Лично я начинал с автоконфигурялки в SIDUX'е. Там только порт и APN надо было. Но когда поставил на комп — pppd показался легче KPPP и wvdial тем, что запуск в одном месте, параметры в другом, логин/пароль в третьем, сразу понятно, что куда и где напортачил. С pppd легче тестировать модем, понаписал команд вида ATZ (сброс), AT&V (показать настройки), AT+CSQ (уровень сигнала), AT+CLAC (доступные команды) и читаешь выхлоп тут же. Опять же решение мультидистрибутивное выходит, не все потянут Дебиан (я, например).

Спасибо за команду. Хорошо бы проверить, везде ли она работает. Думаю, если будет свободное время, напишу решение для автоподключения на базе этой команды. А пока что — у меня только одна симка у каждого оператора, значит, пока что решение подходит =) У меня пока проблемы с pySerial, не могу нормально наладить терминал на python для работы с модемом. Как налажу, буду писать модули для взаимодействия и настройки.
Я на питоне (2.7) написал гуишку смотреть счет и уровень сигнала, ну и произвольные команды выполнять. Хотел развить в демона, но не потянул, да и с нуля надо переписывать. В личку могу отправить.

Вам тоже спасибо большое за то, что поделились =) Я вроде как видел что-то похожее на ГитХабе, только тогда мне почему-то показалось, что оно перезапускает все USB-контроллеры, подключённые к компьютеру. У себя скомпилирую, проверю, если заработает нормально — буду использовать.
(тихим голосом) А как это лучше компилировать? Использовать просто стандартную команду gcc или какие-либо опции? А то я нуб в этих делах, с С хорошо если HelloWorld более-менее нормально написал, из консоли с помощью gcc компилил пару раз и давно...
Да, на гитхабе то же самое, только шапка другая. Не сохранилось команды компиляции, но по идее — как и там
 gcc -o usbreset usbreset.c 


Хм, веб-интерфейс будет брать информацию с другого порта — /dev/ttyUSB1 или 2, если вы об этом. Но — спасибо, учту при дебаге
Вот о об этом я и говорил, что другие порты хз для чего, работать придется через 0.
Ну одна строка роли не сыграет, лучше указать. Туториал есть туториал, не просто в два жеста нарисовать сову, а понять, почему к такому порту в таком случае.

Без проблем, в ближайшее время исправлю, спасибо за совет!
Я на питоне (2.7) написал гуишку смотреть счет и уровень сигнала, ну и произвольные команды выполнять. Хотел развить в демона, но не потянул, да и с нуля надо переписывать. В личку могу отправить.

Не откажусь, если честно. GUI на Питоне ещё не писал, кроме web, будет интересно взглянуть как на управление интерфейсом, так и на методы опроса модема =)

Остальные порты, насколько я помню по паре манов, точно можно использовать так — один для отправки смс, один — для просмотра статуса.
Спасибо за советы!
Правда Ваша, и тут облажался. /dev/ttyUSB2, конечно.
Лажают все, знаете, никто не исключение =) К тому же — это на самом деле варьируется. У кого-то работало через порт номер 1, у кого-о — номер два. Правда, это действительно редкость.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории