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

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

我有一台 ZTE MF-193E 调制解调器,以前用起来还不错。一年多前我买了这台调制解调器,开箱后就一直能用。现在,随着 Ubuntu 版本不断更新,我的情况变得越来越困难。

几个月前,这款调制解调器在 Ubuntu 15.04(64 位)上还能正常工作。现在,在 Ubuntu 15.10(64 位)上,它却无法连接。

我有设置移动宽带连接。我尝试过各种 APN 字符串,但之前都没有出现过这个问题。

(调制解调器在 Windows 10 中运行良好,因此这根本不是硬件问题。另外,调制解调器管理器 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 月 6 日

正如一位好心成员指出的那样,尝试了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 月 6 日

以 root 身份执行,

systemctl restart network-manager.service

屏幕上没有输出(终端)。

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


更新 3 - 2015 年 12 月 6 日

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

请查看日志这里


更新 4 - 2015 年 12 月 6 日

再次以 root 身份执行,

systemctl restart network-manager.service

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


更新 5 - 2015 年 12 月 6 日

将所有“拒绝”更改为“允许” /etc/dbus-1/system.d/nm-dispatcher.conf

尝试连接。没有成功。

一些网络与以太网连接建立和断开。

其次是sudo systemctl restart network-manager.service

拔出并插入调制解调器。

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

日志是这里


更新 6 - 2015 年 12 月 6 日

已执行

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 月 7 日

再次执行(建议更改/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 月 8 日

更新后的日志集为这里


更新 9 - 2015 年 12 月 8 日

测试 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. 切换完成后,我立即收到通知,我已开启网络Mobile Broadband Network,并且网络管理器菜单中出现了一个新的宽带连接。

  4. 我以通常的方式设置上述连接(APN 名称不是问题),并且连接自动建立。

  5. 我断开了连接并弹出了调制解调器。

  6. 停止捕获 MM 日志。

可以找到从会话开始到调制解调器弹出的完整 MM 日志和系统日志这里

测试 2

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

可以找到日志这里


更新 10 - 2015 年 12 月 9 日

这次测试wvdial发现,如果wvdial以 root 身份运行,我们会得到一个成功的联系。

confwvdial和 log 以及相应的 syslog 是这里

初步猜测:该情况可能和对应用户的用户群有关。

但正如所指出的这里

使用所有这些工具,要建立拨号连接,用户必须是“dip”和“dialout”组的成员,因此将所有应该通过拨号连接的用户放入这些组中。

但我们发现,

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

因此,该用户已经是指定组的成员。

现在,也许问题可以归结为以下两点之一,

  1. 用户需要加入哪个附加组?
  2. 我们如何以 root 身份运行移动宽带连接设置过程?(安全问题?)

更新 11 - 2015 年 12 月 9 日

wvdial适用于 USB3,并且不是与 USB1 配合使用。

请查找系统日志这里

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


更新 12 - 2015 年 12 月 10 日

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

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

  3. 已尝试连接。未成功。

系统日志文件是这里


更新 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. 弹出调制解调器。

机器死机一次,是随机事件吗?我的机器通常一年不会死机一次。

系统日志文件和创建的规则文件是这里


更新 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. 重新启动并再次尝试整个过程。再次失败。

系统日志文件(完整,我没有冒险错过任何重要部分)和提到的规则文件(40)是这里


更新 16 - 2015 年 12 月 11 日

  1. 只留下一条 1232 规则 /lib/udev/rules.d/40-usb_modeswitch.rules,删除另一条。

  2. 已执行sudo udevadm control --reload

  3. 插入调制解调器。

  4. 调制解调器已被识别。

    Bus 001 Device 005: ID 19d2:2003 ZTE WCDMA Technologies MSM
    
  5. 软断开电缆并尝试连接。未成功。

  6. 弹出调制解调器。

但是我们上面不是已经测试过默认系统了吗?你的意思是保留/lib/udev/rules.d/78-mm-zte-port-types-RALPH.rules它吗?

系统日志文件(完整,我没有冒险错过任何重要部分)和提到的规则文件(40)是这里


更新 17 - 2015 年 12 月 11 日

  1. 注释掉了 中的 1232 规则 /lib/udev/rules.d/40-usb_modeswitch.rules,并为 2003 年添加了一条规则。

    # ZTE MFxxx
    # Added on December 11 2015
    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. 弹出调制解调器。

系统日志文件和提到的规则文件(40)是这里


更新 18 - 2015 年 12 月 11 日

  1. 将所有规则文件保留为其原始形式。

  2. lsusb使用 shell 脚本每秒观察一次输出。将输出捕获到带有时间戳的文件中。

  3. 插入调制解调器。(调制解调器首先出现在文件中 lssuboutouput.Fri Dec 11 16:56:29 BDT 2015.txt)。从捕获中我们可以发现,很明显它从 1232 设备切换到 2003 设备。

  4. 已尝试连接。未成功。

  5. 弹出调制解调器。

系统日志文件、带时间戳的lsusb输出和提到的规则文件是这里

现在,您可能希望将系统日志输出与时间戳进行匹配。


更新 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 保存的文件。

    检查差异文件后发现没有idProduct1232 或 2003。

  4. 已执行diff 40-usb_modeswitch.rules /lib/udev/rules.d/40-usb_modeswitch.rules > diff15.10and15.04_40-usb.txt。同样,第一个文件来自 15.10 保存的文件。

    再次检查差异文件,没有发现idProduct1232 或 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,看看它在哪里出现问题。我确实尝试过,但由于无休止的依赖问题而放弃了。

上面提到的所有 diff 文件都是这里


更新 20 - 2015 年 12 月 12 日

测试 1

  1. 处于/lib/udev/rules原始状态。

  2. 调制解调器设备尚未插入到此会话中。

  3. 设置 ModemManager 进行调试并设置 udevadm 捕获。

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

  5. 尝试连接,但没有成功。

  6. 弹出调制解调器。

  7. 打包日志文件。

测试 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-通用,失败。

  2. 4.1.15-040115-通用,失败。

  3. 4.0.9-040009-通用,失败。

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


更新 23 - 2016 年 2 月 16 日

调制解调器已在 Ubuntu 16.04 中开始运行。此版本仍处于 Alpha 1 阶段,但在我的笔记本电脑上运行良好。

答案1

加载ofono软件包可能很好,但显然您的调制解调器型号 ZTE MF193E 不在 ZTE 列表中。与其他 ZTE 调制解调器(例如 MF190J)相比,此调制解调器可能需要相同的特殊udev规则,以便usb_modeswitch在插入加密狗时运行,为此,您可以以 root 身份udev向文件添加一条新规则
/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 上下文”匹配。谷歌搜索这个问题,似乎不区分大小写的匹配符合(显然相关的)规范“3GPP TS 23.003 第 9.1 章”,并且ModemManager去年 11 月添加了一个补丁来执行此操作(据我所知,是在其版本 mm-1-4 中)。因此在这种情况下,您的调制解调器没有被告知,它期望区分大小写的匹配,但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”时“隐藏”它们)。然后保存并关闭,再次调整加密狗。获取日志;看来系统日志现在就足够了,以防它仍然拒绝播放。

这个mmcli命令在这个故事中似乎也很有用;确实man mmcli读过它,但我没有在那里看到有关 PDP 上下文的任何内容。

编辑3

好主意!从 DVD 进行测试。这告诉我们,我对 APN 的理解是错误的,一切都在于让 ppp 出现。至少,那会成为我的新目标。

首先,我们注意到 pppd 存在版本差异(从 2.4.5 到 2.4.6),但这可能不是问题,因为那时每个使用加密狗的人都会参与这次旅行。

嗯,ppp;我需要唤起我对上个千年的记忆 :-)。不幸的是,我今天很忙,但下次有时间时我会联系你,看看你取得了多大的进展。我要调查的第一个后巷是:1) 用户是否在正确的组中?2) 凭证是否正确?3) ppp/chat 配置文件 mod 是否正确?ppp 调试日志在 nm.txt 中出现(与几天前一样),但也应该有一种方法可以要求它提供更详细的日志记录。

编辑4

确保/etc/ppp/pap-secrets/etc/ppp/chap-secrets有组dipchgrp根据需要使用)和模式740(或-rw-r-----)(chmod根据需要使用)。我的没有。

编辑5

那么这棵树怎么样:将工作wvdial系统日志与非工作系统日志进行比较,似乎出于某种原因wvdial使用ttyUSB3,而非工作系统ModemManager继续使用ttyUSB1。我不确定这是否重要,但显然但ttyUSB1ttyUSB3两者都响应为支持 AT 的调制解调器。

因此,作为测试,也许您可​​以进行编辑,/etc/wvdial.conf使其[Dialer Defaults]包含以下行:

Modem = /dev/ttyUSB1

对于一个测试,以及ttyUSB3另一个测试;两者都以 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不适用,但据说应该去哪里。而且,由于对魔术只有非常基本的、101 级之前的了解udev,我无论如何都会考虑质疑它的第 4 行,它说:

SUBSYSTEM!="tty", GOTO="mm_zte_port_types_end"

我认为该行需要首字母#,以便注释掉。具体来说,我对该文件的理解是,它需要 SUBSYSTEM=="tty" 和 SUBSYSTEMS="usb" 的调用状态才能使用好位,包括“2003”产品规则,并且至少对于测试来说,跳过“tty”过滤应该是安全的。而且我现在没有更好的办法。

编辑7

在花了不少时间使用我最喜欢的搜索引擎后,我更加相信 ttyUSB 的选择是这里的根本问题。我指出的 udev 规则没有问题,你应该恢复该编辑。

但是,我开始相信该文件末尾的产品 ID“2003”的配置规则具有误导性。从日志来看,我认为产品 ID“2003”实际上是加密狗的存储设备端,而调制解调器端的产品 ID 为“1232”。您可以通过在文件中复制产品 ID“1232”的两个“2003”规则来测试这一点/lib/udev/rules.d/77-mm-zte-port-types.rules

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,而产品 ID“1232”(补丁之前)缺少此属性,结果 zte 插件被丢弃。

编辑8

日志syslog有点短;缺少 ModemManager 无法安装 zte 插件的开头。但是,很明显,无论如何都会使用通用调制解调器插件。现在,usb_modeswitch我早些时候给你的规则可能也是错误的;它决定切换我以为是“2003”“2003”。但是,man usb_modeswitch(我应该早点看看)有点暗示它发生了变化产品 ID,而不是无论如何,日志显示这种情况会发生。因此,请将该规则更改为使用“1232”,然后重试。

如果没有别的,至少我必须学习一些关于 udev 的知识。

编辑9

很好。问题仍然是(或者也是)ModemManager 在预探测时丢弃了 ZTE 插件。15.10 的 ModemManager 调试日志(日志集“debuglogs*”)都表明 ZTE 插件由于供应商 ID/产品 ID 测试而被丢弃。

找到源头,卢克!借此机会,我简单查看了一下 ModemManager 的源代码,发现该插件是一个不包含 19d2/2003 的 vid/pid 表...不过,我没有找到该表的源代码,所以无法验证。

或者这里可能存在时间问题。例如,当设备为 19d2/1232 时,ModemManager 会运行预探测。这种想法与以下观察结果一致:拥有 78-mm-zte-port-types-RALPH.rules udev 规则会使 ModemManager 对设备更满意一些。但是,为什么当设备切换到 19d2/2003 时,它不能保持满意并使用该插件呢?

udevadm monitor --e |& tee udevadm.log可能需要更多日志 :-) 调试 ModemManager,并在插入设备时捕获命令(在另一个终端中)。我从(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扔掉;它没用。

我想我可以从中读出一些东西,但我不确定应该如何修复它。基本上,正如我所看到的,当加密狗插入时,会出现一系列的 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显示其最近的后续日志行。ModemManager3867.437412

按照我的想法,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投诉,也许该投诉与 中发生的“标记”有关。根据该文件中的注释,该标记似乎是试图解决这个问题,但如果是这样,它似乎在这种情况下不起作用。ttyUSB180-mm-candidate.rules

解决这个问题的一个可能性可能是将“tty”规则改为80-mm-candidate.rules

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

在我看来,这将确保设置ID_MM_CANDIDATE延迟到 ZTE 属性设置完成为止。设置是规则(之前调用).ID_PORT的效果,标记规则的附加条件只是它有一个值。60-serial.rules60-persistent-serial.rules

条件并非完全是 ZTE 属性,只是为了使规则更通用。更具体的一步是改为 require ENV{.MM_USBIFNUM}="?*",因为此处的分配是通过 发生的77-mm-zte-port-types.rules

总的来说,我不太确定udev规则排序,我也完全不确定这是否真的能阻止ModemManager行动过快。然而,如果不能,那么80-mm-candidate.rules它就没有什么作用,也许一切都归结为ModemManager15.04 的“改进”。

编辑21

叹息。可能不相关,但你可能想检查一下你的7-zte-mutil_port_device.rules文件;那是其他实验的残留物吗?无论如何,与此无关。

515.558184和之间仍有近一秒钟的时间,516.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,除非当然它已经全部在虚拟机中了。

我想此时我需要承认失败。

答案2

调制解调器已在 Ubuntu 16.04 中开始运行。此版本仍处于开发阶段,但在我的笔记本电脑上运行良好。

我希望我能提供更多有关它如何开始运作的技术细节。

答案3

看了一眼之后,似乎这不是第一次妥善处理这条龙。在 12.10 和 13.04 之前,这是一个错误,也许这个错误从未修复过,或者新的补丁破坏了之前正常工作的某些功能。

希望,如果我正确阅读了您的技术规格,我需要为您指出这个方向(MF190J):

3G调制解调器(ZTE MF190J)仍然需要手动调整。

答案4

您是否尝试过这个:

 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

这样也许能很好地发挥作用。

相关内容