Day: April 13, 2008

Detectando automaticamente a porta do modem E226

Como eu possuo um conversor USB-Serial no meu note as vezes o kernel muda a sequencia de detecção dos dispositivos.

Algumas vezes o kernel detecta assim:
usb 1-4.1: FTDI USB Serial Device converter now attached to ttyUSB0
usb 2-2: GSM modem (1-port) converter now attached to ttyUSB1
usb 2-2: GSM modem (1-port) converter now attached to ttyUSB2
usb 2-2: GSM modem (1-port) converter now attached to ttyUSB3

E outras vezes o kernel detecta assim:
usb 2-2: GSM modem (1-port) converter now attached to ttyUSB0
usb 2-2: GSM modem (1-port) converter now attached to ttyUSB1
usb 2-2: GSM modem (1-port) converter now attached to ttyUSB2
usb 1-4.1: FTDI USB Serial Device converter now attached to ttyUSB3

Então resolvi automatizar a identificação de qual porta o modem foi detectado, assim eu não preciso editar o arquivo wvdial.conf manualmente cada vez que o Linux iniciar. Sei que o ideal seria informar ao kernel quem ele deveria identificar primeiro, mas por preguica resolvi fazer um script para pegar esta informação e acrescentar no wvdial.conf.

O script ficou bem simples:

PORT=$(dmesg | grep ttyUSB | grep GSM | head -1 | grep -o ttyUSB[0-9])

sed -i “s/ttyUSB[0-9]/$PORT/” /etc/wvdial.conf

Primeiro eu listo quais as ttyUSBs o kernel detectou (grep ttyUSB), depois filtro as que são do modem (grep GSM), desta lista pego apenas a primeira linha (head -1) é ela que contém a porta de dados certa e finalmente desta linha pego apenas o nome/número da porta do modem (grep -o ttyUSB[0-9]. Uma vez com o nome da porta certa eu substituo a porta antiga (como não sei qual era a porta que estava no wvdial.conf uso a regex ttyUSB[0-9]) pela nova porta que o kernel detectou: sed -i “s/ttyUSB[0-9]/$PORT/” /etc/wvdial.conf

Provavelmente usando awk ou outros comandos avançados de shell script o comando fica menor, como não sou perito em shell script, fiz da norma mais simples e direta.