Pregunta:
Encontré un problema muy desconcertante con mi tarjeta WiFi en Ubuntu. Después de reiniciar, siempre está deshabilitado y no hay forma de recuperarlo más que suspender o apagar la computadora portátil. El estado según Network Manager es "dispositivo no listo". Esto ocurre de manera constante.
Algunos antecedentes sobre mi sistema:
- La computadora portátil es HP 350 G1.
- La tarjeta WLAN es la infame Ralink RT3290. (Si hubiera sabido cuántos problemas tendría con él, nunca lo habría comprado).
- Ubuntu es el último LTS 16.04, actualizado recientemente.
- El kernel es
4.4.9-040409-generic
(era4.4.0-22-generic
antes de actualizar desde la línea principal, no hay diferencia con WiFi).
Antes de actualizar la distribución, estaba usando una versión del controlador rt3290sta/2.6.0.0
(compilado desde la fuente y cargado a través de DKMS) que funcionó en su mayoría bien, pero no funciona con los kernels más nuevos y parece abandonado de todos modos. Así que ahora tuve que volver a rt2800
y tengo este problema desde entonces.
Este parece ser un problema muy antiguo pero recurrente. Leí todos los hilos que pude encontrar, pero hasta ahora no tuve suerte. Afortunadamente, no es crítico para mí porque rara vez reinicio, pero sigue siendo molesto y molesto al menos.
A continuación se muestran los resultados de algunos comandos que podrían ser de interés (este es el estado después del reinicio):
lshw -c network
dice que la interfaz está deshabilitada:
# lshw -c network
*-network
description: Ethernet interface
product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
vendor: Realtek Semiconductor Co., Ltd.
physical id: 0
bus info: pci@0000:01:00.0
logical name: eth0
version: 10
serial: c4:34:6b:05:5f:ff
size: 10Mbit/s
capacity: 1Gbit/s
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress msix vpd bus_master cap_list ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=r8169 driverversion=2.3LK-NAPI duplex=half firmware=rtl8168g-3_0.0.1 04/23/13 latency=0 link=no multicast=yes port=MII speed=10Mbit/s
resources: irq:43 ioport:4000(size=256) memory:b2504000-b2504fff memory:b2500000-b2503fff
*-network DISABLED
description: Wireless interface
product: RT3290 Wireless 802.11n 1T/1R PCIe
vendor: Ralink corp.
physical id: 0
bus info: pci@0000:02:00.0
logical name: wlan0
version: 00
serial: 00:71:cc:6b:fe:f1
width: 32 bits
clock: 33MHz
capabilities: pm msi pciexpress bus_master cap_list ethernet physical wireless
configuration: broadcast=yes driver=rt2800pci driverversion=4.4.9-040409-generic firmware=0.37 latency=0 link=no multicast=yes wireless=IEEE 802.11bgn
resources: irq:17 memory:b2410000-b241ffff
*-network DISABLED
description: Ethernet interface
physical id: 1
logical name: virbr0-nic
serial: 52:54:00:e5:13:31
size: 10Mbit/s
capabilities: ethernet physical
configuration: autonegotiation=off broadcast=yes driver=tun driverversion=1.6 duplex=full link=no multicast=yes port=twisted pair speed=10Mbit/s
Sin embargo, rfkill list
no está de acuerdo:
# rfkill list 0: phy0: Wireless LAN Soft blocked: no Hard blocked: no
Respuesta:
El controlador rt2800pci necesita descargar el firmware del dispositivo que persiste durante el reinicio. En Ubuntu 16.04, antes de reiniciar, debe ejecutar el siguiente comando:
sudo rmmod rt2800pci
luego reinicie.
Para automatizar la tarea de reinicio, cree un script de shell en /etc/init.d/rt3290removedriver
con el siguiente contenido:
#!/bin/sh
### BEGIN INIT INFO
# Provides: skeleton
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d. This example start a
# single forking daemon capable of writing a pid
# file. To get other behavoirs, implemend
# do_start(), do_stop() or other functions to
# override the defaults in /lib/init/init-d-script.
### END INIT INFO
# /etc/init.d/rt3290removedriver
case "$1" in
start)
echo "Removal of driver rt2800pci success" > /home/youruser/rt2800pci.txt
echo "Power Down"
;;
stop)
rmmod rt2800pci
echo "Removal of driver rt2800pci success" > /home/youruser/rt2800pci.txt
echo "Power Down"
exit 1
;;
*)
rmmod rt2800pci
echo "Removal of driver rt2800pci success" > /home/youruser/rt2800pci.txt
echo "Power Down"
exit 1
;;
esac
exit 0
Luego actualice los scripts con el comando
sudo update-rc.d rt3290removedriver defaults
Y ya está. Reemplace youruser en el script con su nombre de usuario. Probado en un HP Pavilion con Ubuntu 16.04 y tarjeta pci wifi rt3290.