OK, eu resolvi o problema cavando em nmcli e mmcli docs com um uso de python.
Portanto, basicamente, as conexões de modem USB em nmcli não são, por padrão, vinculadas a um dispositivo específico, pois a porta (por exemplo, / dev / ttyUSB29) pode ser alterada a qualquer momento que a máquina for reiniciada ou novamente.
É possível criar essa ligação executando:
nmcli con modify 'conn name' connection.interface-name 'device port'
No meu caso, pode ser:
nmcli con modify orange_primary connection.interface-name ttyUSB23
Mas isso só funcionaria se o modem desejado estivesse disponível via / dev / ttyUSB23
No entanto, existe uma ferramenta chamada mmcli (Modem Manager Client, para não confundir com nmcli), que permite descobrir qual dispositivo está conectado a qual porta virtual em um dado momento. Para listar todos os modems conectados, basta ligar:
mmcli -L
Que retornará a lista de todos os modems conectados no momento com seus números.
Para obter todos os detalhes sobre o modem, seu status atual, incluindo a porta em que está disponível, pode ser chamado:
mmcli -m modem_number
Onde o número do modem é o número do modem retornado pelo comando anterior.
Usando grep, expressões regulares, mmcli e nmcli, é possível determinar com precisão a porta à qual o modem está conectado e ligá-lo à conexão do NetworkManager. Abaixo você pode encontrar um script python simples (eu chupo no bash, desculpe) que faz o trabalho.
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']
))
Para ajustar o script para sua situação atual apenas modifique os modems_to_conns para mapear nomes de modem como retornados por mmcli para seus nomes de conexão nmcli e execute este script toda vez que você quiser estabelecer uma das conexões.