我发现我可以直接使用 AT 命令成功导航 USSD 菜单。鉴于我的系统存在其他更可取的mmcli
解决方案的问题(有关详细信息,请参阅我的其他答案),这是迄今为止为我导航 USSD 的唯一可行解决方案。
如何让它工作:
(1)安装 AT 端子。我选择atinout
通过 AT 命令与调制解调器通信。您还可以使用任何其他 AT 终端软件,如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;
(2)如果您使用 ModemManager(这是 Ubuntu Linux 下的默认设置),您可能必须先禁用它以允许atinout
访问您的调制解调器:
sudo stop modemmanager;
(3)现在,要接收和回复 USSD 菜单,您可以使用如下命令:
atinout - /dev/ttyUSB1 - < <(echo "AT+CUSD=1,\"100#\",15") && sleep 4 && \
atinout - /dev/ttyUSB1 - < <(echo "AT") && \
\
atinout - /dev/ttyUSB1 - < <(echo "AT+CUSD=1,\"1\",15") && sleep 4 && \
atinout - /dev/ttyUSB1 - < <(echo "AT");
这假设您的调制解调器是 at/dev/ttyUSB1
并且接收 USSD 菜单的代码是100#
。适应你的情况。
说明:该命令发送100#
到网络接收USSD菜单,然后1
选择第一个选项。atinout
如果您不超过超时时间(通常 > 20 秒),像这样将一个 USSD 菜单会话分散到多个调用中不会中断会话。
故障排除:如果上述多合一命令不起作用,请尝试手动执行各个部分,重复那些失败的部分。如果某些事情反复失败(“资源繁忙”等),您的调制解调器可能处于奇怪的状态。重置它,或者让计算机经历一个暂停/恢复周期。