Câu trả lời:
Đây là một số Ứng dụng có hỗ trợ kiểm tra số dư USSD:
Trình quản lý trả trước là một applet cho Bàn làm việc Gnome cho phép bạn kiểm tra và nạp số dư của thẻ SIM trả trước di động GSM. Đây là một ứng dụng đơn giản và tối giản với kiểm tra số dư USSD và nạp tiền là tất cả những gì nó làm. Nhưng mặt khác, đây là một ứng dụng rất cũ và không nhận được bất kỳ cập nhật mới nào trong một thời gian dài. Và nếu nhà cung cấp của bạn không được hỗ trợ, bạn sẽ phải tự cấu hình nó như được mô tả trên trang chủ của họ . Để cài đặt, bấm vào đây:
Hoặc chạy lệnh sau:
sudo apt install prepaid-manager-applet
Modem Manager GUI là một giải pháp hoàn chỉnh để quản lý và giám sát các modem dựa trên mạng di động. Nó chứa khá nhiều tính năng và hỗ trợ USSD chỉ là một trong số đó. Để biết danh sách đầy đủ các tính năng, hãy truy cập trang chủ chính thức của họ . Để cài đặt, bấm vào đây:
Hoặc chạy lệnh sau:
sudo apt install modem-manager-gui
V Mobile Broadband là phần mềm Vodafone Mobile Connect gốc dành cho Linux được viết lại để tương thích với Trình quản lý mạng bởi nhóm Trình quản lý kết nối Betavine mã nguồn mở của Vodafone. Thật không may, nó dường như không được duy trì rất tích cực vào lúc này và không có sẵn trong repos Ubuntu. Tuy nhiên, bạn có thể thử vận may xây dựng dự án từ nguồn. Kiểm tra trang GitHub của họ .
Cảnh báo : v-mobile-broadband
phụ thuộc vào wader
, thay thế mặc định của Ubuntu modemmanager
. Vì vậy, nếu bạn gặp sự cố với thiết lập mới và quyết định gỡ cài đặt v-mobile-broadband
, đừng quên cài đặt lại modemmanager
gói.
Bạn có thể sử dụng tiện ích dòng lệnh gammu
cho mục đích này. Nếu mã USSD để lấy số dư của bạn là (giả sử) * 901 #, bạn sẽ thực thi:
gammu getussd "*901#"
Để biết hướng dẫn cài đặt và cấu hình và biết thêm chi tiết, xem tại đây .
Bạn có thể sử dụng các lệnh AT trực tiếp để truy vấn số dư của mình thông qua USSD. Cho rằng, sử dụng bất kỳ chương trình thiết bị đầu cuối nối tiếp cho phép bạn giao tiếp với modem của bạn trực tiếp ( putty
, minicom
vv).
Tôi đã chọn atinout
vì nó tích hợp độc đáo với dòng lệnh. Đầu tiên bạn cài đặt nó:
sudo apt-get install ruby-ronn;
git clone git://git.code.sf.net/p/atinout/code atinout;
cd atinout;
make;
sudo checkinstall make install;
Sau đó, nếu bạn sử dụng ModemManager (mặc định trong Ubuntu Linux), trước tiên bạn có thể phải tắt nó để cho phép atinout
truy cập modem của mình:
sudo stop modemmanager;
Bây giờ, để gửi mã USSD cho truy vấn số dư tới mạng (giả sử * 901 #) và hiển thị kết quả, bạn sẽ sử dụng lệnh này:
atinout - /dev/ttyUSB1 - < <(echo "AT+CUSD=1,\"*901#\",15") && sleep 4 && \
atinout - /dev/ttyUSB1 - < <(echo "AT");
Điều này giả định rằng modem của bạn đang ở /dev/ttyUSB1
. Các AT
lệnh trong thứ hai atinout
lệnh là chỉ để có được câu trả lời USSD không mong muốn hiển thị như một tác dụng phụ, trong đó nên đã đến sau sleep
.
Đối với trường hợp truy vấn số dư của bạn yêu cầu vận hành menu USSD: điều này cũng có thể với atinout
, hãy xem câu trả lời này .
Bạn có thể làm chúng với gói modem-manager-gui
. Nhưng nó chỉ có sẵn cho 13.10. Trong các phiên bản khác, bạn phải quản lý chúng trong Terminal cùng với gói modemmanager
.
Nếu bạn đang ở trong Ubuntu 13.10:
sudo apt-get install modem-manager-gui modemmanager
Trong các phiên bản khác của Ubuntu, bạn có thể làm điều đó với ứng dụng prepaid-manager-applet
sudo apt-get install prepaid-manager-applet
Bạn có thể sử dụng công cụ dòng lệnh Linux gsm-ussd
để gửi mã USSD, nhận câu trả lời và thậm chí điều hướng các menu USSD (mặc dù điều đó không ổn định / có thể sử dụng được đối với tôi).
Để biết hướng dẫn cài đặt và cấu hình chi tiết xem tại đây . Gói Debian phiên bản 0.4 được cung cấp để cài đặt là phiên bản nhánh nhánh mới nhất .
Nếu mã USSD để lấy số dư của bạn là (giả sử) * 901 # và modem của bạn là /dev/ttyUSB1
bạn sẽ thực thi điều này để gửi mã USSD đơn giản và hiển thị câu trả lời của mạng (không dẫn đến menu):
gsm-ussd -m /dev/ttyUSB1 "*901#"
Bạn có thể sử dụng ứng dụng mmcli
khách dòng lệnh của Modem Manager mặc định của Ubuntu để gửi mã USSD và nhận được trả lời:
Bắt đầu bằng cách liệt kê các modem của bạn : mmcli -L
. Điều này sẽ hiển thị một đường dẫn thiết bị modem như thế nào /org/freedesktop/ModemManager1/Modem/0
. Số ở cuối là chỉ số modem, hãy nhớ nó.
Kích hoạt modem (giả sử chỉ số modem của bạn là 0): mmcli -m 0 -e
Gửi yêu cầu USSD và hiển thị câu trả lời. Giả sử mã USSD của nhà khai thác mạng của bạn để lấy số dư là * 901 #, lệnh sẽ là:
mmcli -m 0 --3gpp-ussd-initiate="*901#"
Đối với trường hợp truy vấn số dư của bạn yêu cầu vận hành menu USSD: điều này cũng có thể với mmcli
, hãy xem câu trả lời này .
error: couldn't initiate USSD session: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Unsupported: Operation not supported.'
Đối với tôi, cả hai giải pháp dựa trên ModemManager và gammu
không hoạt động chính xác với phản hồi USSD đa dòng; ví dụ: nhà điều hành của tôi có một lệnh USSD *104#
, mà nó đáp ứng một cái gì đó như:
You have:
2.07 GB of traffic, valid until N
47 minutes
Thật đáng thất vọng khi chỉ nhìn thấy dòng vô dụng đầu tiên : You have:
.
Cuối cùng tôi tìm thấy một cách giải quyết với picocom
lệnh AT thủ công. Vì vậy, mỗi lần tôi muốn kiểm tra số dư của mình, tôi phải làm như sau:
Đầu tiên, dừng Trình quản lý Modem:
$ sudo stop modemmanager
Bây giờ, bạn cần biết cổng modem của bạn; trong trường hợp của tôi, nó là /dev/ttyACM0
.
Nếu bạn không biết cổng của mình, hãy thử điều này:
for n in `ls /sys/class/*/*{ACM,wdm}*/device/interface`;do echo $(echo $n|awk -F '/' '{print $5}') : $(cat $n);done
Và tìm kiếm các mục với Mobile Broadband Modem
. Ví dụ: đầu ra của tôi trông như sau:
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
Để biết thêm thông tin về việc lấy đúng cổng, hãy xem liên kết này: https://gist.github.com/heyalexej/cc6c97b1ea42736b3ff7
Sau đó, sử dụng picocom để kết nối với cổng của bạn:
$ sudo picocom /dev/ttyACM0
Bạn sẽ thấy một cái gì đó như thế này:
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
(nếu bạn không thấy điều này *EMRDY: 1
, điều đó có thể có nghĩa là bạn chưa dừng Trình quản lý Modem, xem ở trên)
Sau đó nhập:
AT+CUSD=1,"*104#"
Và sau vài giây, bạn sẽ nhận được câu trả lời của mình, có thể là đa dòng:
+CUSD: 0,"You have:
2.07 GB of traffic, valid until N
47 minutes
",15
OK
Để thoát picocom, sử dụng Ctrl-A Ctrl-X
Và khởi động lại trình quản lý modem:
$ sudo start modemmanager
Bạn có thể sử dụng giải pháp tổng đài ảo nguồn mở FreeSwitch cùng với phần mở rộng GSMopen của nó để gửi các lệnh USSD [ nguồn ].
Ví dụ: nếu mã USSD để lấy số dư của bạn là (giả sử) * 901 #, bạn sẽ thực thi:
chat SMS|interface3|ussd|*901#
Tất nhiên, có những giải pháp đơn giản hơn trong các câu trả lời khác, nhưng trong trường hợp bạn vẫn sử dụng GSMopen (ví dụ như vì đây là cách duy nhất để thực hiện các cuộc gọi thoại GSM trong Linux Linux).