我正在尝试与 Raspbian、3G USB 适配器usb_modeswitch
和wvdial
.我跟着本教程之前与其他 3G 适配器配合使用效果良好。
我的 3G 适配器是中兴 D6601,SIM 卡没有 PIN,并且在 Windows 下和 Ubuntu 15 下使用内置移动宽带工具与 ISP 工具完美连接。但我需要在 Raspberry Pi 上通过命令行执行此操作。
这是我到目前为止所尝试过的:当我启动 Raspbian 时,lsusb
返回
Bus 001 Device 004: ID 19d2:0154 ZTE WCDMA Technologies MSM
然后我跑
sudo usb_modeswitch -I -v 19d2 -p 0154 -c /etc/usb_modeswitch.conf
这会将 ProductID 更改为
Bus 001 Device 009: ID 19d2:0108 ZTE WCDMA Technologies MSM
有不止一个DefaultProduct
ID 为 0154 的 3G 加密狗,因此标准切换规则usb_modeswitch
不起作用。 0108 是 Ubuntu 将设备切换到的位置,或者是sudo eject
虚拟 CD 驱动器时发生的情况,所以我使用了它。
我的/etc/network/interfaces
只是更改为使用 WiFi 连接:
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
到目前为止,一切都很好。当我运行时sudo wvdialconf
,在 处检测到调制解调器/dev/ttyUSB1
。然后我sudo wvdial dcom
按照dcom
这样的定义运行(APN“e-connect”是正确的,不需要用户/通行证):
[Dialer dcom]
Modem = /dev/ttyUSB1
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","e-connect"
Stupid Mode = 1
Modem Type = Analog Modem
Phone = *99#
ISDN = 0
Username = { }
Auto Reconnect = 1
Password = { }
Baud = 460800
shell 返回这个:
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ
OK
--> Sending: ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: AT+CGDCONT=1,"IP","e-connect"
AT+CGDCONT=1,"IP","e-connect"
OK
--> Modem initialized.
--> Sending: ATDT*99#
--> Waiting for carrier.
ATDT*99#
CONNECT 21600000
--> Carrier detected. Starting PPP immediately.
--> Starting pppd at Sat Apr 25 18:09:08 2015
--> Pid of pppd: 5530
--> Using interface ppp0
--> pppd: [08]FX[01]�FX[01]8GX[01]p<X[01]�PX[01]�QX[01] (+4 more times)
运行后,ifconfig
显示ppp0
已创建,但未分配 IP 地址。然后,大约 10 秒后,会发生以下情况:
--> Disconnecting at Sat Apr 25 18:09:39 2015
--> The PPP daemon has died: A modem hung up the phone (exit code = 16)
--> man pppd explains pppd error codes in more detail.
--> Try again and look into /var/log/messages and the wvdial and pppd man pages for more information.
--> Auto Reconnect will be attempted in 5 seconds
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: AT+CGDCONT=1,"IP","e-connect"
AT+CGDCONT=1,"IP","e-connect"
OK
--> Modem initialized.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: AT+CGDCONT=1,"IP","e-connect"
AT+CGDCONT=1,"IP","e-connect"
OK
--> Modem initialized.
--> Sending: ATDT*99#
--> Waiting for carrier.
ATDT*99#
ERROR
--> Invalid dial command.
--> Disconnecting at Sat Apr 25 18:09:45 2015
如果我wvdial dcom
再次运行,它将重复上面第二次连接尝试的输出(Invalid dial command
),甚至不会配置ppp0
。奇怪的是,很快sudo wvdialconf
(期间/etv/wvdial.conf
保持不变),我可以再次连接,但它会再次分配没有IP并在10秒后断开。我已经重复了好几次了。
也许这也很有趣:在创建的wlan0
那一刻就失去了它的IP ppp0
,我只能让它重新运行sudo ifdown wlan0
,sudo ifup wlan0
即使它被设置为自动重新连接。
答案1
我终于想出了一个办法:我扔掉wvdial
并使用nmcli
(从network-manager
包装中)代替。我在 10 小时前建立了连接,并且该连接仍然处于活动状态且具有相同的 IP。我是这样做的:
步骤1:开始usb-modeswitch
运行,以便您的 3G USB 记忆棒被识别为调制解调器,而不是存储设备。我不会在这里介绍详细信息,因为那里有很多教程(例子)。
第2步:安装网络管理器在 RPi 上:sudo apt-get install network-manager network-manager-gnome -y
.通过运行检查 NetworkManager 是否识别您的调制解调器nmcli dev
。如果是,您应该看到如下表:
DEVICE TYPE STATE
ttyUSB2 gsm disconnected
(如果没有,您usb-modeswitch
可能出现故障,并且您的系统找不到调制解调器。)
步骤3:启动 X 服务器:startx
,从菜单中打开 NetworkManager 并创建新的“移动宽带”连接(“移动宽带”选项卡 >“添加”)。该向导将指导您完成整个过程,甚至让您选择提供商,这样您就不必费心进行 APN 设置。该工具将创建一个连接文件,/etc/NetworkManager/system-connections/
您应该记下该文件的名称,因为它将在下一步中用作连接名称。
步骤4:正如我在问题中所说,我需要能够在没有 X 服务器的情况下从命令行运行它,方法是运行sudo nmcli con up id "Connection ID"
,连接 ID 是您在步骤 2 中创建的连接的名称。这应该全部。要断开连接,请执行sudo nmcli con down id "Connection ID"
.