La información que aquí publico está tomada básicamente de tres partes (ubuntu-cl.org, laudecioliveira.org y ubuntu-es.org). Ha sido probado con EntelPCS en Chile, y funciona sin problemas :)

Lo primero es ayudar a udev a identificar el módem como tal, para eso necesitamos el id del dispositivo y de vendedor. Esta información la obtenemos así:

sudo lsusb -v|grep -i vendor
 
  idVendor           0x0fce Sony Ericsson Mobile Communications AB
sudo lsusb -v|grep -i product
 
  idProduct          0xd0cf 
  iProduct                2 Sony Ericsson MD300

Ahora creamos el archivo /etc/udev/rules.d/50-md300modem.rules con nuestro editor favorito:

ACTION!="add", GOTO="3G_End"
BUS=="usb", SYSFS{idProduct}=="d0cf", SYSFS{idVendor}=="0fce", PROGRAM="/bin/sh -c 'echo 3 > /sys/%p/device/bConfigurationValue'"
LABEL="3G_END"

Ahora desconectamos el módem y descargamos los módulos del kernel, lo volvemos a cargar con los parámetros que necesitamos

sudo modprobe -r usbserial
sudo rmmod usb_storage
sudo modprobe usbserial vendor=0x0fce product=0xd0cf

Creamos el archivo /etc/modprobe.d/md300 con nuestro editor de texto favorito. Este archivo tendrá un alias para que el módulo se cargue correctamente luego de reiniciar el pc.

#Sony Ericsson MD300
alias md300 usbserial
options md300 vendor=0x0fce product=0xd0cf

Reiniciamos udev:

sudo /etc/init.d/udev restart

Ahora debemos configurar wvdial, editamos el archivo /etc/wvdial.conf

[Dialer Defaults]
Modem = /dev/ttyACM0
ISDN = off
Modem Type = USB Modem
Baud = 460800
Init = ATZ
Init2 = AT+CFUN=1
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init4 = 
Init5 = ATZ+cgdcont=1,"IP","imovil.entelpcs.cl"
Init6 = 
Init7 = 
Init8 = 
Init9 = 
Phone = *99#
Phone1 = 
Phone2 = 
Phone3 = 
Phone4 = 
Dial Prefix = 
Dial Attempts = 1
Dial Command = ATM1L3DT
Ask Password = off
Password = entelpcs
Username = entelpcs
Auto Reconnect = off
Abort on Busy = off
Carrier Check = off
Check Def Route = on
Abort on No Dialtone = on
Stupid Mode = on
Idle Seconds = 0
Auto DNS = on

La línea Init2 = AT+CFUN=1 es para activar la función radio del módem. Sin esta línea, pppd se cierra antes de conectar.

Enchufamos nuevamente el módem, y ejecutamos wvdial para conectarnos a internet:

sudo wvdial

Obtendremos como resultado algo como esto:

--> WvDial: Internet dialer version 1.60
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: AT+CFUN=1
AT+CFUN=1
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: ATZ+cgdcont=1,"IP","imovil.entelpcs.cl"
ATZ+cgdcont=1,"IP","imovil.entelpcs.cl"
OK
--> Modem initialized.
--> Sending: ATM1L3DT*99#
--> Waiting for carrier.
ATM1L3DT*99#
~[7f]}#@!}!}!} }9}#}%B#}%}(}"}'}"}"}&} } } } }%}&=;+zZC~
CONNECT
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Sun Feb  1 20:21:26 2009
--> Pid of pppd: 8630
--> Using interface ppp0
--> local  IP address 186.9.56.27
--> remote IP address 10.64.64.64
--> primary   DNS address 164.77.252.249
--> secondary DNS address 164.77.252.215

Actualización: Si tienen distribuciones basadas en RPM, pueden bajar este “driver” de betavine (desarrollado por EntelPCS), que básicamente es lo mismo que hice yo a mano, y con algunas pequeñas modificaciones básicamente en el archivo wvdial.conf. Desde ubuntu pueden pasarlo a .deb con alien.

Si prefieren, también pueden usar gnome-ppp para discar. Eso es todo… disfruten ;)