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…