如何使用 Linux 命令行工具回复 USSD 菜单?

Tec*_*e2u 1 linux ussd gammu

我想获取有关安装在计算机移动宽带调制解调器中的 SIM 卡帐户余额的信息。对于我的移动网络运营商,这使用 USSD 代码100#

我发现gammu可以使用gammu getussd '100#'. 作为回应,gammu 向我展示了这个 USSD 菜单:

Press Ctrl+C to break...  
USSD received  
Status               : Action needed  
Service reply        : "Reply with your option:  
1.Account Balance  
2.Buy a Data Plan  
3.Top Up Now  
No response in specified timeout. Probably phone not connected.
Run Code Online (Sandbox Code Playgroud)

如何从该菜单中选择一个选项(例如,1)?

tan*_*ius 5

在我看来,ModemManager(及其命令行客户端界面mmcli)是目前在 Linux 下与 USSD 和 USSD 菜单交互的最复杂、最高质量的解决方案。

安装(在 Debian / Ubuntu Linux 下):

sudo apt-get install modemmanager modem-manager-gui
Run Code Online (Sandbox Code Playgroud)

用法(遵循联机帮助页):

  1. 列出您的调制解调器:mmcli -L. 这将显示一个调制解调器设备路径/org/freedesktop/ModemManager1/Modem/12,您可以使用其末尾的数字来指定-m在以下命令中的选项后使用的调制解调器。

  2. 显示调制解调器的属性:mmcli -m 12.

  3. 启用调制解调器(在将其用于 USSD 之前需要): mmcli -m 12 -e

  4. 开始 USSD 会话。例如,对于Ncell,此命令显示主 USSD 菜单:mmcli -m 12 --3gpp-ussd-initiate="*100#"

  5. 响应 USSD 菜单。会话开始后,您可以使用这样的命令来响应,这里使用选项1mmcli -m 12 --3gpp-ussd-respond="1"

  6. 取消给定调制解调器上的 USSD 会话:mmcli -m 12 --3gpp-ussd-cancel

  7. 获取所有 USSD 会话(所有可用调制解调器的)的状态:mmcli --3gpp-ussd-status

对于大多数硬件,这应该按照描述立即正常工作。

(但是,对于我的硬件,mmcli由于错误,到目前为止我无法使用。所有与 USSD 相关的命令mmcli都会回复error: modem not unlocked yet,并mmcli -m 12 | grep " lock"会显示sim-pin2锁定已启用。但事实并非如此(意味着我无法通过禁用锁定来解决这个问题) ). 即使它被启用, 那个锁也不会限制 USSD 的使用 (它只是为了限制对某些号码的呼出). 所以, 我必须从这里删除这个过于热心的测试条件, 自己编译它再次测试 … 。)