답변:
USSD 잔액 확인을 지원하는 일부 앱은 다음과 같습니다.
선불 관리자 는 그놈 데스크탑의 애플릿으로 GSM 모바일 선불 SIM 카드의 잔액을 확인하고 충전 할 수 있습니다. USSD 잔액 확인 및 topup이 모든 것을 갖춘 단순하고 최소한의 앱입니다. 그러나 반대로, 그것은 매우 오래된 응용 프로그램이며 오랫동안 새로운 업데이트를받지 못했습니다. 제공자가 지원되지 않는 경우 홈페이지에 설명 된대로 제공자를 수동으로 구성해야합니다 . 설치하려면 여기를 클릭하십시오 :
또는 다음 명령을 실행하십시오.
sudo apt install prepaid-manager-applet
모뎀 관리자 GUI는 모바일 네트워크 기반 모뎀을 관리하고 모니터링하는 완벽한 솔루션입니다. 그것은 많은 기능을 포함하고 있으며 USSD 지원은 그중 하나 일뿐입니다. 전체 기능 목록을 보려면 공식 홈페이지를 방문하십시오 . 설치하려면 여기를 클릭하십시오 :
또는 다음 명령을 실행하십시오.
sudo apt install modem-manager-gui
V Mobile Broadband 는 Linux 용 Vodafone Mobile Connect 소프트웨어로 Vodafone의 오픈 소스 Betavine Connection Manager 팀이 Network Manager와 호환되도록 다시 작성되었습니다. 불행히도 현재로서는 적극적으로 유지되지 않는 것 같으며 Ubuntu repos에서는 사용할 수 없습니다. 그러나 소스에서 프로젝트를 빌드하는 것은 운이 좋을 수도 있습니다. GitHub 페이지를 확인 하십시오 .
경고 :에 v-mobile-broadband
의존 wader
하며 우분투의 기본값을 대체합니다 modemmanager
. 따라서 새 설정에 문제가 발생하여 uninstall을 결정한 경우 패키지 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 데비안 패키지는 최신 개발 브랜치 버전 입니다.
균형을 맞추기위한 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 음성 통화를 수행하는 유일한 방법이기 때문에 ...)