我有一根 D-LINK DWM-157 USB 3G 棒,带有可用的仅用于短信的运营商计划 SIM 卡,没有 PIN 码。
由于某种原因,gammu、gsmsendsms 和 gsmctl 都无法连接到设备。它们都报告超时。
但是 wvdial 成功找到了该设备并且能够与其通信并进行 /etc/wvdial.conf 写入:
[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CFUN=1,0
Modem Type = Analog Modem
; Phone = <Target Phone Number>
ISDN = 0
; Password = <Your Password>
New PPPD = yes
; Username = <Your Login Name>
Modem = /dev/ttyUSB0
Baud = 9600
我还能手动执行所有 AT 命令并通过 echo > /dev/ttyUSB0 向自己发送短信
#cat < /dev/ttyUSB0 &
# echo "ATZ" > /dev/ttyUSB0
OK
# echo "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0" > /dev/ttyUSB0
OK
# echo "AT+CMGS=\"+myphonewithcountrycode\",145" > /dev/ttyUSB0
>
# echo "foobar^Z" > /dev/ttyUSB0
foobar
+CMGS: 2
OK
#
如果我执行 acat < /dev/ttyUSB0 &
然后尝试 gammu 或 gsmctl 我可以看到它们都发送 AT 命令并且调制解调器回复 OK,但 gammu/gsm 表现得好像它们没有收到 OK。
出现了非常奇怪的错误。可能是什么问题?
答案1
事实证明还有一个(未使用的)软件管理调制解调器:ModemManager。
根据这个答案https://unix.stackexchange.com/questions/97242/how-to-send-at-commands-to-a-modem-in-linux我禁用了 ModemManager。
现在systemctl disable ModemManager
gammu 可以识别我的调制解调器了:
Device : /dev/ttyUSB0
Manufacturer : MTK1
Model : MTK2 (MTK2)
Firmware : 0.3.9
IMEI : 35562105*******
SIM IMSI : 24701050*******
在最新的 Ubuntu 中,似乎有很多(有时似乎是竞争性的)服务试图为相同的设备提供服务。我的 DNS 设置也遇到了同样的问题,它一直被 NetworkManger 覆盖,然后 systemd 解析,两者都忽略了我在 netplan 中的内容。