回答:
USSDバランスチェックをサポートするアプリは次のとおりです:
プリペイドマネージャーはGNOMEデスクトップ用のアプレットで、GSMモバイルプリペイドSIMカードの残高を確認してチャージできます。それはUSSDバランスチェックとトップアップがすべてのことであるシンプルでミニマルなアプリです。しかし、一方で、これは非常に時代遅れのアプリケーションであり、長い間新しい更新を受け取っていません。また、プロバイダーがサポートされていない場合は、プロバイダーのホームページに記載されているように、手動で設定する必要があります。インストールするには、ここをクリックしてください:
または、次のコマンドを実行します。
sudo apt install prepaid-manager-applet
モデムマネージャGUIは、モバイルネットワークベースのモデムを管理および監視するための完全なソリューションです。それはかなり多くの機能を詰め込んでおり、USSDサポートはそれらの1つにすぎません。機能の完全なリストについては、公式ホームページにアクセスしてください。インストールするには、ここをクリックしてください:
または、次のコマンドを実行します。
sudo apt install modem-manager-gui
V Mobile Broadbandは、VodafoneのオープンソースBetavine Connection ManagerチームによってNetwork Managerと互換性を持つように書き直された、Linux用のオリジナルのVodafone Mobile Connectソフトウェアです。残念ながら、現時点ではあまり活発にメンテナンスされていないようで、Ubuntuリポジトリでは利用できません。ただし、ソースからプロジェクトを構築する運を試してみることもできます。チェックアウト彼らのGitHubのページを。
警告:Ubuntuのデフォルトを置き換えるにv-mobile-broadband
依存しwader
ますmodemmanager
。したがって、新しいセットアップで問題が発生し、をアンインストールするv-mobile-broadband
場合は、modemmanager
パッケージを再インストールすることを忘れないでください。
gammu
この目的でコマンドラインユーティリティを使用できます。残高を取得するためのUSSDコードが(たとえば)* 901#の場合、次を実行します。
gammu getussd "*901#"
インストールと構成の手順および詳細については、ここを参照してください。
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
、この答えを参照してください。
Linuxコマンドラインツールgsm-ussd
を使用して、USSDコードを送信したり、回答を取得したり、USSDメニューをナビゲートしたりすることもできます(ただし、これは安定していない/私にとっては使用できませんでした)。
インストールと構成の詳細な手順については、こちらを参照してください。インストール用に提供されているバージョン0.4のDebianパッケージは、最新のdevブランチバージョンです。
残高を取得するためのUSSDコードが(たとえば)* 901#で、モデムが/dev/ttyUSB1
これである場合、これを実行して簡単なUSSDコードを送信し、ネットワークの応答を表示します(メニューは表示されません)。
gsm-ussd -m /dev/ttyUSB1 "*901#"
mmcli
UbuntuのデフォルトのModemManagerのコマンドラインクライアントを使用して、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
参照してください。
error: couldn't initiate USSD session: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Unsupported: Operation not supported.'
私にとって、両方の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#"
そして数秒後、あなたはあなたの返事を受け取るはずです、それは複数行になる可能性があります:
+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を使用する場合(…たとえば、LinuxでGSM音声通話を行う唯一の方法だからです…)。