좋아, 나는 파이썬을 사용하여 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와 혼동하지 말고 Modem Manager Client)라는 도구가있어 어떤 순간에 어떤 장치가 어떤 가상 포트에 연결되어 있는지 파악할 수 있습니다. 연결된 모든 모뎀을 나열하려면 다음을 호출하면됩니다.
mmcli -L
현재 연결된 모든 모뎀의 목록이 번호와 함께 반환됩니다.
모뎀에 대한 모든 세부 정보를 얻으려면 사용 가능한 포트를 포함하여 현재 상태입니다.
mmcli -m modem_number
여기서 모뎀 번호는 이전 명령에서 반환 한 모뎀 번호입니다.
grep, 정규 표현식, mmcli 및 nmcli를 사용하면 모뎀이 연결된 포트를 정확하게 결정하고 NetworkManager 연결에 바인딩 할 수 있습니다. 아래에서 작업을 수행하는 간단한 파이썬 스크립트 (bash를 유감스럽게 생각합니다)를 찾을 수 있습니다.
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 연결 이름에 맵핑하고 연결 중 하나를 설정할 때마다이 스크립트를 실행하십시오.