我有一台 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
这次从 Ubuntu 14.04 32 位 DVD 启动计算机。计算机启动后立即开始捕获 MM 日志。
插入调制解调器。
lsusb
显示它被识别为 19d2:1232 设备,需要切换到 19d2:2003 设备。由于安装 usb-modeswitch 需要重新启动机器(因此 DVD 运行的安装会丢失),我准备了一个自定义切换文件并从命令行切换调制解调器(sudo usb_modeswitch -I -c 19d2:2003
)。切换完成后,我立即收到通知,我已开启网络
Mobile Broadband Network
,并且网络管理器菜单中出现了一个新的宽带连接。我以通常的方式设置上述连接(APN 名称不是问题),并且连接自动建立。
我断开了连接并弹出了调制解调器。
停止捕获 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
因此,该用户已经是指定组的成员。
现在,也许问题可以归结为以下两点之一,
- 用户需要加入哪个附加组?
- 我们如何以 root 身份运行移动宽带连接设置过程?(安全问题?)
更新 11 - 2015 年 12 月 9 日
wvdial
适用于 USB3,并且不是与 USB1 配合使用。
请查找系统日志这里。
还包括的输出dmesg | grep tty > /tmp/dmesg.tty.txt
。但是看到文件开头附近的那四行了吗?
更新 12 - 2015 年 12 月 10 日
注释掉第 4 行 (
SUBSYSTEM!="tty", GOTO="mm_zte_port_types_end"
)/lib/udev/rules.d/77-mm-zte-port-types.rules
。重启了我的计算机。软断开了电缆并插入了调制解调器。
已尝试连接。未成功。
系统日志文件是这里。
更新 13 - 2015 年 12 月 10 日
出于绝望,为了查看某些本地更改是否影响连接,使用 Ubuntu 15.04 和 15.10 DVD 测试了机器。
- 使用 Xubuntu 15.04 64 位 DVD 启动机器。连接非常顺利。
- 使用 Ubuntu 15.10 64 位 DVD 启动机器。连接像以前一样失败。
15.04 和 15.10 之间发生了什么?
真令人沮丧。
更新 14 - 2015 年 12 月 10 日
/lib/udev/rules.d/78-mm-zte-port-types-RALPH.rules
按照答案中的指示创建了一个新文件。重启了我的计算机(或者执行了
sudo udevadm control --reload
,实际上两者都试过了)。插入了调制解调器。调制解调器已被识别。
$ lsusb Bus 001 Device 005: ID 19d2:2003 ZTE WCDMA Technologies MSM
软断开电缆并尝试使用调制解调器连接。未成功。
弹出调制解调器。
机器死机一次,是随机事件吗?我的机器通常一年不会死机一次。
系统日志文件和创建的规则文件是这里。
更新 15 - 2015 年 12 月 11 日
将以下几行添加到
/lib/udev/rules.d/40-usb_modeswitch.rules
。# ZTE MF193E ATTR{idVendor}=="19d2", ATTR{idProduct}=="1232", RUN+="usb_modeswitch '%b/%k'"
保留文件
/lib/udev/rules.d/78-mm-zte-port-types-RALPH.rules
原样。重启了我的机器。插入了调制解调器。
调制解调器已被识别。
Bus 001 Device 005: ID 19d2:2003 ZTE WCDMA Technologies MSM
软断开电缆并尝试连接。未成功。
弹出调制解调器。
已移除
/lib/udev/rules.d/78-mm-zte-port-types-RALPH.rules
。重新启动并再次尝试整个过程。再次失败。
系统日志文件(完整,我没有冒险错过任何重要部分)和提到的规则文件(40)是这里。
更新 16 - 2015 年 12 月 11 日
只留下一条 1232 规则
/lib/udev/rules.d/40-usb_modeswitch.rules
,删除另一条。已执行
sudo udevadm control --reload
。插入调制解调器。
调制解调器已被识别。
Bus 001 Device 005: ID 19d2:2003 ZTE WCDMA Technologies MSM
软断开电缆并尝试连接。未成功。
弹出调制解调器。
但是我们上面不是已经测试过默认系统了吗?你的意思是保留/lib/udev/rules.d/78-mm-zte-port-types-RALPH.rules
它吗?
系统日志文件(完整,我没有冒险错过任何重要部分)和提到的规则文件(40)是这里
更新 17 - 2015 年 12 月 11 日
注释掉了 中的 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'"
已执行
sudo udevadm control --reload
。插入调制解调器。
调制解调器被识别为1232设备。我没有被邀请尝试连接(据我所知,除非切换到 2003,否则它不会注册到宽带网络)
Bus 001 Device 008: ID 19d2:1232 ZTE WCDMA Technologies MSM
弹出调制解调器。
系统日志文件和提到的规则文件(40)是这里
更新 18 - 2015 年 12 月 11 日
将所有规则文件保留为其原始形式。
lsusb
使用 shell 脚本每秒观察一次输出。将输出捕获到带有时间戳的文件中。插入调制解调器。(调制解调器首先出现在文件中
lssuboutouput.Fri Dec 11 16:56:29 BDT 2015.txt
)。从捕获中我们可以发现,很明显它从 1232 设备切换到 2003 设备。已尝试连接。未成功。
弹出调制解调器。
系统日志文件、带时间戳的lsusb
输出和提到的规则文件是这里。
现在,您可能希望将系统日志输出与时间戳进行匹配。
更新 19 - 2015 年 12 月 11 日
我以全新的方向进行了这项测试,希望能够隔离问题。
保存在便携式媒体中
/lib/udev/rules.d/40-usb-media-players.rules
(/lib/udev/rules.d/77-mm-zte-port-types.rules
来自 Ubuntu 15.10 机器)。使用 Xubuntu 15.04 64 位 DVD 启动机器。
已执行
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。已执行
diff 40-usb_modeswitch.rules /lib/udev/rules.d/40-usb_modeswitch.rules > diff15.10and15.04_40-usb.txt
。同样,第一个文件来自 15.10 保存的文件。再次检查差异文件,没有发现
idProduct
1232 或 2003。插入调制解调器。调制解调器被识别为调制解调器。
$ lsusb Bus 001 Device 008: ID 19d2:2003 ZTE WCDMA Technologies MSM
建立移动宽带连接后即可轻松连接。
弹出调制解调器。
安装了最新的 USB_ModeSwitch。
diff 40-usb_modeswitch.rules /lib/udev/rules.d/40-usb_modeswitch.rules
现在返回 NULL,正如预期的那样。
已执行
sudo udevadm control --reload-rules
。插入调制解调器。调制解调器被识别为调制解调器。
$ lsusb Bus 001 Device 008: ID 19d2:2003 ZTE WCDMA Technologies MSM
可以轻松连接。
我本可以尝试将 MM 和 NM 升级到 Ubuntu 15.10,看看它在哪里出现问题。我确实尝试过,但由于无休止的依赖问题而放弃了。
上面提到的所有 diff 文件都是这里。
更新 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 日
- 根据建议更改规则文件。
- 重新启动了我的计算机。
- 插入调制解调器并尝试连接。没有成功。
规则文件syslog
和这里。
更新 22 - 2015 年 12 月 16 日
根据一条评论中的建议,安装了来自 http://kernel.ubuntu.com/~kernel-ppa/mainline/并在每次启动后尝试使用调制解调器进行连接。
4.2.8-040208-通用,失败。
4.1.15-040115-通用,失败。
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
有组dip
(chgrp
根据需要使用)和模式740
(或-rw-r-----
)(chmod
根据需要使用)。我的没有。
编辑5
那么这棵树怎么样:将工作wvdial
系统日志与非工作系统日志进行比较,似乎出于某种原因wvdial
使用ttyUSB3
,而非工作系统ModemManager
继续使用ttyUSB1
。我不确定这是否重要,但显然但ttyUSB1
和ttyUSB3
两者都响应为支持 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
,一次使用规则……两次都从全新重启开始。即
/lib/udev/rules.d
有或没有*-RALPH.rules
文件的情况下设置- 拔出设备
- 重启
- 设置 ModemManager 进行调试并设置 udevadm 捕获
- 插入设备并等待一分钟
- 打包日志文件
- 从 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
显示其最近的后续日志行。ModemManager
3867.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
投诉,也许该投诉与 中发生的“标记”有关。根据该文件中的注释,该标记似乎是试图解决这个问题,但如果是这样,它似乎在这种情况下不起作用。ttyUSB1
80-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.rules
60-persistent-serial.rules
条件并非完全是 ZTE 属性,只是为了使规则更通用。更具体的一步是改为 require ENV{.MM_USBIFNUM}="?*"
,因为此处的分配是通过 发生的77-mm-zte-port-types.rules
。
总的来说,我不太确定udev
规则排序,我也完全不确定这是否真的能阻止ModemManager
行动过快。然而,如果不能,那么80-mm-candidate.rules
它就没有什么作用,也许一切都归结为ModemManager
15.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):
答案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
这样也许能很好地发挥作用。