当USB调制解调器尝试连接时出现“ip-config-unavailable”错误。

我有一个ZTE MF-193E调制解调器,在之前一直工作正常。当我一年多前购买这个调制解调器时,它可以直接使用。 现在,随着Ubuntu版本的更新,对我来说越来越困难。
这个调制解调器甚至在几个月前与Ubuntu 15.04(64位)一起工作。但是,在Ubuntu 15.10(64位)中无法连接。
我已经设置了一个移动宽带连接。我尝试了各种APN字符串,但以前从未出现过这个问题。
(调制解调器在Windows 10中工作正常,所以这绝对不是硬件问题。此外,Modem Manager GUI可以很好地检测到此设备。短信可以正常发送和接收。)
当我插入调制解调器时,它被正确检测到,Unity中显示一个CD图标并显示调制解调器的名称。几秒钟后, 我会收到一个消息框。
Mobile Broadband Network: you are registered on the home network

在网络图标附近。 当我尝试连接时,网络管理器小程序中的无线图标开始旋转,但最终无法连接,并显示一条消息告诉我我处于离线状态。 我从/var/log/syslog中找到的行是这样的,
NetworkManager[628]: <info>  (ttyUSB1): device state change: ip-config
> -> failed (reason 'ip-config-unavailable') [70 120 5]

虽然我不确定这是否是相关的内容。
可以在这里找到更多来自/var/log/syslog的行。

更新1 - 2015年12月06日

正如一位友好的成员所指出的那样,尝试了nf_conntrack_pptp模块的方法。

执行了以下命令:

$ lsmod | grep nf_conntrack_pptp | wc -l
0

$ sudo modprobe nf_conntrack_pptp
lsmod | grep nf_conntrack_pptp
nf_conntrack_pptp      20480  0
nf_conntrack_proto_gre    16384  1 nf_conntrack_pptp
nf_conntrack          106496  2 nf_conntrack_proto_gre,nf_conntrack_pptp

然后尝试了我的调制解调器,结果一样失败。日志中也没有明显的变化。

更新2 - 2015年12月06日

以root身份执行,

systemctl restart network-manager.service

屏幕上没有任何输出(终端)。
从上述点到尝试使用调制解调器连接的对应日志可以在这里找到。

更新3 - 2015年12月06日

安装了ofono,然后再次尝试了调制解调器。

请点击这里查看日志。


更新4 - 2015年12月06日

再次以root身份执行,

systemctl restart network-manager.service

从上述点到尝试使用调制解调器连接的相应日志可以在这里找到。

更新5 - 2015年12月06日

/etc/dbus-1/system.d/nm-dispatcher.conf中将所有的"deny"更改为"allow"。

尝试连接。没有成功。

使用以太网连接进行了几次网络连接和断开连接。

然后执行sudo systemctl restart network-manager.service

拔出并重新插入调制解调器。

再次尝试连接。无法连接。

日志在这里


更新6 - 2015年12月06日
已执行
sudo killall ModemManager; sudo ModemManager --debug 2>&1 | tee /tmp/modem.log.txt

并且

export NM_PPP_DEBUG=1
sudo NetworkManager --no-daemon 2>&1 | tee /tmp/nm.log.txt

由于多个错误,无法运行mm-test.py。在指定位置找到了该文件。从https://github.com/openshine/ModemManager/blob/master/test/mm-test.py获取。
上述命令与Wiki中的命令有些不同。
日志文件在这里
更新7 - 2015年12月07日
再次执行(在/lib/udev/rules.d/40-usb_modeswitch.rules建议更改并重新启动后)
sudo killall ModemManager; sudo ModemManager --debug 2>&1 | tee /tmp/modem.log.txt

sudo NM_PPP_DEBUG=1 /usr/sbin/NetworkManager --log-level=debug --no-daemon > /tmp/nm.log.txt

还包括/var/log/syslog

日志文件在这里


更新8 - 2015年12月08日

最新的日志集在这里


更新9 - 2015年12月08日
测试1
  1. 这次从一张Ubuntu 14.04 32位的DVD启动电脑。电脑一启动,就开始记录MM日志。
  2. 插入调制解调器。运行lsusb发现它被识别为一个19d2:1232设备,需要切换到一个19d2:2003设备。由于安装usb-modeswitch需要重新启动机器(因此会丢失DVD运行时的安装),我准备了一个自定义的切换文件,并通过命令行将调制解调器切换了(sudo usb_modeswitch -I -c 19d2:2003)。
  3. 切换完成后,我收到通知说我正在使用移动宽带网络,并在网络管理器菜单中出现了一个新的宽带连接。
  4. 我按照通常的方式设置了上述连接(APN名称没有问题),连接自动建立。
  5. 我断开并弹出了调制解调器。
  6. 停止记录MM日志。

您可以在此处找到从会话开始到调制解调器弹出的完整 MM 日志和系统日志。

测试2

使用 Ubuntu 14.04 64 位 DVD 进行相同的测试。

日志可以在此处找到。


更新10 - 2015年12月09日

这次测试了wvdial,发现如果以root身份运行wvdial,我们可以建立一个成功的连接。

wvdial的配置和日志,以及相应的系统日志在这里

初步推测:该情况可能与相应用户的用户组有关。

但正如在这里所指出的:

使用所有这些工具进行拨号连接时,用户必须是"dip"和"dialout"组的成员,因此将所有需要通过拨号连接的用户添加到这些组中。

但我们可以发现,

$ groups masroor
masroor : masroor adm dialout cdrom sudo dip plugdev lpadmin sambashare family wireshark

所以,用户已经是指定组的成员。
现在,问题可能归结为以下两点之一:
1. 用户需要加入哪个附加组? 2. 我们如何以root身份运行移动宽带连接设置过程?(安全问题?)

更新11 - 2015年12月09日

wvdial适用于USB3,但不适用于USB1。

请在此处找到syslog here

还包括dmesg | grep tty > /tmp/dmesg.tty.txt的输出。但是请注意文件开头附近的那四行?


更新12 - 2015年12月10日

  1. /lib/udev/rules.d/77-mm-zte-port-types.rules中注释掉第4行(SUBSYSTEM!="tty", GOTO="mm_zte_port_types_end")。

  2. 重新启动我的机器。软断开电缆并插入调制解调器。

  3. 尝试连接。不成功。

syslog文件在这里


更新13 - 2015年12月10日

出于绝望,为了看看是否有一些本地的变化影响了连接,我用Ubuntu 15.04和15.10的DVD测试了这台机器。

  1. 使用Xubuntu 15.04 64位DVD启动机器。连接成功,就像魔法一样。
  2. 使用Ubuntu 15.10 64位DVD启动机器。连接失败,就像之前一样。

15.04和15.10之间发生了什么?

真是令人沮丧。


更新14 - 2015年12月10日
  1. 按照答案的指示创建了一个新文件/lib/udev/rules.d/78-mm-zte-port-types-RALPH.rules

  2. 重新启动了我的机器(或执行了sudo udevadm control --reload,实际上两种方法都尝试了)。插入了调制解调器。

  3. 调制解调器被识别出来了。

    $ lsusb
    Bus 001 Device 005: ID 19d2:2003 ZTE WCDMA Technologies MSM
    
  4. 软件断开了电缆,并尝试使用调制解调器进行连接。但是没有成功。

  5. 弹出了调制解调器。

机器卡住一次,这是个偶然事件吗?我的机器一年里通常不会卡住一次。
syslog文件和创建的规则文件在这里
更新15 - 2015年12月11日
  1. 将以下行添加到/lib/udev/rules.d/40-usb_modeswitch.rules文件中。

    # ZTE MF193E
    ATTR{idVendor}=="19d2", ATTR{idProduct}=="1232", RUN+="usb_modeswitch '%b/%k'"
    
  2. 保持/lib/udev/rules.d/78-mm-zte-port-types-RALPH.rules文件不变。

  3. 重新启动我的机器。插入调制解调器。

  4. 调制解调器被识别出来了。

    Bus 001 Device 005: ID 19d2:2003 ZTE WCDMA Technologies MSM
    
  5. 软件断开连接并尝试连接。但是没有成功。

  6. 弹出调制解调器。

  7. 删除/lib/udev/rules.d/78-mm-zte-port-types-RALPH.rules文件。

  8. 重新启动并再次尝试整个过程。但是还是没有成功。

syslog文件(完整的,我没有冒险错过任何重要部分)和提到的规则文件(40)在这里here
更新16 - 2015年12月11日
  1. /lib/udev/rules.d/40-usb_modeswitch.rules中仅保留一个1232规则,删除其他规则。
  2. 执行sudo udevadm control --reload
  3. 插入调制解调器。
  4. 调制解调器被识别了。
    总线001 设备005: ID 19d2:2003 ZTE WCDMA Technologies MSM
    
  5. 软件断开连接并尝试连接。不成功。
  6. 弹出调制解调器。
但是我们没有测试默认系统吗?你是不是打算把 /lib/udev/rules.d/78-mm-zte-port-types-RALPH.rules 留在原位?
syslog 文件(完整的,我没有冒险遗漏任何重要部分)和提到的规则文件(40)在这里:here
更新17 - 2015年12月11日
  1. /lib/udev/rules.d/40-usb_modeswitch.rules中注释掉了1232规则,并添加了一个2003规则。

    # ZTE MFxxx
    # 添加于2015年12月11日
    ATTR{idVendor}=="19d2", ATTR{idProduct}=="2003", RUN+="usb_modeswitch '%b/%k'"
    
  2. 执行sudo udevadm control --reload命令。

  3. 插入调制解调器。

  4. 调制解调器被识别为1232设备。我没有被要求尝试连接(据我所知,除非切换到2003,否则它不会注册到宽带网络)

    Bus 001 Device 008: ID 19d2:1232 ZTE WCDMA Technologies MSM
    
  5. 弹出调制解调器。

syslog文件和提到的规则文件(40)在这里


更新18 - 2015年12月11日

  1. 将所有规则文件保持原始形式。

  2. 使用shell脚本每秒监视lsusb的输出,并将输出保存在时间戳文件中。

  3. 插入调制解调器。(调制解调器首次出现在文件lssuboutouput.Fri Dec 11 16:56:29 BDT 2015.txt中)。从捕获的内容可以看出,它从一个1232设备切换到了一个2003设备。

  4. 尝试连接,但未成功。

  5. 弹出调制解调器。

syslog文件、带有时间戳的lsusb输出以及提到的规则文件可以在这里找到。

现在,您可能想要将syslog输出与时间戳进行匹配。


更新19 - 2015年12月11日
希望通过完全新的方向进行这项测试,以便隔离问题。
1. 保存在便携媒体中的文件 `/lib/udev/rules.d/40-usb-media-players.rules` 和 `/lib/udev/rules.d/77-mm-zte-port-types.rules`(来自Ubuntu 15.10机器)。 2. 使用Xubuntu 15.04 64位DVD启动机器。 3. 执行命令 `diff 77-mm-zte-port-types.rules /lib/udev/rules.d/77-mm-zte-port-types.rules > diff15.10and15.04_77-mm.txt`。第一个文件是从15.10保存的文件。 检查差异文件,没有找到 `idProduct` 1232 或 2003。 4. 执行命令 `diff 40-usb_modeswitch.rules /lib/udev/rules.d/40-usb_modeswitch.rules > diff15.10and15.04_40-usb.txt`。同样,第一个文件是从15.10保存的文件。 再次检查差异文件,没有找到 `idProduct` 1232 或 2003。 5. 插入调制解调器,调制解调器被识别为调制解调器。 `$ lsusb` `Bus 001 Device 008: ID 19d2:2003 ZTE WCDMA Technologies MSM` 6. 在设置移动宽带连接后可以轻松连接。 7. 弹出调制解调器。 8. 安装最新的USB_ModeSwitch。 `diff 40-usb_modeswitch.rules /lib/udev/rules.d/40-usb_modeswitch.rules` 现在返回NULL,如预期所示。 9. 执行命令 `sudo udevadm control --reload-rules`。 10. 插入调制解调器,调制解调器被识别为调制解调器。 `$ lsusb` `Bus 001 Device 008: ID 19d2:2003 ZTE WCDMA Technologies MSM` 11. 可以轻松连接。

我本可以尝试将MM和NM升级到Ubuntu 15.10的版本,只是为了看看会在哪个地方出问题。实际上我尝试过,但由于无休止的依赖问题而放弃了。

以上提到的所有差异文件在这里


更新20 - 2015年12月12日
测试1
  • 原始状态下的/lib/udev/rules

  • 在本次会话中尚未插入调制解调器设备。

  • 设置ModemManager进行调试,并设置udevadm捕获。

    sudo udevadm monitor --e |& tee udevadm.update20.WITHOUT78.log
    sudo killall ModemManager; sudo ModemManager --debug 2>&1 | tee MM.update20.WITHOUT78.log
    
  • 将调制解调器插入并等待直到它显示已注册到宽带网络。

  • 尝试连接但未成功。

  • 弹出调制解调器。

  • 整理日志文件。

  • 测试2

    使用/lib/udev/rules.d/78-mm-zte-port-types-RALPH.rules进行了上述测试的重复。

    日志文件的名称是自解释的。

    所有上述日志文件以及syslog和78规则文件都在这里

    我希望所有的日志文件都带有时间戳,以便更容易匹配。


    更新21 - 2015年12月15日

    1. 根据建议更改了规则文件。
    2. 重新启动了我的机器。
    3. 插入调制解调器并尝试连接。但是没有成功。

    规则文件和syslog这里


    更新22 - 2015年12月16日

    如在一条评论中建议的那样,从http://kernel.ubuntu.com/~kernel-ppa/mainline/安装了各种内核,并在每个内核启动后尝试连接使用调制解调器。

    1. 4.2.8-040208-generic,失败。

    2. 4.1.15-040115-generic,失败。

    3. 4.0.9-040009-generic,失败。

    因此,也许我们可以排除内核问题。


    更新23 - 2016年2月16日

    调制解调器在Ubuntu 16.04中开始正常工作。这个版本仍然是Alpha 1,但在我的笔记本电脑上运行良好。


    1我以前遇到过类似的问题,最后不得不禁用DHCP并使用手机运营商提供的网关地址和谷歌的DNS服务器。这是两三年前的事了,我不记得具体的步骤,也不知道这是否是同一个问题,但错误信息几乎一模一样。希望我能提供更多帮助。 - KGIII
    1@KGIII 我想试一试。只是有一个闲散的问题,如果这与DHCP有关,为什么在Windows中可以工作呢?DHCP服务器在分配地址时是否有任何区别?此外,同一台Linux机器(其中调制解调器无法连接)可以使用以太网DHCP工作。不管怎样,实际的实验将胜过千言万语的争论。 - Masroor
    我猜Windows处理网络的方式可能不同,并且可能已经配置好以应对这种特定的硬件或硬件类型。最近我并没有太关注Windows,所以我可能不是最好的信息来源。 - KGIII
    @KGIII 我尝试设置地址。不幸的是,移动宽带连接只有两个选项可用,即自动(PPP)的两种方式。所以,这是一条死胡同。无论如何,还是谢谢你。 - Masroor
    就我所理解的日志来看,一切都顺利进行,直到最后一行日志的日期为“11月29日06:56:28”,在那里某个ppp模块应该被激活。然而,在20秒的分配时间内,这并没有发生,因此NetworkManager放弃并将其全部关闭。我需要进一步了解才能提出对此的建议。 - Ralph Rönnquist
    @RalphRönnquist 谢谢你的评论。这个情况对我来说非常恼人。这个调制解调器之前在Ubuntu上可以使用,而且今天在Windows上也能用。那为什么它在Ubuntu上不能工作呢?我真的一点头绪都没有。 - Masroor
    在(https://forums.opensuse.org/showthread.php/507157-NetworkManager-pptp-doesn-t-work-after-lastest-update)上有一个相关的讨论,建议使用以下命令: modprobe nf_conntrack_pptp这可能只是一次尝试,但值得一试。 - Ralph Rönnquist
    在(https://bbs.archlinux.org/viewtopic.php?id=194042)上,你会找到更多关于这个研究领域的一些笔记。 - Ralph Rönnquist
    @RalphRönnquist 尝试了nf_conntrack_pptp的方法。似乎不起作用。请查看我的更新。 - Masroor
    好的。在您的日志中,有一行关于"'NM_IS_DEVICE (self)' 失败"的注释,并且通过谷歌搜索得知另一个解决方案建议。即,在设备连接的情况下,执行命令 "sudo systemctl restart network-manager.service"。(现在我们已经深入到 NetworkManager 的错误列表中了...)如果有修复的话,这不是一个长期解决方案,而是需要重复执行的运行时补丁。 - Ralph Rönnquist
    @RalphRönnquist 尝试了,请看我的更新。 - Masroor
    某种程度上的进展,我想是吧。我建议现在要处理的是关于 "ofono" 的新投诉。有一个ofono软件包需要安装,您是否已经安装了它?否则,请先安装它,然后将Dongle手动处理一次以查看发生了什么(请捕获日志)。 - Ralph Rönnquist
    @RalphRönnquist 已更新。 - Masroor
    让我们在聊天中继续这个讨论。 - Ralph Rönnquist
    1为了排除内核作为问题的源头,你可以尝试从http://kernel.ubuntu.com/~kernel-ppa/mainline/安装4.0和4.1内核,并进行测试吗? - muru
    @muru 请看一下我的更新22。看起来不像是内核问题。 - Masroor
    先生,您有任何聊天通知吗?如果没有的话,我们需要创建一个新的房间,并将@RalphRönnquist也加入其中,以便其他人可以讨论已完成和即将完成的事项。 - heemayl
    @heemayl 那里曾经有,但现在看不到了。请创建一个。到目前为止,我只使用了自动翻译工具。 - Masroor
    先生,我已经创建了一个新的房间 http://chat.stackexchange.com/rooms/33038/discussion-on-q-703725 @RalphRönnquist,请加入新的房间,我们也需要您的帮助。 - heemayl
    他所在的时区是+10。所以对他来说可能会有点晚。也许白天早些时间更合适。 - Masroor
    @Masroor先生,看起来是这样的..这也是其他人的问题.."他们"在错误的时区:)..我们可能不得不依靠评论来解决问题:) - heemayl
    是的,让我们投票支持平地球理论,然后大家可以一起吃早餐 :-) ... 我会尽量今晚看一下;大约在你们的时钟上是4-8点之间。 - Ralph Rönnquist
    4个回答

    加载ofono软件包可能是好的,但显然您的调制解调器型号ZTE MF193E不在ZTE列表中。将其与其他ZTE调制解调器(例如MF190J)进行比较,该调制解调器可能需要相同的特殊udev规则,在插入dongle时运行usb_modeswitch,为此您可以作为root用户向文件
    /lib/udev/rules.d/40-usb_modeswitch.rules
    添加以下两行,例如,靠近# ZTE MF190J注释的位置:
    # ZTE MF193E
    ATTR{idVendor}=="19d2", ATTR{idProduct}=="2003", RUN+="usb_modeswitch '%b/%k'"
    

    加上一个空行,这样看起来更舒适。
    可能明智的做法是在此之后重新启动,只需发现一切都像魔术一样运作 :-)
    或者不是。如你所知,对我来说这是深水区,但如果仍然无法工作,可能需要另一个ModemManager调试日志,以进行另一个猜测。
    编辑:
    我现在正在查看modemmanager.txt中的两行内容:
    [mm-broadband-bearer.c:1254] connect(): Launching 3GPP connection attempt with APN 'WAP'
    

    并且

    [mm-broadband-bearer.c:994] parse_pdp_list(): Found PDP context with CID 1 and PDP type ipv4 for APN 'wap'
    

    我猜第一个是指你的宽带设置,而后者是指内部绑定到一个“PDP上下文”(不管那是什么)。看起来,调制解调器提供了9个备选上下文,其中包括一个apn='WAP'的选项,但ModemManager采用了不区分大小写的匹配。
    大小写差异可能是后续问题的原因:例如,ppp可能需要一个'wap'的配置(而不是'WAP'),但找不到它,或者远程端期望apn='WAP',但得到的是'wap',导致出错。
    第一个选项可以很容易地进行测试(并且很可能被排除),只需将配置更改为使用'wap'而不是'WAP'。也许你之前尝试过这个,但当时没有安装ofono软件包,所以再次测试不会有坏处,尽管第二个选项更有可能。
    第二个选择也更有问题,因为调制解调器上有一个可以匹配大写的"PDP context"。通过谷歌这个问题,似乎不区分大小写的匹配是正确的,参照了3GPP TS 23.003第9.1章的规范,并且在去年11月的版本mm-1-4中已经添加了一个修补程序到ModemManager中。所以在这种情况下,您的调制解调器并没有被告知,并且它期望区分大小写的匹配,而ModemManager不幸地直接使用不区分大小写的匹配而不是备选方案。
    对于第二个问题的一种解决方法当然是使用不同的ModemManager:要么找到并安装一个在此修补程序之前的版本,或者(如果有足够的空闲时间)自己编写一个ModemManager。但这两种方法都不是随意做的,所以也许我们需要四处浏览一下,以获得更多证据证明这(现在)是问题所在,并尽可能找到其他解决方法。或者运气好的话,真懂行的人会来帮忙...
    编辑2
    是的,由于依赖关系,版本回滚并不容易。而自己编写则远非一件愉快的事情。
    两个可能有用的工具:命令mmcli和(http://m2msupport.net/m2msupport/module-tester/)。
    问题,我认为,是ModemManager选择了apn='wap'的PDP上下文1,而应该选择apn='WAP'的PDP上下文9。也许可以通过使用其中一个工具来解决这个问题。要么在连接过程中强制选择9,要么通过删除坏的'wap'上下文来解决,而模块测试工具被宣传为能够做到这一点。
    调制解调器测试工具似乎是一个在浏览器中使用的Java工具,所以您需要设置浏览器以了解您的Java位置,并且需要让Java知道它。请尝试这种方法;我自己没有使用过,但是看到了截图,我猜它会将PDP上下文呈现为“数据呼叫”选项卡,在那里您首先要注意它显示的所有内容,然后编辑“wap”条目以扭曲“wap” apn标签,比如改为“wap1”和“wap2”(这样在寻找“WAP”时可以“隐藏”它们)。然后保存并关闭,并再次操作无线上网卡。获取日志;现在似乎syslog已经足够了,以防它仍然拒绝工作。 mmcli命令在这个故事中也似乎很有用;输入man mmcli来了解更多信息,但我没有在那里看到关于PDP上下文的任何内容。
    编辑3
    好主意!从DVD进行测试。这告诉我们,我对APN的追踪是错误的,一切都取决于ppp是否能够启动。至少,这将是我新的着眼点。
    首先我们注意到pppd有版本差异(从2.4.5到2.4.6),但这可能不是问题,因为那时候使用dongle的人都会参加这次活动。
    嗯,ppp;我需要激起我上个千年的记忆 :-)。不幸的是,我今天很忙,但下次有时间时,我会联系你,看看你进展到哪个阶段。我要查看的第一个后街是:1)用户是否在正确的组中?2)凭据是否正确?3)ppp/chat配置文件mod是否正确? ppp调试日志输出在nm.txt中(如几天前所述),但也应该有一种方法来请求更详细的日志记录。
    编辑4
    确保/etc/ppp/pap-secrets和/etc/ppp/chap-secrets具有组dip(根据需要使用chgrp)和模式740(或-rw-r-----)(根据需要使用chmod)。我的没有。
    编辑5
    这棵树怎么样?比较工作中的wvdial系统日志和不工作的系统日志,似乎由于某种原因,wvdial使用了ttyUSB3,而不工作的ModemManager仍然使用ttyUSB1。我不确定这是否有任何重要性,但显然ttyUSB1和ttyUSB3都被识别为AT能力的调制解调器。
    所以,作为一个测试,也许你可以编辑/etc/wvdial.conf,在[Dialer Defaults]下面添加一行:
    Modem = /dev/ttyUSB1
    

    对于一个测试,使用 ttyUSB3,而另一个使用 ttyUSB1;两者都在 root 权限下运行;只是为了看是否有不同的行为。特别是,如果使用 ttyUSB1 会出问题,而使用 ttyUSB3 则没有问题,那么就应该研究一下如何让 ModemManager 也使用 ttyUSB3。对于其他测试结果,我认为我们将回到追逐 ppp 领域中的雪貂。

    编辑 6

    我认为可以忽略 dmesg 日志;所有日志都是这样的。 新的 syslog 只显示了 ttyUSB3 的测试,但也许我们可以假设如果可以教 NetworkManager 使用 ttyUSB3 并忽略 ttyUSB1(针对此调制解调器),生活会变得更好。

    我还发现(https://bugs.launchpad.net/ubuntu/+source/modemmanager/+bug/819784)尤其是第10篇帖子令人沮丧 :-(

    显然适用的`udev`规则在`/lib/udev/rules.d/77-mm-zte-port-types.rules`中并不适用,但据说这可能是一个方向。而且,对于`udev`魔术只有非常基础的了解,我仍然会质疑它的第四行,它说:
    SUBSYSTEM!="tty", GOTO="mm_zte_port_types_end"
    

    我认为那一行需要一个初始的#来注释掉。具体来说,我阅读文件后发现,为了使用好的部分,包括"2003"产品规则,它需要一个调用状态为SUBSYSTEM=="tty"和SUBSYSTEMS="usb",至少在测试时,跳过"tty"过滤应该是安全的。目前我没有更好的解决办法。
    编辑7
    在与我最喜欢的搜索引擎共度了一些美好时光后,我更加相信ttyUSB的选择是一个根本性的问题。我指出的udev规则是正确的,你应该撤销那个编辑。
    然而,我开始相信文件末尾的配置规则对于产品ID "2003" 是误导性的。从日志来看,对我来说,产品ID "2003" 实际上是dongle的存储设备端,而调制解调器端的产品ID是"1232"。你可以通过在文件/lib/udev/rules.d/77-mm-zte-port-types.rules中复制这两个"2003"规则来进行测试。
    ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="1232", ENV{.MM_USBIFNUM}=="03", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1"
    ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="1232", ENV{.MM_USBIFNUM}=="01", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1"
    

    或者更好的是,在旁边添加一个新文件,例如命名为78-ralph.rules,但是你还需要在它周围添加SUBSYSTEM和SUBSYSTEMS保护。
    然后,拔出插件,运行udevadm control --reload(或重新启动),然后插入插件。然后再进行一次syslog捕获,除非现在它恰好可以工作。
    然而,实际问题是ModemManager在预探测时丢弃了插件libmm-plugin-zte.so,最终使用了一个通用的调制解调器处理程序。如果我对产品ID的判断正确,那么这可能是原因;预探测会寻找一个ID_MM_ZTE_PORT_TYPE_MODEM属性,而在“1232”产品ID(补丁之前)中缺少此属性,导致zte插件被丢弃。
    编辑8

    syslog日志有点短,缺少了ModemManager无法安装zte插件的开头部分。不过,很明显通用调制解调器插件仍然在使用。现在,可能我之前给你的usb_modeswitch规则也是错的;我以为它是从"2003"切换到其他状态,但是可能实际上是从其他状态切换到"2003"。不管怎样,man usb_modeswitch(我应该先看一下)似乎暗示它是将产品ID切换到某个状态,而不是从某个状态切换出来。无论如何,日志显示了这种情况。因此,请将规则更改为使用"1232",然后再试一次。

    至少我学到了一点udev的知识。

    编辑9

    好的。问题仍然存在(或者也存在)于ModemManager在预探测阶段丢弃了ZTE插件。15.10版本的ModemManager调试日志(日志集合"debuglogs*")都说明了由于供应商ID/产品ID测试未通过,ZTE插件被丢弃的原因。

    去找原始代码,卢克!我借此机会简要查看了ModemManager的源代码,它显示插件作为一个vid/pid表,但不包括19d2/2003……尽管如此,我还没有找到该表的来源,所以无法验证。

    或许这里可能存在时间问题。例如,当设备是19d2/1232时,ModemManager在预探测时运行。这个想法与观察相吻合,即使用78-mm-zte-port-types-RALPH.rules udev规则使得ModemManager对设备更满意。但是,为什么当设备切换到19d2/2003时,它不能保持满意并利用该插件呢?

    也许需要更多日志 :-) 使用ModemManager进行调试,同时在另一个终端中捕获命令udevadm monitor --e |& tee udevadm.log(从(https://wiki.ubuntu.com/DebuggingUdev)获取该命令),当你插入设备时。

    做这个两次:一次不带78-mm-zte-port-types-RALPH.rules,一次带着规则...两次都从新启动。即:
    1. 设置/lib/udev/rules.d,带或不带*-RALPH.rules文件
    2. 拔出设备
    3. 重新启动
    4. 为调试设置ModemManager并设置udevadm捕获
    5. 插入设备并等待一分钟
    6. 整理日志文件
    7. 重复从1开始进行下一个测试
    那些日志应该能告诉我们ZTE插件被丢弃的位置,而且据我所知,它还会告诉我们有关udev事件处理的情况。
    编辑10
    (我几乎到了极限,但我还剩下一两口气:-)
    首先,所有的udev修饰似乎都按照预期结束,只有一些属性中有几个问号。特别是,78-*-RALPH.rules应该被丢弃;它没有用处。
    我觉得我可以从中读出一些东西,但我不确定应该如何修复它。基本上,据我所见,当插入dongle时,会出现一系列udev事件。专注于与ttyUSB1有关的事件,有一个“早期”事件:
    KERNEL[3867.310990] add      /devices/pci0000:00/0000:00:1d.7/usb1/1-8/1-8:1.1 (usb)
    

    这会导致usb_serial驱动程序被加载,并出现/dev/ttyUSB1。这特别引发了另一个事件:
    KERNEL[3867.435102] add      /devices/pci0000:00/0000:00:1d.7/usb1/1-8/1-8:1.1/ttyUSB1/tty/ttyUSB1 (tty)
    

    我认为这也会触发ModemManager。你必须去syslog中查看证据,因为日志之间没有严格的关联。该事件的时间戳为3867.435102,并且syslog在一个被时间戳为3867.437412的内核日志行之后呈现了最接近的后续ModemManager日志行。
    按照我的思路,ModemManager不应该立即触发,而是在随后的ttyUSB1事件之后才触发。
    UDEV  [3867.580427] add      /devices/pci0000:00/0000:00:1d.7/usb1/1-8/1-8:1.1/ttyUSB1/tty/ttyUSB1 (tty)
    

    其中附加了中兴的属性。

    在 MM 日志中,我们将位于标记为 1449934745.363291 的行,这显然是一个“实时”时间戳,而不是“内核时间”时间戳。

    ModemManager 然后在1449934745.450398完成其预探测,即87毫秒后,在内核时间术语中,这将接近于3867.524519,并且比上面那个“好”的 UDEV 事件报告早55毫秒。

    请注意,在 syslog 中,ModemManager 确实投诉说 ttyUSB1 没有设置其属性,也许该投诉与在 80-mm-candidate.rules 中发生的“标记”有关。根据该文件中的注释,该标记似乎是试图解决这个问题,但如果是这样,在这种情况下似乎不起作用。

    解决此问题的可能性之一是将 80-mm-candidate.rules 中的“tty”规则更改为:

    ENV{.ID_PORT}=="?*", SUBSYSTEM=="tty", ENV{ID_MM_CANDIDATE}="1"
    

    在我看来,这将确保在设置ZTE属性之前延迟设置ID_MM_CANDIDATE。.ID_PORT设置是一个60-serial.rules规则的结果(之前称为60-persistent-serial.rules),而对标记规则的添加条件仅仅是它具有一个值。
    条件并不完全是一个ZTE属性,只是为了使规则更通用。更具体的一步可能是要求ENV{.MM_USBIFNUM}="?*",因为这个赋值是由77-mm-zte-port-types.rules完成的。
    总的来说,我对udev规则的排序并不确定,我也不确定这是否真的能够阻止ModemManager过快地执行。然而,如果不能,那么80-mm-candidate.rules几乎没有作用,也许一切都归结为15.04版本中对ModemManager的“改进”。
    编辑21
    叹息。可能与此无关,但您可能需要检查一下您的7-zte-mutil_port_device.rules文件;那是其他实验的残留物吗?无论如何,在这里不相关。
    515.558184516.381549之间仍然有接近一秒的时间,ModemManager热切而错误地获取了/dev/ttyUSB1,并且虽然抱怨它没有设置好,但仍然进行了预探测并且丢弃了ZTE插件。换句话说,规则补丁并没有让ModemManager等待。
    我想你也测试过使用ENV{.MM_USBIFNUM}="?*"而不是ENV{.ID_PORT}=="?*"
    实际上,为了确认设置ENV{ID_MM_CANDIDATE}=1是否重要,您应该暂时将80-mm-candidate.rules移开,然后查看(在syslog中)ModemManager是否忽略/dev/ttyUSB1。我怀疑是“不会”。
    然后,嗯,也许你可以使用一个可用的版本,比如14.04,如果需要的话,可以在虚拟机中运行15.10,除非当然已经全部都在虚拟机中了。
    我想我必须承认失败了。

    很遗憾,它没有起作用。请查看我提问中的日志。 - Masroor
    嗯。这个日志显示问题出现在调制解调器层面,但在PPP层面失败了。你介意也获取一下nm.txt日志和可能的系统日志,以进行插拔操作。顺便说一句,我猜当你插入调制解调器时,它也不是连接在电缆上的吧。 - Ralph Rönnquist
    更新了同一个.zip文件,包含了两个额外的日志。我在进行测试时,总是特意(轻轻地)拔掉电缆。虽然以前电缆从未出过问题。之前,在旅行前购买数据包后,我总是在家里的电脑上连接电缆测试调制解调器,然后再在笔记本电脑上使用调制解调器。再次感谢您的询问,确认一下没有什么坏处。 - Masroor
    请注意我在答案中的修改:下一个猜测。祝好! - Ralph Rönnquist
    尝试了多个APN字符串,包括大小写,但都没有成功。现在感到非常沮丧。 - Masroor
    是的,我认为选项2的问题在这里,但也许你可以尝试使用“Teletalk”(或者再次使用)并为我生成一个“ModemManager”日志。 - Ralph Rönnquist
    安装了较旧版本(1.0.0)的ModemManager。在安装过程中出现以下信息:“invoke-rc.d:modemmanager.service不存在,但是存在upstart作业。在存在systemd或init作业之前,无法启动或停止任何内容。”在尝试启动MM时出现以下信息:“ModemManager[10859]:<info> ModemManager(版本1.0.0)正在启动... ModemManager[10859]:<warn> 无法获得“org.freedesktop.ModemManager1”服务名称 ModemManager[10859]:<info> ModemManager已关闭”。 - Masroor
    令我沮丧的是,两三年前,即使使用2G手机,我也必须通过连接电缆来上网,而且只需要几个“下一步”就能完成设置。而现在,随着版本升级和那些大牌的炫目效果,生活变得如此困难。 - Masroor
    新的日志集在那里。为占用您这么多时间感到内疚。 - Masroor
    没问题。我已经年龄足够选择我的快乐了 ;-). 最新编辑。 - Ralph Rönnquist
    经过一段艰难的时间,发现谷歌浏览器不再支持Java。在火狐浏览器中调用了该应用程序。现在发现很难让它识别我的设备,查找端口功能无效。尝试关闭MM以释放端口,但没有成功。一旦有进展,我会立即告诉你。 - Masroor
    由于似乎无法让调制解调器测试工具识别我的设备(你有看到它明确提到了两个制造商,尽管还有一个“全部”),我使用了调制解调器(成功地,对我来说基于过去几周的情况很难相信)与14.04 DVD一起,捕获了日志。请查看我的更新。15.10可能出了什么问题? - Masroor
    根据你的建议,我们可以在一些小众领域进行调查,比如:1)用户是否属于正确的群体?这样我们可能会取得一些实质性的进展。请看我的最新更新。我们是不是看到了曙光的尽头? - Masroor
    确保 /etc/ppp/pap-secrets/etc/ppp/chap-secrets 的拥有者组是 dip(如有需要,使用 chgrp 命令进行设置),并且权限为 740(或 -rw-r-----)(如有需要,使用 chmod 命令进行设置)。我的权限没有正确设置。 - Ralph Rönnquist
    按建议更改了,甚至重新启动了。但是它没有起作用,真难以置信。请看这个页面,大约在中间位置,Exec=gksudo "Teletalk_3G"。这表明我们正在走在正确的轨道上。但是这个实用程序在64位系统中无法安装。而且NM方法应该是有效的,就像三个月前一样。 - Masroor
    测试并更新。 - Masroor
    udev规则的讨论对我来说是非常深奥的。据我所理解,你在质疑规则文件中的某些行,这些行似乎会将读者移动到末尾,除非找不到某个tty。我进行了测试并进行了更新。请查看我的帖子。 - Masroor
    我有一种感觉,这次会成功。但事实并非如此。请看更新内容。值得一提的是,在成功的DVD案例中,“lsusb”输出与第14个更新中的输出完全相同。 - Masroor
    谢谢。我对最后一句中的"doable"有点困惑。在/lib/udev/rules.d/78-mm-zte-port-types-RALPH.rules中创建的规则已经包含了1232。我应该如何修改它?请具体说明。 - Masroor
    抱歉,我指的是在/lib/udev/rules.d/40-usb_modeswitch.rules中提出的第一个规则。 - Ralph Rönnquist
    好的。再来一个测试:显然,在40-usb_modeswitch.rules中已经有一个“1232”规则,也许这会导致它切换两次。注释掉或删除我的规则(其中之一),然后再次进行测试。与此同时,我会继续阅读日志..... - Ralph Rönnquist
    实际上,对我来说,如果2003年有一个切换规则而1232年没有规则,那么一切都会更有意义。也就是说,如果设备注册为2003年,则应进行切换(到1232年),但如果注册为1232年,则不应进行切换。我之前没有意识到有1232年存在...所以:简而言之,请将其恢复为我的2003年规则,然后找到并注释掉1232年的规则。测试一下,看看结果。 - Ralph Rönnquist
    好的,请忽略第16个更新,等待第17个更新。 - Masroor
    或许我有点困惑。你能帮我捕获一下 lsusb 的输出吗?它应该能告诉我当前的产品ID是什么,以及那个产品ID是什么意思。但是日志文件中出现了太多的切换信息。还有其他需要进行切换的地方吗?在哪里?如何操作?... - Ralph Rönnquist
    最近几次更新中,每次都包含了lsusb的输出。请注意最近几次更新中的第3或第4点,即14(3)、15(4)、16(4)和17(4)。在前三种情况下,初始状态为1232,几秒钟后切换到2003,当它在移动宽带中注册时。唯一的例外是最后一个。根据我的学习过程,除非它切换到2003,否则它不是一个调制解调器,而是一个存储设备。请参考这个链接 - Masroor
    谢谢,显然lsusb的标题对于1232和2003是相同的。问题在于日志中,当切换到2003时,后续的行暗示着一个存储设备,而当切换到1232时,它们则暗示着一个调制解调器。对我来说是这样的。所以你提到的那个可能正好相反。也许使用lsusb -v命令可以告诉我们区别? - Ralph Rönnquist
    请注意更新18和19。但是特别是对于第19个,请不要被我误导。我的知识非常浅薄,我只是试图通过向您提供信息来学习。 - Masroor

    调制解调器在Ubuntu 16.04中开始正常工作了。虽然这个版本仍处于开发阶段,但在我的笔记本电脑上运行良好。
    我希望能提供更多关于它如何开始正常工作的技术细节。

    看了一眼,似乎这并不是第一次处理这条龙。在12.10和13.04之前就有一个bug,也许这个bug从未修复过,或者新的补丁破坏了之前正常工作的东西。
    希望我正确地阅读了您的技术规格,我需要指向这个方向(MF190J): 3G调制解调器(ZTE MF190J)仍然需要手动调整。

    很遗憾,这个设备的usb_modeswitch规则已经包含在标准规则集中了。 - Ralph Rönnquist

    你试过这个吗?
     rfkill list up
    

    然后制作这个脚本并运行它:
     #/bin/sh
    
         Case [!$] in
            /bin/sh
            networkname="true"
            networkname="the ip adr type in here"
            nmcli nm networkname --force-yes
            resolve.conf the ip adr type in here
         endl
    

    也许这样会很好。


    我应该输入哪个IP地址?这是一个PPP连接。 - Masroor
    1写一个充满错误语法的复杂脚本,真是浪费时间。你知道吗,sh 其实是链接到 dash 的? - heemayl