Chromium 88 trajo consigo una novedad importante para los usuarios de Linux: soporte de aceleración por hardware mediante VA-API. Esta característica llegó después de que lo hiciera en Firefox de la mano de Red Hat, y viendo cómo están las cosas, parece que el navegador de Mozilla sigue teniendo cierta ventaja en este aspecto.
Firefox incluyó soporte de VA-API hace algún tiempo. El hecho de que primero funcionara sobre Wayland y luego sobre X11 le ha dado cierta ventaja sobre su rival tecnológico, cuyo soporte de VA-API está en estos momentos fuertemente atado a Xorg y requiere de un truco para hacerlo funcionar en XWayland. Eso sí, si se quiere exprimir Firefox desde Wayland de forma fácil lo suyo sería tirar de Fedora, posiblemente la distribución que más esfuerzos está haciendo por establecer el nuevo protocolo por defecto frente al veteranísimo Xorg. Otro inconveniente que presenta Chromium es el hecho de que su soporte de VA-API está aparentemente atado a las gráficas de Intel y NVIDIA, cosa que no tendría que sorprender, ya que la relación de Chromium con las gráficas Radeon nunca ha sido especialmente buena (al menos en Linux).
En resumidas cuentas, y a pesar de los inconvenientes, Chromium 88 tiene auténtico soporte de aceleración por hardware mediante VA-API. Esto, como es obvio, rebota en la plétora de derivados que existen de dicho navegador, entre los que están Google Chrome, Edge, Vivaldi, Brave y Opera, por lo que los pasos a seguir son los mismos en todos ellos salvo por el nombre de la aplicación. Si se usa la rama estable de Chrome, la aplicación desde la línea de comandos se llama ‘google-chrome-stable’, en Brave ‘brave-browser’, en Vivaldi ‘vivaldi’, en Opera ‘opera’ y en Microsoft Edge ‘microsoft-edge’.
Cómo habilitar el soporte de aceleración por hardware en Chromium/Chrome (o al menos intentarlo)
Habilitar la aceleración por hardware en los navegadores web disponibles para Linux no es un proceso complicado, pero igual la cantidad de pasos es en estos momentos excesiva para muchos. Los que tengan dudas, tanto en Chromium como en Firefox, pueden consultar la wiki de Arch Linux para obtener más información.
Para obtener el soporte de la GPU hay que instalar los paquetes correspondientes a la gráfica que se esté utilizando. Esto quiere decir que los pasos varían según la marca de la gráfica (o las gráficas en caso de tener una configuración con varias GPU). Si bien en un tutorial publicado en formato texto es más fácil copiar y pegar los comandos, los paquetes que mencionaremos a continuación pueden ser localizados con Synaptic, Muon (estos dos en Ubuntu y derivadas directas) y DNFDragora (Fedora).
Antes de seguir con los pasos, dejaremos claro que para Intel estamos contando solo a partir de la octava generación de Intel Core, a partir de la cual se usa un driver de OpenGL basado en Gallium3D.
Configurando el soporte de GPU en Ubuntu
Soporte de VA-API para Intel:
sudo apt install intel-media-va-driver
Versión alternativa para Intel en caso de no obtener los resultados con la versión Open Source:
sudo apt install intel-media-va-driver-non-free
Soporte de VA-API para NVIDIA con Nouveau y AMD Radeon (para aquellos que quieran probarlo):
sudo apt install mesa-va-drivers
Para el driver privativo y oficial de NVIDIA hay que descargar el paquete ‘vdpau-va-driver’ desde aquí e instalarlo.
Configurando el soporte de GPU en Fedora
Soporte de VA-API para Intel:
sudo dnf install libva-intel-driver intel-mediasdk intel-media-driver
En caso de usar NVIDIA con el driver Nouveau o AMD Radeon con AMDGPU, el soporte de VA-API está incluido en el paquete ‘mesa-dri-drivers’, que se encuentra preinstalado en la edición Workstation. Como ya hemos dicho en el apartado de Ubuntu, esta vía tiene muchas posibilidades de acabar en fracaso.
Al contrario que en Ubuntu, si se usa el driver privativo y oficial de NVIDIA en Fedora, el driver de VDPAU para VA-API se encuentra en los repositorios de la distribución, lo que supone una ventaja en este frente:
sudo dnf install libva-vdpau-driver
Ejecutando Chromium/Chrome con soporte de aceleración por hardware mediante VA-API
Con el soporte para las GPU instalado, podemos proceder a la ejecución del navegador. Pero antes de empezar con la parte complicada, vamos a activar lo propio desde la sección ‘flags’ del navegador.
Para ello hay que introducir ‘chrome://flags’ en la barra de direcciones, buscar las opciones ‘Override software rendering list’ y ‘Hardware-accelerated video decode’ y ponerlas en ‘Enabled’. En caso de no usar Google Chrome ni Chromium la dirección podría ser una de las siguientes: ‘edge://flags’, ‘brave://flags’, ‘vivaldi://flags’ o ‘opera://flags’. La aplicación luego solicitará su reinicio para aplicar los cambios.
Tras activar las opciones de la sección ‘flags’ hay que cerrar la aplicación y volverla a iniciar desde la consola de comandos con una de las siguientes opciones dependiendo del servidor gráfico utilizado.
Si se está en una sesión de Xorg:
google-chrome-stable --use-gl=desktop
Si se está en una sesión de Wayland (para ejecutar de forma acelerada sobre XWayland):
google-chrome-stable --use-gl=egl
Para establecer el cambio de forma permanente, lo recomendable es copiar y pegar el fichero ‘.desktop’ del navegador web utilizado de ‘/usr/share/applications’ a ‘~/.local/share/applications’ (/home/tuusuario/.local/share/applications). Dependiendo del nombre de la aplicación, el fichero ‘.desktop’ a copiar sería el siguiente:
- Google Chrome → ‘google-chrome-desktop’
- Brave → ‘brave-browser.desktop’
- Vivaldi → ‘vivaldi-stable.desktop’
- Microsoft Edge → ‘microsoft-edge-dev.desktop’ (cuando sea estable podría ser ‘microsoft-edge.desktop’)
- Opera → ‘opera.desktop’
El usuario tiene que dirigirse a la parte donde pone “Exec=/usr/bin/google-chrome-stable %U” (la línea puede cambiar según el navegador, en nuestro caso hemos tomado Google Chrome Stable) y colocar una de las opciones que hemos mencionado para activar el soporte de aceleración por hardware a través de la consola.
En Xorg quedaría así:
Mientras que para XWayland habría que establecer esto otro:
Conclusión
Para comprobar si la decodificación por hardware está funcionando, aparte de la sección ‘chrome://gpu’, se puede introducir ‘chrome://media-internals/’ (sección que pronto será sustituida por la sección ‘Media’ en el depurador) en la barra de direcciones mientras se reproduce un vídeo en otra pestaña:
chrome://media-internals/
Si el campo ‘kVideoDecoderName’ muestra el valor ‘MojoVideoDecoder’, significa que el vídeo se está reproduciendo con aceleración por hardware, mientras que si en el mismo campo aparece el valor ‘VpxVideoDecoder’, ‘FFmpegVideoDecoder’ o ‘Dav1dVideoDecoder’ significa que se está reproduciendo con software. En nuestro caso, al usar un gráfica Radeon y Fedora como distribución, la reproducción por aceleración por hardware no está funcionando realmente, a pesar de que la sección ‘chrome://gpu’ nos diga lo contrario.