Después de comprar una computadora portátil nueva, Pierre Couy notó que le faltaba una característica esencial: DisplayPort a través de USB-C. Esto llevó a Guoy a crear su propia solución de transmisión de pantalla virtual con tecnología de Raspberry Pi 3B.
La premisa es simple, transmita los datos de la pantalla usando Ethernet a la Raspberry Pi y luego emita la pantalla a través del puerto HDMI de la Pi. Sin embargo, este proyecto requirió muchos procesos y habilidades diferentes para llevarse a cabo.
La computadora portátil anterior de Couy podía emitir a través de VGA y HDMI simultáneamente. Sin embargo, solo HDMI estaba disponible para su compra más reciente, lo que llevó a Couy a desempolvar una vieja Raspberry Pi 3B y presionarla en los servicios para transmitir una pantalla adicional. La elección fue simple ya que la Raspberry Pi era gratuita, pero hubo algunos compromisos que incluyeron obtener el equilibrio perfecto entre calidad de imagen, latencia y velocidad de fotogramas, dado el puerto Ethernet de 100 m y la CPU de cuatro núcleos.
Los objetivos que Couy estableció fueron simples:
- La latencia no debería notarse al desplazarse o mover el mouse
- La calidad de la imagen debe ser lo suficientemente alta para leer texto pequeño
- Como planeaba usarlo principalmente para contenido de texto estático, decidí ser fácil conmigo mismo al establecer un objetivo bajo de 10 FPS.
- Si el extremo receptor de la transmisión alguna vez se atrasa, debería ponerse al día para vivir lo más rápido posible
- Use Direct Rendering Manager para mostrar la transmisión en Pi en lugar de depender de un servidor X.
- Busqué herramientas de reproducción remota y VNC porque parecían soluciones de baja latencia fáciles de usar. Sin embargo, no estaba interesado en la transmisión de entradas desde el Pi a la computadora portátil.
Además, Couy quería configurar un servidor DHCP en la Raspberry Pi, iniciar el software necesario en el arranque y configurar la computadora portátil para comenzar a transmitir los datos de la pantalla. Ese último objetivo requería el uso de xrandr para crear un monitor virtual.
La primera tarea de Couy fue crear la tubería de video y eligió usar ffmpeg en su computadora portátil. Después de instalar un servidor DHCP (udhcpd), Cuoy configuró las dos máquinas para hablar entre sí. Con la conexión confirmada, la primera prueba real fue una transmisión no optimizada a través de Ethernet. La prueba fue un éxito, pero fracasó en todos los objetivos. Sin inmutarse, Couy siguió adelante. Finalmente, a través de una serie de iteraciones, Couy pudo optimizar la transmisión hasta un punto en el que cumplió con los objetivos.
El objetivo final era ampliar la pantalla de la computadora portátil mediante un script bash personalizado que generaría un monitor virtual, configurado para satisfacer las necesidades de Couy y transmitido a la dirección IP de Raspberry Pi. En la Pi, otra secuencia de comandos intercepta la transmisión y emite la reproducción a través del puerto HDMI.
Claro, todo esto es una exageración; un adaptador USB DisplayLink funcionaría igual de bien y con poco o ningún trabajo. Sin embargo, el proceso completo es fascinante. Muestra lo que se puede lograr con hardware barato, algunos conocimientos de Linux y muchas iteraciones.
Couy tiene una publicación de blog completa sobre el proceso, y todos los archivos de configuración se pueden encontrar en el repositorio respectivo de GitHub.