XFCE4 dentro de Windows

A pesar de que me gusta bastante Linux hace años me acostumbré a utilizar Windows 10. Desde Windows 8.1 no he tenido incidentes serios de seguridad o inestabilidad y el hecho de que hay cosas que corran en Windows y no en Linux pesa un poco, otro tanto que la licencia de Windows 10 se pague. Por ejemplo, en el equipo en que me encuentro tengo juegos y en el otro un Visual Studio, un tiempo tuve MS Office (y sabrán bien que la gente es bien delicada con los asuntos de ofimática). Solo lamento lo cara que es la suite y que aparentemente a muchos no les guste LibreOffice y cosas asi.

Cuando me dediqué a programar también empecé a emplear Windows Subsystem for Linux, el sistema dentro de Windows 10 que permite levantar máquinas virtuales utilizando un kernel de Linux instalado en Windows mismo. Pero yo aquí voy a dar por sentado que tienen Ubuntu 20.04 en WSL instalado (se baja de la Microsoft Store en el menu inicio).

Pues bien, a nivel hogareño no se usa tanto pero el escritorio remoto de Windows nos va a permitir utilizar Ubuntu 20.04 como si estuviéramos en un PC tradicional con entorno gráfico y sonido. De todas maneras está explicado aquí en inglés.

Instalando el entorno gráfico

Lo primero que hay que hacer es instalar XRDP y el entorno de X11 (el servidor gráfico). Generalmente se instala X11 como dependencia de XRDP. XRDP es el servidor de RDP (Remote Desktop Protocol o Protocolo de Escritorio Remoto). El protocolo RDP es el que nos va a permitir acceder al servidor.

sudo apt update

sudo apt install xrdp

sudo apt install xfce4 xfce4-goodies 

XRDP tiene bastantes dependencias. En vez de XFCE4 podrías instalar por ejemplo, Mate pero XFCE es más liviano. El paquete de Mate se llama ubuntu-mate-core. En todo caso es la configuración de XRDP la que vamos a tocar para levantar el entorno gráfico y/o de ventanas. Lo único extraordinario que ocurre durante la instalación

Ahora tenemos que configurar el entorno para que nos levante el entorno gráfico al conectarnos:

sudo nano /etc/xrdp/startwm.sh 

Este es el ejecutable que abre el administrador de ventanas que prefieran. Para esto vamos al fondo del archivo y comentamos las últimas dos líneas que deberían decir lo siguiente:

test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession

Comenta estas líneas con # y debajo (si instalaste xfce4) deberías poner:

startxfce4

En ~/.xsession deberías agregar:

xfce4-session

Con Mate debería funcionar muy parecido. Por qué necesitas dos líneas en dos archivos tan distintos? Pues porque una te levanta el entorno gráfico con GDM y el otro (el .xsession) un administrador de ventanas.

El archivo /etc/xrdp/xrdp.ini también es importante. Allí puedes modificar el número de puerto (el puerto por defecto es el 3389) y la resolución con la que XRDP va a servir el entorno gráfico a través de la red interna.

Una vez que hayamos terminado podemos ejecutar XRDP así:

sudo /etc/init.d/xrdp start 

Deberíamos ver un OK como respuesta. Es importante destacar que WSL2 no funciona con systemd así que utiliza este tipo de comandos para iniciar servicios.

Luego nos conectamos con “Conexión a escritorio remoto” a localhost o localhost:[puerto] y digitamos nuestras credenciales de Ubuntu. Nos encontraremos con un sistema muy funcional, aunque un poco (sólo un poco) más lento que si lo hubiéramos instalado directamente sobre un equipo.

Y el sonido?

El sonido es algo complejo cuando mezclas WSL y Pulseaudio. Hay otra manera? Actualmente no hay otra manera de obtener audio en distros como Ubuntu. Pulseaudio es una especie de servidor de audio que en nuestro caso, se debe conectar al sistema de Windows para poder oirse (mientras usas Linux Windows sigue funcionando).

Cuál es el problema? En nuestro caso el problema de Pulseaudio es que no funciona bien con XRDP desde el inicio y requiere cierto trabajo de recompilación, pero no se asusten que no es nada del otro mundo. Esto significa que tenemos un sistema perfectamente funcional en todo menos en el área del sonido.

Por cierto, hay una web que ofrece un script para instalar XRDP con sonido. Lo intenté usar pero instala un XRDP desde la fuente que tiene systemd y sencillamente no funciona bien con Ubuntu. No vale la pena, al menos no con la instalación “custom” o personalizada. Además me instaló el módulo de pulseaudio-xrdp con errores así que ahí lo dejo.

Procedimiento:

Primero asegúrense de que pulseaudio esté instalado y escriban:

sudo apt-get install git libpulse-dev autoconf m4 intltool build-essential dpkg-dev -y

sudo apt build-dep pulseaudio -y

Con las fuentes debidamente habilitadas (descomentadas) en /etc/apt/sources.list escribimos en la consola:

cd /tmp

sudo apt source pulseaudio

Lo anterior nos descarga el código fuente de pulseaudio.

pulsever=$(pulseaudio --version | awk '{print $2}')

cd /tmp/pulseaudio-$pulsever

(Esto más que nada para no equivocarnos de versión por si tuviéramos más de una versión de pulseaudio por ahí)

sudo ./configure

Luego podemos si queremos quedarnos en /tmp y escribir:

sudo git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git

cd pulseaudio-module-xrdp

Lo cual nos trae el código del módulo de XRDP.

sudo ./bootstrap

sudo ./configure PULSE_DIR="/tmp/pulseaudio-$pulsever"

sudo make

Esto va a hacer que se configure el código del módulo de pulseaudio para cargarse en la versión de pulseaudio que corresponde a nuestra instalación. Y finalmente instalamos:

cd /tmp/pulseaudio-$pulsever/pulseaudio-module-xrdp/src/.libs

sudo install -t "/var/lib/xrdp-pulseaudio-installer" -D -m 644 *.so

La configuración de WSL probablemente no funcione sin al menos un reinicio de la máquina virtual, así que vamos a una Powershell y tipeamos:

wsl.exe --shutdown

Después iniciamos Ubuntu, XRDP e iniciamos normalmente una sesión remota y deberíamos tener sonido. Algo que hice fue instalar una utilidad llamada pavumeter que detecta (utilizando pulseaudio) el sonido generado dentro del sistema. También deberíamos poder abrir Firefox y obtener sonido sin problemas. En mi caso tengo un Lenovo Z400 y el sonido (que es bastante bueno nativamente) fue muy parecido al de Windows.

Es posible que tengamos problemas para inicializar pulseaudio. Recomiendo revisar si se inicializó con pulseaudio en la consola de Linux (llamado Terminal Emulator en XFCE4 o Mate Terminal en MATE). Una vez que estén seguros de que no está andando (y si no lo están escriban pulseaudio -k) envíen:

pulseaudio -D 

Eso hará que pulseaudio corra como un servicio dentro de Linux y está disponible durante toda la sesión. Para que esté disponible siempre lo agregamos al .xsession y ya está. Cualquier duda o corrección al correo de abajo. Esta guía se basó en mi experiencia con el tutorial de David Bombal en YouTube y la información (no completamente útil para nuestro caso pero buena para instalaciones “normales”) de c-nergy.