Jugando online en linux me he encontrado continuamente con comentarios de otros jugadores diciendo que tengo lag, al principio lo achaqué a mi conexión de red pero tras conectarme al router con el cable de red y en otras redes wifi pude ver que el lag sólo lo tenía cuando conectaba por wifi. El problema era de NetworkManager.

NetworkManager realiza un escaneo periódico de redes inalámbricas cada 2 minutos (aproximadamente), lo que deriva en pérdidas o retraso en el envío de paquetes y consecuentemente en un lag durante el juego.

Una forma rápida de comprobar si tienes lag por culpa de este comportamiento de NetworkManager es hacer un ping a tu router durante un par de minutos y ver si el router tarda demasiado en contestar.

Esto se puede hacer ejecutando ping -i 0.2 DIR_IP |grep -E "[0-9]{3} ms" sustituyendo DIR_IP por la ip de tu router. Si no sabes cual es la ip de tu router ejecuta route -n y observa la ip que esta en la columna de gateway.

[user@host ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan0

El comando ping -i 0.2 192.168.1.1 |grep -E "[0-9]{3} ms" mostrará por el terminal los paquetes que tardan 100 o más milisegundos. Si ejecutas el comando y tras 3 minutos no se muestra nada (o uno o dos paquetes nada más) es que no tienes lag, si por el contrario te aparecen varios paquetes en un intervalo corto de tiempo es que probablemente tengas que arreglar ese lag.

Ejemplo de ejecución del comando en una conexión con lag:

[user@host ~]$ ping -i 0.2 192.168.1.1 |grep -E "[0-9]{3} ms"
64 bytes from 192.168.1.1: icmp_seq=78 ttl=64 time=182 ms
64 bytes from 192.168.1.1: icmp_seq=80 ttl=64 time=167 ms
64 bytes from 192.168.1.1: icmp_seq=82 ttl=64 time=153 ms
64 bytes from 192.168.1.1: icmp_seq=84 ttl=64 time=138 ms
64 bytes from 192.168.1.1: icmp_seq=86 ttl=64 time=231 ms
64 bytes from 192.168.1.1: icmp_seq=88 ttl=64 time=108 ms
64 bytes from 192.168.1.1: icmp_seq=92 ttl=64 time=128 ms
64 bytes from 192.168.1.1: icmp_seq=94 ttl=64 time=113 ms
64 bytes from 192.168.1.1: icmp_seq=96 ttl=64 time=159 ms

Solución al lag

Por suerte la característica que tiene NetworkManager de rastrear redes wifi aún cuando estamos conectados a un punto de acceso se puede quitar si fijamos un BSSID.

Primero nos conectamos a nuestra red wifi como hacemos normalmente y una vez conectados miramos el BSSID ejecutando iwconfig en el terminal.

[user@host ~]$ iwconfig
eth0 no wireless extensions.lo no wireless extensions.wlan0 IEEE 802.11bg ESSID:"MiChahiRed"
Mode:Managed Frequency:2.412 GHz Access Point: 00:11:22:33:44:55
Bit Rate=54 Mb/s Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:off
Link Quality=55/70 Signal level=-65 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:30 Invalid misc:666 Missed beacon:0

El BSSID viene indicado en Access Point (marcado en rojo en el ejemplo anterior). Ahora abrimos las preferencias de red, pinchamos sobre nuestra red inalámbrica y por último en el botón de Configuración.

preferencias-red

En la ventana de edición de la red vamos a la pestaña que pone inalámbrica y en el campo que pone BSSID introducimos el BSSID que obtuvimos ejecutando iwconfig. Finalmente revisa que todas las opciones de las demás pestañas están de acuerdo a tu criterio y pulsa en el botón de Guardar.

editar-red

Con esto NetworkManager dejará de hacer esos escaneos en busca de redes wifi cuándo estés conectado a tu red. Puedes comprobar que realmente funciona ejecutando de nuevo en el terminal ping -i 0.2 192.168.1.1 |grep -E "[0-9]{3} ms".