Это попытка работать вместе с Debian. Проверьте канал # debian-ubuntu на OFTC
Для этой цели вы можете использовать утилиту командной строки gammu. Если код USSD для получения вашего баланса (скажем) * 901 #, вы должны выполнить:
gammu getussd "*901#"
Для инструкций по установке и настройке и более подробной информации, gammu .
Вы можете сделать их с пакетом modem-manager-gui. Но он доступен только для 13.10. В других версиях вы должны управлять ими в терминале с пакетом modemmanager.
Если вы находитесь в Ubuntu 13.10:
sudo apt-get install modem-manager-gui modemmanager
В других версиях Ubuntu вы можете это сделать с приложением prepaid-manager-applet
sudo apt-get install prepaid-manager-applet
Вы можете использовать инструмент командной строки Linux gsm-ussd для отправки кодов USSD, получения ответов и даже навигации по меню USSD (хотя это не было стабильно / полезно для меня).
Для детальной установки и инструкции по настройке см. в gsm-ussd . Пакет Debian версии 0.4, предлагаемый там для установки, является последней версией ветвей dev.
Если код USSD для получения вашего баланса (скажем) * 901 #, а ваш модем - /dev/ttyUSB1, вы должны выполнить это для отправьте простой USSD-код и отобразите ответ сети (не приводя к меню):
gsm-ussd -m /dev/ttyUSB1 "*901#"
Вы можете использовать клиент командной строки mmcli для модемного администратора Ubuntu по умолчанию для отправки кода USSD и получить ответ:
Начните с перечисления своих модемов: mmcli -L. Это покажет путь к модему, например /org/freedesktop/ModemManager1/Modem/0. Помните, что номер в конце - это индекс модема. Включите модем (если ваш индекс модема равен 0): mmcli -m 0 -e Отправьте запрос USSD и отобразите ответ. Предполагая, что код USSD вашего оператора сети для получения баланса составляет * 901 #, команда будет выглядеть следующим образом:mmcli -m 0 --3gpp-ussd-initiate="*901#"
Для случая, когда запрос на баланс требует использования меню USSD: это также возможно с , см. mmcli .
Вы можете использовать команды AT напрямую, чтобы запросить свой баланс через USSD. Для этого используйте любую программу последовательного терминала, которая позволяет напрямую связываться с вашим модемом (putty, minicom и т. Д.).
Я выбрал atinout, потому что он прекрасно сочетался с командной строкой. Сначала вы установите его:
sudo apt-get install ruby-ronn;
git clone git://git.code.sf.net/p/atinout/code atinout;
cd atinout;
make;
sudo checkinstall make install;
Затем, если вы используете ModemManager (по умолчанию в Ubuntu Linux), вам может потребоваться сначала отключить его, чтобы atinout мог получить доступ к вашему модему:
sudo stop modemmanager;
Теперь, чтобы отправить код USSD для запроса баланса в сеть (скажем, * 901 #) и отобразить результат, вы должны использовать эту команду:
atinout - /dev/ttyUSB1 - < <(echo "AT+CUSD=1,\"*901#\",15") && sleep 4 && \
atinout - /dev/ttyUSB1 - < <(echo "AT");
Это предполагает, что ваш модем находится в /dev/ttyUSB1. Команда AT во второй команде atinout предназначена для того, чтобы получить ответ на нежелательный ответ USSD как побочный эффект, который должен был появиться после sleep.
В случае запроса вашего баланса требует использования меню USSD: это также возможно с atinout, atinout .
Для меня, как решения на основе ModemManager, так и gammu работают неправильно с многострочным ответом USSD; например мой оператор имеет команду USSD *104#, на которую он отвечает примерно так:
You have:
2.07 GB of traffic, valid until N
47 minutes
Неутешительно видеть только первую бесполезную строку: You have:.
Наконец, я нашел обходной путь с picocom и ручной командой AT. Поэтому каждый раз, когда я хочу проверить свой баланс, я должен сделать следующее:
Сначала остановите диспетчер модемов:
$ sudo stop modemmanager
Теперь вам нужно знать порт вашего модема; в моем случае это /dev/ttyACM0.
Если вы не знаете свой порт, попробуйте это:
for n in `ls /sys/class/*/*{ACM,wdm}*/device/interface`;do echo $(echo $n|awk -F '/' '{print $5}') : $(cat $n);done
И найдите запись с Mobile Broadband Modem. Например. мой вывод выглядит следующим образом:
ttyACM0 : F5521gw Mobile Broadband Modem
ttyACM1 : F5521gw Mobile Broadband Data Modem
ttyACM2 : F5521gw Mobile Broadband GPS Port
cdc-wdm0 : F5521gw Mobile Broadband Device Management
cdc-wdm1 : F5521gw Mobile Broadband USIM Port
Для получения дополнительной информации о получении правильного порта см. эту ссылку: https://gist.github.com/heyalexej/cc6c97b1ea42736b3ff7
Затем , используйте picocom для подключения к вашему порту:
$ sudo picocom /dev/ttyACM0
Вы должны увидеть что-то вроде этого:
picocom v1.7
port is : /dev/ttyACM0
flowcontrol : none
baudrate is : 9600
parity is : none
databits are : 8
escape is : C-a
local echo is : no
noinit is : no
noreset is : no
nolock is : no
send_cmd is : sz -vv
receive_cmd is : rz -vv
imap is :
omap is :
emap is : crcrlf,delbs,
Terminal ready
*EMRDY: 1
(если вы не видите это *EMRDY: 1, возможно, означает, что вы не остановили диспетчер модемов, см. выше)
Затем введите:
AT+CUSD=1,"*104#"
И через несколько секунд вы должны получить свой ответ, который может быть многострочным: [ ! d13]
+CUSD: 0,"You have:
2.07 GB of traffic, valid until N
47 minutes
",15
OK
Чтобы выйти из picocom, используйте Ctrl-A Ctrl-X
И снова запустите диспетчер модемов:
$ sudo start modemmanager
Вы можете использовать виртуальное решение PBX с открытым исходным кодом FreeSwitch вместе со своим расширением GSMopen для отправки USSD-команд [source].
Например, если код USSD для получения вашего баланса (скажем) * 901 #, вы бы выполнили:
chat SMS|interface3|ussd|*901#
В других ответах, конечно, есть более простые решения, но в случае, если вы используете GSMopen в любом случае (например, потому что это единственный способ сделать голосовые вызовы GSM в Linux ...).