linux і модем: спілкування в терміналі…

| інтернет, комп'ютери, linux, підказки

дуже давно не згадував про ту пару 3g-модемів, що колись придбав собі з пакетами київстару. головною тому причиною були неадекватні київстарівські тарифи на інтернет. тож вже розлочені (дякую юрі новоставському) модеми лежали собі на поличці, аж поки один я не віддав братові, а другий… другий вирішив таки використати — але цього разу вже з передплаченим сервісом від utel’а, точніше тепер вже від укртелекому.

з підключенням розлоченого модема до linux’а не все пішло гладко, тож треба розбиратися… але про особливості підключення розповім за іншим разом, а наразі так-сяк інтернет вже працює — цей допис саме публікую, підключившись через модем. допис про інше.

раніше я стрічався із задачкою змусити модем підключатися лише до 3g-мережі utel, ігноруючи gprs/edge в київстарівському (дорогому) роумінгу… і вирішував її (точніше, думав, що вирішував) за допомогою пк з windows і «рідного» київстарівського софта. справа не в теоретично вищій швидкості, а в контрольованості витрат. цього разу вирішив таки знайти спосіб зробити це прямо в linux’і… і дізнався багато нового.

по-перше, виявляється (сюрприз!), що модем zte mf100 не пам’ятає налаштування режиму вибору мережі… тобто якщо я раз в рідній програмі наказав йому «чіпляти» тільки 3g-мережу — це налаштування зберігається не модемом, а цією програмою, і при підключенні до іншого комп’ютера модем повернеться до режиму «wcdma/edge/gprs з пріоритетом найсильнішого сигналу» — а найкращий сигнал у нас навіть в києві переважно саме в gprs/edge. (поновлення: насправді можна змусити модем запам’ятати налаштування).

по-друге, складну операцію з відключення функції zerocd через видалення пари файлів на модемі, після якої модем починає нормально розпізнаватися в linux’і, тепер можна не виконувати — і, більше того, не треба цього робити! бо сучасні дистрибутиви вже мають в наборі софтинку usb_modeswitch і вміють автоматично переключати режим роботи такого «свистка»… а якщо навіть не вміють — той же ефект можна отримати однією простою at-командою для модема, і за необхідності повернути все «як було» іншою простою командою.

по-третє, купу інших операцій з модемом, включаючи встановлення режиму вибору мережі, сканування доступних мереж, отримання службової інформації (imei, номер sim-карти, рівень сигналу тощо) та відсилку ussd-кодів (для перевірки балансу тощо) — також можна здійснювати за допомогою at-команд.

і нарешті — найцікавіше. власне, увесь допис заради цієї невеличкої нотатки собі на пам’ять: як надсилати команди модему і (головне) отримати від нього якусь реакцію? в деталях це за посиланням вище не описано.

запихаємо модем до роз’єма usb, трішки чекаємо, і перевіряємо, чи система його побачила і впізнала. по-перше, команда lsusb має в одному з рядків дати щось таке:
Bus 001 Device 004: ID 19d2:0016 ONDA Communication S.p.A.
ідентифікатори 19d2:0016 згадувалися в моїх попередніх дописах про mf100.  команда dmesg | tail -n 50 | grep "GSM modem" має показати кілька рядків, серед яких будуть такі:
option 1-1:1.0: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
option 1-1:1.1: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
option 1-1:1.2: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
це означає, що система віддала модему три віртуальних порти. лише останній, ttyusb2 використовується для звичайного зв’язку з модемом.

далі починається проста вулична магія. відкриваємо два термінали. в одному будемо спостерігати реакцію модема на команди — але спершу треба в ньому дати команду (див. скріншот, лівий термінал):
$ sudo cat /dev/ttyUSB2
…і надати системі пароль адміністратора. з’єднання з інтернетом не має бути встановлене — інакше порт виявиться зайнятий. в другому терміналі можна починати забавлятися. наприклад:
$ echo -e "AT+COPS=?\r\n" > /dev/ttyUSB2
у відповідь на цю команду модем (подумавши довгенько) видасть в перший термінал (див. скріншот) перелік доступних мереж. інші команди можна підглянути в оригінальному дописі, на який я вже посилався.

важливо! щоби продовжити роботу з модемом — підключитися за допомогою wvdial тощо — треба «сказати» ctrl+c в першому терміналі… інакше wvdial не «бачитиме» реакції модема на свої at-команди.

наразі все. детальніше про роботу з модемчиком, швидкість та якість зв’язку і таке інше розповім пізніше, коли ще пограюся.

поновлення. ще кілька цікавих команд перераховано тут. схоже, що є спосіб змусити модем запам’ятати режим вибору мережі — командою at&w… але не пробував ще.