Header Ads

Touchpad, Vboxdrv, Secure Boot y HWE

Hemos tratado de agrupar dos problemas recientes en Ubuntu 18.04, que si bien no están vinculados entre sí, ambos están relacionados con el kernel.
El primero es una falla del touchpad en las laptops Asus, Dell, entre otras, que hace que deje de funcionar. El segundo es que VirtualBox no inicia y solicita la firma del kernel en aquellos equipos que tienen "Secure Boot".
Para el primer caso, la solución que brindan en algunos foros de modificar el GRUB es incorrecta, ya que el problema (de ambos casos) radica en el kernel, específicamente la versión 4.15.0-72, que trajo incluido el problema del no reconocimiento del touchpad (y de paso solicita la firma en VirtualBox).
No podemos afirmar o negar que existan otras versiones del kernel de linux afectadas por este problema, por tanto, para el primer caso, la solución es cambiar el kernel.
Para esto podemos esperar la liberación de un nuevo kernel oficial de Ubuntu (recomendado) o hacer downgrade/upgrade del kernel con  ukuu.
apt-add-repository -y ppa:teejee2008/ppa
apt install ukuu
El segundo caso (la firma) se debe a que Ubuntu ahora verifica la firma del módulo por defecto, en los núcleos 4.4.0-18.34, 4.4.0-21.37, 4.2.0-42.49, 3.19.0-65.73 y 3.13.0-92.139 en adelante, entonces aquellos sistemas que tengan "secure boot" al actualizarse el kernel solicitará la firma, y por tanto Virtualbox dejará de funcionar.
Entonces vamos a matar dos pájaros de un tiro.
Activando Pilas de habilitación de LTS
Las pilas de habilitación Ubuntu LTS (también llamadas HWE o habilitación de hardware) proporcionan un núcleo más nuevo y soporte X para las versiones existentes de Ubuntu LTS. Estas pilas de habilitación se pueden instalar manualmente, pero también están disponibles cuando se instala con los medios de lanzamiento de punto Ubuntu LTS. Estas nuevas pilas de habilitación están destinadas a escritorios y servidores e incluso se recomiendan para imágenes en la nube o virtuales.
Instalación HWE
Ahora procedemos a instalar HWE con el PPA oficial:
add-apt-repository -y ppa:canonical-hwe-team/ppa
apt install --install-recommends linux-generic-hwe-18.04 xserver-xorg-hwe-18.04 
Y reiniciar. Luego de esto trabajaremos con el kernel 5.0.0-37-generic (o superior)
Importante
Implantar un kernel diferente al oficial (General Availability GA), tales como el que ofrece Hardware Enablement HWE o los relacionados en la aplicación ukku, puede que solucione el problema antes descrito, pero eventualmente puede crear otros (por ejemplo el HWE no es compatible con algunos módulos de Iptables y xserver-xorg-hwe genera fallas con el mouse y otros componentes). Entonces si ocurre algún problema, regrese a la anterior configuración. Con ukku es sencillo. Reiniciamos con el kernel anterior, abrimos la aplicación y eliminamos el kernel instalado. Pero con HWE es un poco más complicado.
Instalar linux-generic:
apt install linux-generic
Editar grub:
nano /etc/default/grub
Cambiar las siguientes líneas:
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
Por:
#GRUB_TIMEOUT_STYLE=hidden 
GRUB_TIMEOUT=5
Recargar grub y reiniciar:
update-grub
reboot
En el menú de arranque de grub, iniciar con un kernel oficial y cuando pida la contraseña abrir el terminal Ctrl + Alt + T y eliminar HWE:
ppa-purge -y ppa:canonical-hwe-team/ppa
apt purge xserver-xorg-hwe-18.04
apt purge linux-image-unsigned-5*
apt install xserver-xorg-core xserver-xorg
reboot
Después de reiniciar, verificar que el kernel HWE se haya eliminado correctamente:
dpkg --list | grep linux-image-hwe
dpkg --list | grep linux-headers-hwe
También puede hacer uso del siguiente comando para eliminar los kernels, pero tenga cuidado:
apt-get purge $(dpkg-query -W 'linux-*' | awk -v c="$(uname -r | cut -d- -f1,2)" 'match($1,"[0-9]+\\.[0-9]+\\.[0-9]+-[^-]+") && substr($1,RSTART,RLENGTH)!=c {print $1}')
Ahora tenemos dos alternativas. O desactivamos secure boot o firmamos el kernel (o ambas)
Desactivando Secure Boot
En la wiki de Ubuntu podemos consultar el procedimiento paso a paso
Puede hacerlo a nivel de Bios y en el software con los siguientes comandos:
apt install mokutil # instalando el módulo
mokutil --disable-validation # deshabilitar
mokutil --enable-validation # habilitar
mokutil --sb-state # verificar el estado
En cada paso se nos pedirá una contraseña y debemos reiniciar el equipo, seleccionar Change Secure Boot State y Yes/No en dependencia de lo que vayamos a hacer (habilitar/deshabilitar Secure Boot) para completar el proceso.
Firmando el Kernel
Para esto usaremos los siguientes comandos:
apt-get install mokutil
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/"
/usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
mokutil --import MOK.der
Y reiniciamos. Luego seleccionamos Enroll MOK / Continue y nos pedirá la contraseña que hemos introducido anteriormente y nos informará que la operación fue completada con éxito. El post  Firmando módulo VirtualBox en SecureBoot UEFI, solución a: Kernel driver not installed (rc=-1908) nos muestra paso a paso el procedimiento de firma del kernel.
Y por último, en el escritorio, solo nos resta ejecutar con privilegios:
/sbin/vboxconfig
Y con esto ya podemos usar virtualbox y el touchpad.

Update 2021
Como ukuu ahora es pago, hay otras alternativas para actualizar el kernel:
  1. bash script  ubuntu-mainline-kernel
  2. PPA  mainline ( github)
  3. Manualmente desde  Ubuntu kernel team
Con la tecnología de Blogger.