Hace unos días me trajeron una portátil con Ubuntu 16.04 y un módem Huawei E3131 el cual el sistema a priori no reconocía, siendo la versión de Ubuntu bastante actual me llamó la atención encontrar tal problema, me recordó a mis viejas andanzas con un módem ZTE y un plan de 10GB de datos que tanta movilidad me dio en su momento, donde había que ejecutar scripts y nunca se terminaba de entender cómo funcionaba todo.

Lo primero que debo decir es que la historia no terminó del todo bien, el módem funcionó pero no de forma automática como debería, igual comparto la solución pues a alguien le puede ser de ayuda en algún momento crítico. El módem en cuestión es el de la imagen, pero este procedimiento funcionará para otros cambiando simplemente los Id de fabricante y dispositivo.

Luego de verificado que al conectar el módem se encendía y quedaba con un indicador LED azul (no el verde que debiera tener cuando conectado a la red 3G) sospeché que se encontraba en modo almacenamiento masivo: en sistemas Windows lo muestra como un pendrive y adentro contiene el instalador de los controladores, en GNU/Linux normalmente debemos prescindir de esto.

Para verificarlo bastó con ejecutar el comando lsusb y ver que en la descripción del dispositivo se especificaba:

➜ ~ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 046d:c534 Logitech, Inc. Unifying Receiver
Bus 001 Device 012: ID 12d1:14fe Huawei Technologies Co., Ltd. Modem (Mass Storage Mode)
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Esto ocurre cuando el software usb_modeswitch no realiza correctamente su trabajo de pasar el dispositivo a modo tarjeta de red. Este paquete viene preinstalado en casi todas las distribuciones actuales, pero por si acaso lo primero es verificar que el paquete esté instalado (o directamente lanzar su instalación con sudo apt install usb_modeswitch o sudo apt install usb-modeswitch dependiendo de la versión de la distro):

➜  ~ sudo apt install usb_modeswitch  
Leyendo lista de paquetes... Hecho 
Creando árbol de dependencias        
Leyendo la información de estado... Hecho 
usb_modeswitch ya está en su versión más reciente (2.2.5+repack0-1ubuntu1). 
fijado usb_modeswitch como instalado manualmente. 
El paquete indicado a continuación se instaló de forma automática y ya no es necesario. 
  python-pyudev 
Utilice «sudo apt autoremove» para eliminarlo. 
0 actualizados, 0 nuevos se instalarán, 0 para eliminar y 32 no actualizados.

Estando instalado usb_modeswitch me propuse a revisar el archivo con las reglas que establecen sobre qué dispositivos se aplica este comando, es el archivo /lib/udev/rules.d/40-usb_modeswitch.rules y debe contener una línea como esta:

ATTR{idVendor}=="12d1", ATTR{idProduct}=="14fe", RUN+="usb_modeswitch '%b/%k'"

Donde el ID del fabricante (idVendor) es 12d1 y el ID de producto (idProduct) es 14fe, dato que obtuvimos con la salida de lsusb: Bus 001 Device 012: ID 12d1:14fe Huawei Technologies Co., Ltd. Modem (Mass Storage Mode). Si esta línea no está debemos agregarla.

Y funcionó…

No lo descrito anteriormente, pese a varias pruebas el módem nunca cambió al modo correcto de forma automática. Pero sí lo hacía luego de ejecutar dos veces el comando usb_modeswitch:

sudo usb_modeswitch -J -v 0x12d1 -p 0x14fe

Luego de la primera ejecución no ocurría nada, pero a los segundos de ejecutado el comando por segunda vez el indicador LED cambiaba a verde y el módem se conectaba automáticamente. Y lsusb confirmaba que estaba en el modo correcto con un ID diferente:

➜ ~ lsusb 
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 046d:c534 Logitech, Inc. Unifying Receiver
Bus 001 Device 009: ID 12d1:1506 Huawei Technologies Co., Ltd. Modem/Networkcard
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Debido a la falta de tiempo para seguir investigando creamos un alias del comando que ejecutaba dos veces usb_modeswitch con los parámetros mencionados arriba y lo dejamos así. Quizá en otra oportunidad continúo indagando el porqué de este comportamiento con el módem Huawei y Ubuntu 16.04, por lo pronto espero esta publicación le sirva a alguien.