domingo, 25 de diciembre de 2016

Evitar desconección Wifi Realtek en Raspbian por poca actividad

   Me ha pasado más de una vez en los RPi que tengo siempre funcionando y sin pantalla (modalidad headless), que al estar conectados solo por Wifi y no tener mucho movimiento diario, que al querer conectarme remotamente vía SSH no están disponibles. Eso hace que tenga que enchufarle mouse, teclado y pantalla. Ahí aparece que el aparatito está sano y feliz haciendo nada, pues en algún momento se desconectó del Wifi.
Dongles Wifi con chips Realteck: (izquierda) TP-Link TL-WN725N con chip Realtek 8188eu. (derecha) dongle genérico con chip Realtek 8192cu.

   Investigando, no es raro para los poseedores de dongles Wifi con chips Realtek que esto pase, al parecer por problemas con la administración de energía. En mi caso tengo varios basados el chip Realtek 8192cu y otro dongle con el r8188eu.
   La solución mas común pasa por apagar esa funcionalidad usando parámetros al modulo respectivo del kernel, como se menciona en blog Optimize my Pi Wifi.

Configuración para Realtek 8192cu

   Este chip es bastante común para el RPi, pues fue uno de los primeros soportados en el kernel de Raspbian en forma nativa en sus versiones 3.X.
   La forma de configurarlo es crear un archivo para el módulo del kernel para este dispositivo, con parámetros que apagan la conservación de energía, pero a la vez mantiene la conexión estable.
   Para ello se debe crear el siguiente archivo, con el comando para editarlo si no existe:
sudo nano /etc/modprobe.d/8192cu.conf

y luego agregar los parámetros:
options 8192cu rtw_power_mgnt=0 rtw_enusbss=0

luego de grabar los cambios y salir (CTRL+O y CTLR+X), se debe reiniciar el RPi.

Configuración para Realtek8188eu

   La forma de configurarlo es similar, pero el nombre del archivo a crear es diferente:
sudo nano /etc/modprobe.d/r8188eu.conf

y luego agregar los parámetros:
options r8188eu rtw_power_mgnt=0 rtw_enusbss=0

luego de grabar los cambios y salir (CTRL+O y CTLR+X), se debe reiniciar el RPi.

Verificación de parametros

   Con el comando modinfo se pueden listar los parametros del módulo del kernel para el dongle wifi, así si se listan solo los parámetros (con opción -F parm) se pueden conocer cuales existen:
$ sudo modinfo 8192cu -F parm
rtw_ips_mode:The default IPS mode (int)
ifname:The default name to allocate for first interface (charp)
if2name:The default name to allocate for second interface (charp)
rtw_initmac: (charp)
rtw_channel_plan: (int)
rtw_chip_version: (int)
rtw_rfintfs: (int)
rtw_lbkmode: (int)
rtw_network_mode: (int)
rtw_channel: (int)
rtw_mp_mode: (int)
rtw_wmm_enable: (int)
rtw_vrtl_carrier_sense: (int)
rtw_vcs_type: (int)
rtw_busy_thresh: (int)
rtw_ht_enable: (int)
rtw_cbw40_enable: (int)
rtw_ampdu_enable: (int)
rtw_rx_stbc: (int)
rtw_ampdu_amsdu: (int)
rtw_lowrate_two_xmit: (int)
rtw_rf_config: (int)
rtw_power_mgnt: (int)
rtw_low_power: (int)
rtw_wifi_spec: (int)
rtw_special_rf_path: (int)
rtw_antdiv_cfg: (int)
rtw_enusbss: (int)
rtw_hwpdn_mode: (int)
rtw_hwpwrp_detect: (int)
rtw_hw_wps_pbc: (int)
rtw_max_roaming_times:The max roaming times to try (uint)
rtw_force_iol:Force to enable IOL (bool)
rtw_mc2u_disable: (int)
rtw_mac_phy_mode: (int)
rtw_80211d: (int)
rtw_notch_filter:0:Disable, 1:Enable, 2:Enable only for P2P (uint)

Se puede ver el valor utilizado de los parámetros para estos módulos leyendo desde /sys/module/ :

$ cat /sys/module/8192cu/parameters/rtw_enusbss
0


Activar Screen saver en RPi bajo Raspbian

Reinstalando un RPi con la pantalla oficial me dí cuenta que no estaba instalado el protector de pantalla XSCREENSAVER, por lo que aproveché de documentar su instalación y como desactivar el apagado automático de pantalla también.


1) Instalando el protector de pantalla

En Raspbian hay que usar el siguiente comando para instalar lo básico del protector de pantalla:

sudo apt-get install xscreensaver xscreensaver-data

Sin embargo se pueden instalar otros protectores adicionales, incluyendo otros con OpenGL, aunque no es muy recomendable para RPi con un solo núcleo (como el Zero, A+, B+) pues consumen muchos recursos. La opción más completa es:

apt-get install xscreensaver xscreensaver-data xscreensaver-data-extra \
   xscreensaver-gl xscreensaver-gl-extra

Luego de ejecutar cualquiera de las versiones del comando, hay que reiniciar:

sudo reboot

2) Deshabilitando el apagado automático

Si no se hiciera nada mas, ocurría que eventualmente la pantalla se iría a negro, pues por defecto está activada una configuración que la apaga a los 10 minutos al usar la interfaz gráfica.
Para evitar esto hay que editar un archivo de configuración, pero su ubicación en los RPi que usan Raspbian de versiones con PIXEL es /etc/xdg/lxsession/LXDE-pi/, mientras que en las anteriores es /etc/xdg/lxsession/LXDE/. Así el comando en una versión moderna es:

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart


En este archivo hay que agregar las siguientes líneas, al final:

@xset s noblank
@xset s off
@xset -dpms

Además si se está ocupando la interfaz de línea de comandos, también puede estar activada la opción de apagado de pantalla, lo que se evita editando el archivo siguiente archivo:

sudo nano /etc/kbd/config


Hay que buscar y editar las líneas con los siguientes valores (en mi caso ya estaban seteados por lo que no tuve que editarlo finalmente).

BLANK_TIME=0
POWERDOWN_TIME=0

Fuente: Howto: Disable Screen Saver In Raspbian