Reactivar módulo wireless en Acer Aspire para Ubuntu y derivados

Si usas las últimas versiones de Ubuntu 13.10 o siguientes, en concreto aquellas distribuciones que usen algún núcleo entre la versión 3.8 y 3.11 habrás notado que si dispones de un portátil Acer Aspire te hayas quedado sin soporte wireless e incluso algunas otras funciones inhabilitadas como ventilador de la CPU u otros. En concreto la lista de elementos hardware que pueden dejar de funcionar son:

  • La tarjeta de red (interfaz wireless)
  • El adaptador de bluetooth integrado
  • Tarjeta de red 3G (sólo los modelos que disponga de una integrada)
  • Indicadores LED frontales (CPU, email, multimedia, etc)
  • Botones de iluminación LCD

wireless Ubuntu

En el caso de la conectividad wireless lo primero que se suele pensar es que el interruptor esta mal pulsado o no llega a activar la wifi (normalmente suele estar en el canto de la parte inferior izquierda). En mi caso y creo que en otros no será ese el problema. Por si acaso, puedes comprobarlo con el siguiente comando:

$ rfkill list all

Si no esta bloqueado por hardware o software, debería aparecer un resultado como:

1: phy1: Wireless LAN
 Soft blocked: no
 Hard blocked: no

Tras investigar un poco en los registros del sistema, parece que no existe una buena compatibilidad para mi modelo de Acer Aspire a través del módulo del kernel que se utiliza para controlar el hardware. Se trata del módulo acer_wmi que es un reemplazo incompleto y no muy estable del módulo acer_acpi que se utilizaba en versiones más antiguas del kernel. pero a partir de la versión 2.6.25 fueron fusionados. Este módulo suele autocargarse en el kernel basándose en la concordancia por detección DMI (Destktop Management Information)

Solución temporal al problema

Para resolver el problema, lo primero es conocer tu modelo exacto de portátil. Si no te apetece mirar etiquetas, cajas, facturas o albaranes de compra, puedes sacar el modelo exacto con el siguiente comando:

sudo dmidecode -t 2 | grep Product

En mi caso se trata del siguiente modelo:

Product Name: Aspire 5943G

Tras comprobar la compatibilidad, si prefieres no usar dicho módulo, basta con ejecutar:

sudo modprobe -r acer-wmi; echo 'blacklist acer-wmi' | sudo tee -a /etc/modprobe.d/blacklist.conf

Reinicia y posteriormente no debería aparecer ningún módulo en la salida del comando:

lsmod | grep acer

Solucionar error symbol lookup error: suhosin.so: undefined symbol: php_mb_encoding_translation en PHP 5.4 con cPanel

Suhosin logo
Suhosin logo de Hardened PHP Project

Si has actualizado a PHP 5.4 en cPanel es posible que durante la subida de archivos u otras partes de tu código PHP te encuentres el siguiente error en el error_log de Apache.

/usr/bin/php: symbol lookup error: /usr/local/lib/php/extensions/no-debug-non-zts-20100525/suhosin.so:
 undefined symbol: php_mb_encoding_translation

Este error sólo se produce si además tienes activo Suhosin. Oficialmente PHP 5.4 no tiene soporte para Suhosin, pero esta extensión es muy necesaria para el uso de servidores compartidos, debido a que ofrece bastantes características de seguridad adicionales a la instalación base de PHP.

El problema se debe a que varias funciones relacionadas con mb string no estan presentes en el código fuente de PHP (probablemente porque cPanel usa una versión propia y ligeramente modificada del código original de PHP), donde puede haber sido eliminada la función php_mb_encoding_translation

Podemos observar, que en el código fuente de la versión PHP 5.4.19 se encuentra definida la función php_mb_encoding_translation() en concreto en /ext/mbstring/mbstring.c:102. Teóricamente esta función existe en el código nativo de PHP y suhosin debería poder utilizarla, pero al ser la versión PHP personalizada de cPanel no esta presente y suhosin falla al ejecutar el código php y eso producirá un error 500 en Apache abortando la ejecución del script.

Afortunadamente, existe un parche en Github en forma de Pull Request cuyo autor es Jan Ingvoldstad, que no ha sido aún aceptada después de más de 8 meses (al momento de escribir este artículo).

Puedes aplicar directamente el parche en el código fuente de github y compilarlo. En mi caso, he creado un repositorio aparte haciendo cherry picking del parche y de otros parches adicionales que corrigen otros errores en PHP 5.4 con suhosin y aún no han sido fusionados en el proyecto original.

La forma rápida de solucionarlo sería:

1 – Clonar mi repositorio de Suhosin con los parches aplicados (cherry picking)

git clone -b master --single-branch http://github.com/shakaran/suhosin.git suhosin-shakaran

2 – Compilar e instalar suhosin desde mi rama. En una sola línea sería:

cd suhosin-shakaran; phpize; ./configure; make; make install

Pero si quieres hacer tu propio cherry picking te explico como podrías hacer lo mismo que yo:

1 – Dirígete a github, en el repositorio oficial de suhosin y haz un fork del proyecto original

2 – Añade como repositorio remoto la rama de Jan Ingvoldstad

git remote add jani-upstream git://github.com/jani/suhosin.git

3 – Baja los commits de dicha rama (solo las referencias)

git fetch jani-upstream

4 – Haz un cherry pick del commit (parche) que arregla el fallo:

git cherry-pick e8beb4f50fa997c0ea4b923677deb275cc7660e

5 – Compila con:

cd suhosin-shakaran; phpize; ./configure; make; make install

Y listo, tendrás tu propio branch con tu parche aplicado.