我有一台华为 E303F USB 调制解调器。我安装了 Ubuntu Studio 16.04.1 LTS“Xenial Xerus”。调制解调器检测到由网络管理员。
我可以设置一个移动宽带连接在网络管理器。但是无法连接互联网。连接符号显示很长时间然后停止。
但只有在连接到互联网后才能连接视窗然后启动 Ubuntu重启。如果我关闭系统然后启动 Ubuntu(或)拔下设备并重新插入,它不起作用。尽管我可以使用usb_modeswitch任何时候,连接都无法建立。
然后我必须再次启动 Windows 并重新启动进入 Ubuntu。
在 Windows 中连接到互联网并重新启动进入 Ubuntu 后:
usb-devices
:连接时的调制解调器信息
Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 4 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=12d1 ProdID=1506 Rev=01.02
S: Manufacturer=HUAWEI
S: Product=HUAWEI Mobile
C: #Ifs= 7 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=03 Prot=01 Driver=option
I: If#= 1 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
I: If#= 2 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
I: If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=03 Prot=03 Driver=option
I: If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=03 Prot=02 Driver=option
I: If#= 5 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
I: If#= 6 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
usb-devices
:未连接时的调制解调器信息
T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 11 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=12d1 ProdID=1506 Rev=01.02
S: Manufacturer=HUAWEI
S: Product=HUAWEI Mobile
C: #Ifs= 6 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=03 Prot=01 Driver=option
I: If#= 1 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=03 Prot=16 Driver=option
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=03 Prot=03 Driver=option
I: If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=03 Prot=02 Driver=option
I: If#= 4 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
I: If#= 5 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
答案1
我的调制解调器在 Ubuntu Studio 16.04 中工作正常
在Ubuntu Studio 12.10,我安装了华为驱动程序,它无需任何额外的调整就可以工作。在Ubuntu Studio 15.10,我插上电源后它就工作了。我没有做任何事情来让它工作。在Ubuntu Studio 16.04,我按照简单的步骤usb_modeswitch
和modprobe
步骤让它工作。论坛上有很多关于此的文章和问题。但我仍然想提一下我是如何做到的,而且非常详细。它涉及以下三个简单步骤,
在尝试以下步骤之前,请先确定您是否拥有制造商为您的设备提供的驱动程序。对于华为,驱动程序太旧了,因此您可以按照以下步骤操作。
步骤 1:检查您的设备是否被检测到
lsusb
使用和usb-devices
命令检查您的 USB 是否被检测到,
如果结果在列表中显示了您的调制解调器,请查看命令If#
中它有多少个接口()usb-devices
,每个接口列出一行,以 开头I:
。
如果它只有一个接口(If#)线,其类规范为“Cls=08(stor.)”,则它处于 USB 闪存驱动器模式。您必须使用下一步将其切换到调制解调器模式。
如果没有列出,则说明您的调制解调器有故障或存在一些问题。
步骤 2:usb_modeswitch 用于切换到“调制解调器模式”
1)子步骤:
第一次更新usb-modeswitch
和usb_modeswitch-data
:
如果你能设法以某种方式访问互联网,则可以在终端中使用这些命令进行更新:sudo apt-get install usb-modeswitch usb-modeswitch-data
或者
使用‘Synaptic 软件包管理器’下载并离线安装:
您可以使用任何其他具有 Ubuntu 和互联网连接的计算机。打开 synaptic 数据包管理器并在搜索字段中输入 usb-modeswitch,然后在结果中标记这两个包。当您执行此操作时,它会询问是否标记相关的依赖包。单击“标记”。然后转到文件并单击“生成包下载脚本”,选择要保存脚本的目录,并为脚本命名,如“deblist”,然后保存。然后转到脚本的目录。在那里打开一个终端并输入,
bash ./deblist
这会将软件包下载到与脚本相同的目录中。将目录复制到您的计算机,然后在同一目录中打开终端并输入以下内容来安装它们
sudo dpkg -i package1.deb package2.deb package3.deb
其中 package1.deb、package2.deb、package3.deb 等应该替换为下载的软件包的名称。这样应该会安装软件包。上述步骤适用于任何软件。
2)子步骤:
然后创建一个名为12d1:1446在里面/etc/usb_modeswitch.d/使用该命令以超级用户身份访问目录touch
。
sudo touch /etc/usb_modeswitch.d/12d1:1446
'12d1' 是华为的供应商 ID,'1446' 是我的设备的“未切换产品 ID”这可以从上面lsusb
或usb-devices
您的设备的命令中获得。
3)子步骤:
然后切换到调制解调器模式,打开终端并输入
sudo usb_modeswitch -v 0x12d1 -p 0x1446 -J
usb_modeswitch 命令应该包含切换方法/消息。这里的切换方法由 指定-J
,这是标准的华为切换方法。不同的设备制造商会有所不同。man usb_modeswitch
在终端中输入以获取更多信息。
现在usb-devices
在终端中输入,您应该会看到一个新的“产品 ID”和列出的设备的许多接口(If#)。大多数接口(If#)应该使用“选项”作为驱动程序。其中一些接口用于互联网连接,大多数情况下,用于连接的接口具有不同的驱动程序,如“huawei_cdc_ncm”。
现在尝试使用 Ubuntu 的“网络管理器”设置“移动宽带连接”来连接到互联网。如果已连接,则您的工作已完成。但如果未连接,则您可以继续下一步。
步骤 3:加载驱动程序
您可以从命令中看到模式切换调制解调器正在使用什么驱动程序usb-devices
。
1)子步骤:
如果显示“选项”作为所有接口(If#)的驱动程序,除了用作 USB 存储的接口,请继续子步骤 2如下所示(或)如果显示“huawei_cdc_ncm”,请通过键入以下内容转到 /lib/modules/(uname -r)/kernel/drivers/net/usb/,
sudo thunar /lib/modules/(uname -r)/kernel/drivers/net/usb/
或者
sudo nautilis /lib/modules/(uname -r)/kernel/drivers/net/usb/
并通过“剪切粘贴方法”将“huawei_cdc_ncm”移动到任何其他目录中,作为备份。
现在移除设备,重新插入并输入 usb_modeswitch 命令。在usb-devices
命令结果中,您应该看到“none”作为用作调制解调器的接口(If#)的驱动程序。
2)子步骤:
现在再次移除设备并输入命令,
sudo rmmod option
从内核中删除选项驱动程序
现在重新插入设备并输入 usb_modeswitch 命令。在usb-devices
命令结果中,您仍然应该看到“none”作为调制解调器的驱动程序,而“option”作为其他接口(If#)的驱动程序。
现在打开文件/sys/bus/usb 串行/驱动程序/option1/new_id使用nano
:
sudo nano /sys/bus/usb-serial/drivers/option1/new_id
输入12d1 1506
后使用 ctrl+o 保存,然后使用 ctrl+x 退出。这里1506是“modeswitched 产品 ID”。现在,如果您输入usb-devices
,您应该看到“option”作为调制解调器的加载驱动程序。
3)子步骤:
现在使用该modprobe usbserial
命令让设备与加载的“选项”驱动程序一起工作。
sudo modprobe usbserial vendor=12d1 product=1506
现在尝试将调制解调器连接到互联网。大多数情况下应该可以连接,但如果没有,请拔下电源并尝试执行步骤 3再次。如果仍然无法连接,有时自动执行这些命令的过程可以将调制解调器连接到互联网。
步骤 4:自动化
为了使这个过程自动化,在完成步骤1的子步骤 2,复制以下几行
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1446", RUN+="/usr/sbin/usb_modeswitch -v 12d1 -p 1446 -J"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1446", RUN+="/bin/bash -c 'modprobe option && echo 12d1 1506 > /sys/bus/usb-serial/drivers/option1/new_id'"
使用命令
sudo mousepad /lib/udev/rules.d/40-usb_modeswitch.rules
或者
sudo gedit /lib/udev/rules.d/40-usb_modeswitch.rules
复制后,不要忘记将上面几行中的“产品 ID”更改为“未切换的产品 ID”。现在,如果您拔下设备并再次插入,它应该可以连接到互联网。
即使它确实有效。有时只有在我启动系统后拔下并重新插入后,它才会连接。我认为加载“选项”驱动程序需要一些时间。
答案2
我发现,即使 Ubuntu 有 cdc_mbim 驱动程序,它也无法从用于 Ubuntu 连接的接口中生成两个接口(If#
在usb-devices
命令中)。但 Windows 似乎可以。因此,我猜想重新启动时接口信息仍在调制解调器中,但关闭和打开时则不在。
因此,当启动到 Ubuntu 时,它会检测这些接口并选择正确的驱动程序(cdc_mbim)。但连接并不一定需要两个接口。即使一个带有正确驱动程序的接口也足够了。这意味着如果正确的模块/驱动程序已加载适当地(option
模块)。