华为调制解调器在16.04版本上无法正常工作。

Ubuntu 16.04无法识别我的Huawei 15ca USB调制解调器。

我该如何修复这个问题?


1请编辑您的问题并添加lsusb终端命令的输出。 - Pilot6
2看起来确实是个问题,但你有什么问题呢? - David Foerster
5个回答

这个命令对我来说有效。我只需要执行一次就可以了。
lsusb

记下供应商和产品ID。在我的情况下,分别是12d11f01
Bus 002 Device 003: ID 05c8:038f Cheng Uei Precision Industry Co., Ltd (Foxlink) 
Bus 002 Device 002: ID 0438:7900 Advanced Micro Devices, Inc. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0bda:b008 Realtek Semiconductor Corp. 
Bus 001 Device 003: ID 12d1:14db Huawei Technologies Co., Ltd. E353/E3131
Bus 001 Device 002: ID 0438:7900 Advanced Micro Devices, Inc. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

然后执行一次。

sudo usb_modeswitch -v 12d1 -p 1f01 -J

3你从哪里得到的 1f01?我在上述终端提取中没有看到它。 - Kasun Siyambalapitiya
从lsusb输出中。我发布的输出是在执行usb_modeswitch之后,它会将产品ID更改为14db(在我的情况下)。 - Amey Deshpande
2是的,它起作用了,但我该如何让它只运行一次并且永久有效? - X09

解决此问题的说明与14.04版本稍有不同。
其中一些步骤可能不需要,但以下是我成功解决问题的方法:
vi /lib/udev/rules.d/40-usb_modeswitch.rules

并添加这一行:
ATTR{idVendor}=="12d1", ATTR{idProduct}=="15ca", RUN+="usb_modeswitch '%b/%k'"

然后:

sudo touch /etc/usb_modeswitch.d/12d1:15ca

运行这个命令:
sudo usb_modeswitch -J -v 0x12d1 -p 0x15ca

现在你应该在可用的网络连接和lsusb下看到它,它会显示一个不同的产品编号。
Bus 003 Device 008: ID 12d1:1506 Huawei Technologies Co., Ltd. Modem/Networkcard

你可能需要重新启动或多次拔插调制解调器才能使其工作。另外要记得将它添加到编辑连接/添加移动宽带连接中。

有没有办法自动化这个过程,例如每次连接调制解调器时执行 sudo usb_modeswitch -J -v 0x12d1 -p 0x15ca?我记得在16.04之前(当然是在应用了类似的修复方法后),这个过程是自动完成的。 - ov1d1u
是的,有一种方法。我正在写一个答案。 - Pilot6

我今天遇到了这个问题。我有两台装有Ubuntu 16.04的电脑,其中的12d7:1505型号的调制解调器运行良好。
我又买了一台新的电脑,但它在没有...的情况下无法正常工作。
sudo usb_modeswitch -v 12d1 -p 1506 -J

命令。

我用另一个udev规则修复了它。

添加/etc/udev/rules.d/huawei.rules文件,并包含以下内容:

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1505", RUN+="/usr/sbin/usb_modeswitch -v 12d1 -p 1506 -J"

然后重新启动,或者运行sudo udevadm control -R并插入调制解调器。您需要等待大约30秒钟让调制解调器启动,然后您就可以使用它了。

永久解决了我的问题。 - Christopher Kikoti
我也是,太容易了,我一点都没学到。 :| - Enjoy87

你想自动化这个吗?如果你的调制解调器插上了,就不需要再进行设置了。
首先
sudo nano /etc/usb_modeswitch.conf

复制这段代码
# 华为 E3131 DefaultVendor=0x12d1 DefaultProduct=0x15ca TargetVendor=0x12d1 TargetProduct=0x1506 MessageContent="55534243123456780000000000000a11062000000000000100000000000000"
保存并在终端上执行此命令
sudo usb_modeswitch -c /etc/usb_modeswitch.conf
然后等待一分钟,如果您的调制解调器被检测到并且可以用于连接互联网,那么这个设置就有效了。

这些解决方案都不适用于我的16.04版本。(udev规则在14.04上完美运行)。

我的意思是,有时候这确实有效,但非常罕见。我测试了这些手动命令。

usb_modeswitch -v 12d1 -p 15ca -V 12d1 -P 1506 -M "55534243123456780000000000000011062000000100000000000000000000"

/usr/sbin/usb_modeswitch -J -v 0x12d1 -p 0x15ca

他们确实起作用,但并非每次都有效,即使手动输入也是如此。在超过一半的情况下,设备仍然被列为“大容量存储器”。
:(
因此,我不得不采用一个非常笨拙的解决方案:我将后者添加到root的crontab中,以每10秒运行一次。我知道这很荒谬,但在这种情况下,我无法想到更好的办法。如果设备被列为大容量存储器(如果已经转换为调制解调器,则会显示消息“未找到默认模式下的设备。没有要执行的操作。再见!”),该命令将起作用,因此它不会干扰正常工作的调制解调器。
这很愚蠢,但如果有人想使用它,这里是我的crontab条目:
* * * * *           /usr/sbin/usb_modeswitch -J -v 0x12d1 -p 0x15ca  > /dev/null 2>&1
* * * * * sleep 10; /usr/sbin/usb_modeswitch -J -v 0x12d1 -p 0x15ca  > /dev/null 2>&1
* * * * * sleep 20; /usr/sbin/usb_modeswitch -J -v 0x12d1 -p 0x15ca  > /dev/null 2>&1
* * * * * sleep 30; /usr/sbin/usb_modeswitch -J -v 0x12d1 -p 0x15ca  > /dev/null 2>&1
* * * * * sleep 40; /usr/sbin/usb_modeswitch -J -v 0x12d1 -p 0x15ca  > /dev/null 2>&1
* * * * * sleep 50; /usr/sbin/usb_modeswitch -J -v 0x12d1 -p 0x15ca  > /dev/null 2>&1

设备在10或20秒后开始工作(如果命令需要运行两次-这是大多数情况)。我还将此添加到我的/etc/fstab中,以防止在插入后不久尝试挂载USB大容量存储设备。这样可以防止出现通常在插入CD时显示的“打开文件”窗口。
/dev/sr0 on /media/username/PLAY\ ONLINE iso9660 noauto

根据设备挂载后mount命令显示的位置,你需要调整安装位置 - 我的设备挂载在PLAY ONLINE文件夹下,这是我的移动服务提供商的名称。

  • 相关问题