好的,我已经通过使用python挖掘nmcli和mmcli文档解决了这个问题。
所以基本上,nmcli中的USB调制解调器连接默认不绑定到特定设备,因为端口(即/ dev / ttyUSB29)可以在机器重新启动或设备再次插入时随时更改。
可以通过运行来创建这样的绑定:
nmcli con modify 'conn name' connection.interface-name 'device port'
在我的情况下,它可能是:
nmcli con modify orange_primary connection.interface-name ttyUSB23
但只有通过/ dev / ttyUSB23确实可以获得所需的调制解调器时,它才会起作用
但是,有一个名为mmcli的工具(调制解调器管理器客户端,不要与nmcli混淆),它允许在任何给定时刻确定哪个设备连接到哪个虚拟端口。要列出所有连接的调制解调器,可以简单地调用:
mmcli -L
这将返回所有当前连接的调制解调器列表及其编号。
要获得有关调制解调器的所有详细信息,它的当前状态,包括可用的端口,可以调用:
mmcli -m modem_number
调制解调器编号是前一个命令返回的调制解调器编号。
通过使用grep,正则表达式,mmcli和nmcli,可以精确地确定调制解调器连接的端口并将其绑定到NetworkManager连接。下面你可以找到一个简单的python脚本(我很尴尬,很抱歉)。
import re
from os import popen as extern
modems_to_conns = {
'[QUALCOMM INCORPORATED] 0': 'orange_primary',
'[ZTE INCORPORATED] MF626' : 'play_backup'
}
output = extern('mmcli -L').read().split('\n')[2:-2]
output = [x.replace('\t/org/freedesktop/ModemManager1/Modem/','') for x in output]
modems = []
for line in output:
currentModem = {}
currentModem['no'] = line.split(' ')[0]
currentModem['name'] = line.replace(currentModem['no'] + ' ','')
port = extern('mmcli -m {0} | grep \'primary port\''.format(currentModem['no'])).read().replace('\n','')
port = re.findall('\'[^\']*\'',port)[0].replace('\'','')
currentModem['port'] = port
currentModem['connection'] = modems_to_conns[currentModem['name']]
modems.append(currentModem)
for modem in modems:
print "Assigning connection {0} to /dev/{1} ({2})".format(
modem['connection'],
modem['port'],
modem['name']
)
extern("nmcli con modify id '{0}' connection.interface-name {1}".format(
modem['connection'],
modem['port']
))
要调整当前情况的脚本,只需修改modems_to_conns,将mmcli返回的调制解调器名称映射到nmcli连接名称,并在每次要建立其中一个连接时运行此脚本。