Veamos cómo podemos hacer una captura de pantalla de una terminal sin servidor gráfico o TTY

A los Linuxeros y Linuxeras nos gusta mucho mostrar nuestros escritorios. Somo muy dados a compartir capturas de pantalla de nuestros sistemas GNU/Linux, con nuestro mejor fondo de pantalla, combinación de iconos, tema de escritorio y demás personalizaciones.
Para muestra un botón de las capturas de pantalla que compartimos en Mastodon bajo la etiqueta #unixporn:
Y para realizar dichas capturas de pantalla tenemos aplicaciones muy completas como Spectacle, Flameshot, scrot por nombrar algunas opciones…
Pero ¿cómo hacer una captura de pantalla de una terminal (no un emulador de terminal) TTY sin entorno gráfico? Hace poco me encontré en esa situación y ninguna de esas opciones me sirvió. Todas necesitan un servidor gráfico corriendo para poder ejecutarse.
Al final di con una solución que lo que hace es «convertir» el framebuffer en una imagen .png. La aplicación se llama Fbcat que tiene una aplicación llamada fbcat y fbgrab, que es la que realmente me interesa.
Buscando, la primera opción que me dieron fue fbgrab, pero no estaba empaquetada para openSUSE en su versión más reciente, así que después de 2 días conseguí empaquetarla en la versión 1.3.3 disponible en mi repositorio local.
Después de haberme pasado 2 días intentando empaquetarla, hasta que lo conseguí, cuando la instalo y la pruebo veo que no funciona, ya que sí guarda la imagen, pero queda distorsionada y no se ve nada y no sé el motivo…
Sigo buscando opciones y me encuentro con fbcat, que contiene tanto fbcat como fbgrab y está disponible para Debian y derivadas y para openSUSE.
La instalo desde los repositorios y eureka! esta sí funciona correctamente. Con esta herramienta puedo estar trabajando en una TTY o una terminal sin servidor gráfico funcionando y poder hacer una captura de pantalla de la terminal en una imagen .png (tal como se ve en la imagen que abre el artículo)
Además desde tu sesión gráfica (normalmente la 7) puedes capturar cualquier TTY que tengas, sin necesidad de ir a esa sesión, y correr el comando desde allí. Pero veamos en detalle los parámetros.
Nos dirigimos a una TTY (normalmente puedes ir a una mediante la combinación de teclas Ctrl+Alt+F1 y regresar a tu sesión gráfica con Ctrl+Alt+F7) y nos logueamos.
En esa TTY, no tenemos un servidor gráfico, eso no es un emulador de terminal, es una terminal pura y dura, donde correr comandos y ejecutar aplicaciones que no requieran un servidor gráfico, como por ejemplo: moc para escuchar música, neomutt para el correo, podboat para leer canales RSS, etc…
Si por algún motivo queremos hacer una captura de esa terminal, es ahora cuando fbgrab nos viene a solucionar el problema. Ejecutamos:
sudo fbgrab captura.png
No podemos ver la captura en esa sesión, pero regresando a nuestra sesión gráfica (Ctrl+Alt+F7 ¿recuerdas?) podremos abrirla con nuestro visor de imágenes preferido y ver la captura.
Podemos desde esta sesión gráfica hacer una captura de la TTY, para ello ejecutamos uno de estos dos comandos:
sudo fbgrab -c 1 captura.png sudo fbgrab -C 1 captura.png
Ambos son similares, pero el de la C mayúscula tarda un poco más para poder hacer una captura buena en framebuffers más lentos. Y 1 si queremos la TTY 1, si queremos otra, pondremos el número que queramos…
También tenemos la opción de poder retrasar la captura unos segundos mediante la opción -s
Así que pude solucionar mi inquietud y pude hacer una captura de pantalla de una terminal de Linux sin servidor gráfico corriendo.
Esto también puede ser útil si estamos «cacharreando» en una Raspberry Pi en la que no tenemos servidor gráfico y queremos hacer una captura por algún motivo.
Como siempre digo, espero que quizás esta sea la respuesta que estabas buscando si también a ti te ha surgido esta inquietud o este «problema». Utiliza los comentarios del blog para dejar información…
Hola Victor,
Los comandos de ejemplo se han quedado pegados en una línea.
Para completar información, si estás usando Tumbleweed, desde que Wayland se estableció como el «servidor gráfico» (en realidad se llama compositor) por defecto, tty7 siempre tiene el display manager. La sesión gráfica se inicia en TTY2.
Si ningún usuario tiene una sesión gráfica iniciada, TTY1-6 son terminales virtuales en modo texto. Cuando un usuario inicia una sesión gráfica local, se inicia Wayland/X11 en TTY2 y se convierte en una terminal con sesión gráfica. Quedando TTY1, TTY3-6 como terminales virtuales en modo texto. Y TTY7 sigue teniendo el display manager.
Eso implica que siempre que selecciones TTY7, vas a tener que «iniciar sesión» (el botón tiene el texto «login»).
Sin embargo, si cuando terminas de trabajar en TTY1, y ya habías iniciado una sesión gráfica antes, puedes seleccionar TTY2 para volver y entonces verás el escritorio (o la ventana que tuvieses abierta antes) y el protector de pantalla (screen lock, el botón tiene el texto «unlock»).
Un saludo.
Gracias como siempre por la deallada información técnica!!! 🙂
Hola. Tengo entendido que también se puede ver la captura sin necesidad de entrono gráfico, usando el framebuffer, si instalamos fbi. Sé que está en las repos de Debian, no sé las demás distros.
Hola!
Vaya, pues no lo sabía!! Muchas gracias por la información e investigaré a ver… 🙂
Saludos y gracias por comentar!!! 🙂