Publi

Píldora: 10 maneras de tomar una captura de pantalla en GNU/Linux

Captura de pantallaComo usuarios, seguro que por herencia de Microsoft Windows, casi siempre utilizamos la tecla Imprimir Pantalla para tomar capturas de nuestro escritorio o pantalla. Generalmente, nuestro entorno de ventanas tiene un programa configurado en esa tecla que nos permite guardar una imagen en el portapapeles o directamente en un fichero.

Pero claro, los usuarios de GNU/Linux, otra cosa no, pero tenemos cientos de opciones para cualquier cosa. Y, claro, en según qué ocasión, nos viene mejor una forma u otra de hacer las cosas. Sobre todo cuando estamos utilizando LiveCDs, LiveDVDs o LiveUSBs, en los que los programas a utilizar son limitados o queremos automatizar de alguna forma la toma de capturas de pantalla para adaptarla a nuestro modo de trabajo, cosa que es más difícil de hacer en otros sistemas.

Imprimir pantalla

Entornos de ventanas como KDE Plasma, Gnome, Cinnamon o XFCE vienen con programas que, automáticamente pulsando la tecla Imprimir Pantalla / Print Screen crean automáticamente la captura de la pantalla al completo, sin que tengamos que hacer nada. Vale, esta es la más sencilla y no tengo mérito ninguno en decirla, pero quería llegar a 10 maneras 🙂

Captura de pantalla KDE Plasma
Claro, esta forma nos permite lanzar una captura de pantalla si estamos delante del ordenador y, aunque está integrada en el entorno de ventanas, no nos permite mucha personalización. A veces, los programas para realizar capturas son muy pesados y nos causan una demora de varios segundos (además de la demora para realizar la captura), por lo que, cuando estamos haciendo muchas capturas puede resultar algo incómodo. Además, si por casualidad queremos hacer una captura de pantalla remota, muchos de estos programas no nos permitirán hacerla.
¿Para qué quiero una captura remota? Sobre todo por temas de asistencia técnica, cuando me basta con una captura de pantalla y no me apetece hacer una conexión por VNC, Teamviewer o software similar.

ImageMagick

Las herramientas de ImageMagick también nos permiten realizar una captura de pantalla y almacenarla, de forma sencilla y directamente desde la línea de comando. Simplemente haciendo:

import captura.jpg

Se nos cambiará el cursor y cuando hagamos click sobre una ventana, vamos a crear un archivo llamado captura.jpg con la imagen de dicha ventana, aunque podemos crear casi cualquier tipo de imagen, ya que ImageMagick soporta decenas de formatos (png, miff, tiff, tga, etc).
Pero no todo acaba ahí, si queremos capturar la pantalla completa, sin preguntar por la ventana, podemos hacer:
import -window root captura.jpg

O incluso utilizar más opciones como:
import -window root  -crop 1920×1080+0+0 -quality 95 -pause 2 captura.jpg

En este caso, capturaremos la pantalla completa (-window root), y nos quedaremos solo con una región de 1920×1080 (-crop 1920×1080+0+0, esto puede ser útil si el ordenador tiene dos pantallas y solo queremos la de la izquierda), el fichero resultante lo comprimiremos a un 95% de calidad (-quality 95) y antes de hacer la captura esperar 2 segundos (-pause 2). En este sentido podemos hacer muchas cosas, como redimensaionar la captura de pantalla resultante un 50% (si incluimos -resize 50%). Aunque algo interesante de import

Otra opción es preguntar de forma interactiva por una región en pantalla, de la siguiente manera:

import -frame captura.jpg

Por supuesto, podemos utilizar todos los argumentos que he puesto antes para afinar la ejecución del comando. Por último, algo que me encanta, es la posibilidad de crear múltiples capturas de pantalla todas seguidas, para hacer un time-lapse de la pantalla, de esta forma:

import -snaps 100 -pause 1 captura.jpg

Esta línea primero pedirá que seleccionemos la ventana que queremos capturar. Tras hacer click, empezará a hacer una captura cada segundo, hasta 100 generando los ficheros captura-0.jpg, captura-1.jpg, captura-2.jpg, etc; lo malo es que no permite intervalos con decimales, es decir, no permite 0.5 o 1.5 segundos, por lo que no es un buen método para obtener precisión, pero sí para hacer una colección de capturas de pantalla, por ejemplo si estamos haciendo un tutorial, tenemos varias pantallas preparadas y más o menos tardamos 10 segundos en cambiar de una a otra, podemos ir cambiando las pantallas sin preocuparnos de pulsar teclas para hacer las capturas. Esto también lo podemos poner en un pequeño vídeo:

import -window root -crop 1920×1080+0+0 -snaps 20 -pause 1 jpeg:- | ffmpeg -r 3 -f image2pipe -i pipe:0 out.mp4

Aquí hacemos 20 capturas de pantalla (una cada segundo) que exportamos como jpg, esto se lo pasamos a ffmpeg para que lo guarde como vídeo a 3 fotogramas por segundo. Lo bueno es que lo podemos centrar en una ventana o crear un gif animado si queremos.

Como dato extra, podemos seleccionar desde consola la ventana que vamos a capturar (siempre que el gestor de ventanas la tenga mostrada, si está minimizada podemos tener problemas). Para ver las ventanas disponibles podemos ejecutar:

wmctrl -l
0x02e0000d -1             N/A Escritorio — Plasma
0x02e00015 -1             N/A Escritorio — Plasma
0x06000035  1 gaspy-RedDragoN Terminal -- gaspy@gaspy-RedDragoN ~
0x06c00127  3 gaspy-RedDragoN PAC (v4.5.5.7)
0x02e0002c -1             N/A Plasma
0x06000e04  0 gaspy-RedDragoN Terminal -- gaspy@gaspy-RedDragoN ~
0x06003aa1  0 gaspy-RedDragoN Terminal -- gaspy@gaspy-RedDragoN ~
0x060059df  1 gaspy-RedDragoN Terminal -- gaspy@gaspy-RedDragoN ~
0x0604aa5d  1 gaspy-RedDragoN Terminal -- gaspy@gaspy-RedDragoN /mnt/storage/Converts
0x0604b7a4  1 gaspy-RedDragoN Terminal -- gaspy@gaspy-RedDragoN ~
0x0604c052  1 gaspy-RedDragoN Terminal -- gaspy@gaspy-RedDragoN ~
0x0ae00003  1 gaspy-RedDragoN Proyectos.ctb -- /home/gaspy/Personal_/CompressedNotes -- CherryTree 0.38.4
0x0b200003  1 gaspy-RedDragoN pwmanager -- KeePassX
0x061535c6  4 gaspy-RedDragoN Terminal -- gaspy@gaspy-RedDragoN ~/Descargas
0x061dd249  0 gaspy-RedDragoN Terminal -- gaspy@gaspy-RedDragoN ~
0x0120000c  0 gaspy-RedDragoN Administrador de Actualizaciones
0x0760004b  1 gaspy-RedDragoN 555 Low Voltage Operation -- Mozilla Firefox
0x08400001  4 gaspy-RedDragoN toddmotto/public-apis: A collective list of public JSON APIs for use in web development. -- Chromium
0x08e00003  0 gaspy-RedDragoN test.jpg -- Geeqie
0x09c00011  5 gaspy-RedDragoN Oracle VM VirtualBox Administrador
0x09e00235  5 gaspy-RedDragoN LMDE (Sistema instalado) [Corriendo] -- Oracle VM VirtualBox
0x0c200001  3 gaspy-RedDragoN Spotify

El número a la izquierda es el ID de la ventana, así que podremos ejecutar:

import -window ID -frame captura.jpg

Y sólo capturaremos la ventana especificada con la decoración de nuestro sistema de ventanas (-frame), y por supuesto, podemos mezclarlo con la pipe de ffmpeg para crear un vídeo.

El problema con import es que dependiendo del sistema, el driver gráfico, la composición o el entorno de ventanas, o incluso las versiones de los programas, puede dar problemas o no capturar exactamente lo que hay en la pantalla. Aunque siempre está bien tener las utilidades de ImageMagick por aquí.

Gimp

Este programa nos permite tomar la captura de pantalla de manera interactiva. Tiene pocas opciones, pero hace bien su trabajo. Yo diría que es el método que menos problemas me ha dado, aunque sí es el más lento en hacer su trabajo si lo que queremos es simplemente capturar la pantalla. Gimp tarda mucho en iniciarse debido al gran número de opciones que tiene el programa, aunque luego puedes editar la captura, dibujar sobre ella, escribir aclaraciones, etc. Si sólo vas a utilizarlo una vez no pasa nada, pero si es costumbre realizar capturas y editar el resultado, puede terminar cansando a cualquiera. A mí me hace sentir como que mato moscas a cañonazos.
Captura de pantalla con The Gimp

shutter

Si usas Gnome o, al menos, tienes las bibliotecas de gnome instaladas puedes utilizar Shutter. Una aplicación interactiva para crear capturas de pantalla que nos permite tomar varias capturas de pantalla, almacenarlas en una sesión, incluso subirlas a Internet, todo de una forma muy intuitiva. Tiene numerosos plugins que permiten aplicar algunos efectos o automatizar algunas tareas.

Lo malo de shutter es que tiene muchas dependencias, y es un programa más o menos grande, con muchas opciones y en el momento menos pensado, cuando vas con prisa se pone a buscar actualizaciones. Incluso puede que en algunos sistemas no funcione correctamente.

Flameshot

Flameshot es un gran software para realizar capturas de pantalla. Otro programa interactivo más, sólo que este nos permite editar la captura, dibujar sobre ella de forma interactiva y muy fácil. Es un programa que merece la pena probar, con muchas opciones de personalización y que nos permitirá hacer capturas de pantalla para tutoriales de forma muy sencilla.
Es un programa muy joven y aún quedan cosas por pulir. No se lleva bien con algunas configuraciones o drivers gráficos. Por ejemplo, en la versión de Enero de 2018 tengo problemas trabajando a dos pantallas, pero tiene buena pinta y el programa promete. Está basado en Qt y no tiene excesivas dependencias. Además, desde la línea de comando podemos hacer muchas cosas.

scrot

A pesar de lo feo de su nombre cuando lo pronuncias en español es un gran programa de captura de pantalla. Muy bueno si vamos a realizar alguna automatización o captura remota en lugar de import. Permite capturar con mejor calidad, incluso cuando otros programas fallan al capturar. Además, la selección de región es algo mejor (aunque tampoco perfecta). Además nos permite ejecutar un programa con la imagen capturada de forma sencilla. Para hacer una captura, podemos ejecutar el programa tal cual:

scrot

Especificar el nombre del archivo:
scrot captura.jpg

O podemos seleccionar de forma interactiva una ventana o una región (con -s), el argumento -b cogerá cambién el borde de la ventana:

scrot -s -b captura.jpg

maim

Es una evolución de scrot, que permite selecciones avanzadas de pantalla gracias a slop. El programa es muy rápido y permite poder automatizar nuestro trabajo bastante. Eso sí, no podremos instalarlo en todos los sistemas, sólo en distribuciones actualizadas, ya que algunas características de las bibliotecas que utiliza no estaban disponibles hace unos años. Maim nos permite hacer capturas ejecutándose directamente y especificando el fichero (como scrot), además, permite cosas como esta:

maim -s -c 0.1,0.6,0.4,0.3 --showcursor --min 20 -m “on” -l captura.jpg

En este caso hacemos una captura de pantalla seleccionando de forma interactiva la región o la ventana a capturar (-s), resaltamos con un color especificado (-c 0.1,0.6,0.4,0.3 es formato RGBA entre 0 y 1), mostramos el cursor en la captura (–showcursor), definimos el tamaño mínimo en 20 (–min 20 las dimensiones mínimas de la imagen serán 20×20), enmascaramos capturas fuera de la pantalla (-m “on”, esto es útil cuando tenemos varias pantallas de diferentes resoluciones, habrá zonas nuestro escritorio que no tienen imagen), resaltamos la región o la ventana completa (-l) y guardamos el archivo como captura.jpg

Aunque maim también soporta el ID de ventana con -i o la posición y dimensiones de la captura con -x , -y , -w y -h (para la posición x,y, ancho y alto respectivamente), o si lo preferimos com -g (geometría, especificando directamente WxH+X+Y, como lo haríamos con imagemagick).

xwd

Es el método más simple y rápido para capturar pantalla en X. Además, casi seguro que encontraremos esta utilidad. Con este programa estamos haciendo un volcado de la ventana a fichero, por lo que el formato es un poco extraño y no todos los programas lo van a poder leer (ImageMagick y The Gimp lo pueden leer). Lo malo es que las imágenes en este formato van a ocupar mucho, no tiene compresión y pocos programas lo pueden leer. Aunque es verdad que algunas veces nos encontramos en un sistema ajeno en el que no podemos instalar nada debido a restricciones del sistema, estamos además en modo usuario sin privilegios y lo único que tenemos es esto; también nos puede pasar en algún LiveCD en el que tengamos que tomar una captura y no haya otro modo. Al menos nos hace el apaño.
Lo podemos utilizar así:

xwd -out captura.xwd

Una forma común de utilizarlo es junto con xwud, que es un visualizador de imágenes xwd (con -scale nos permite redimensionar la ventana y con ella la imagen):
xwd | xwud -scale

Y también podemos utilizar ImageMagick para convertir las imágenes:

convert captura.xwd captura.jpg

o directamente (aunque si tienes imagemagick, lo más seguro que tengas import para capturar, aunque puede que si import te da problemas tengas que utilizar este método)
xwd -root | convert -- captura.jpg

En este caso, con -root capturas la pantalla completa, la comunicamos con una pipe a convert (de ImageMagick) y le decimos que el archivo de origen sea – (lo que entra por la entrada estandar), luego lo convertimos a captura.jpg.

Captura del framebuffer

Normalmente en GNU/Linux, aunque puede tener otros usos. Utilizamos el framebuffer para representar la consola a lo grande. A ver, aunque podemos tener nuestra sesión gráfica con emuladores de terminal y muchas ventanas. Antes de la sesión gráfica, tenemos una sesión de texto, en la que sólo tenemos interfaz de comandos. Históricamente, esa consola ha tenido un modo de texto con 25 líneas y 80 columnas (había otros modos de texto, pero el que mejor se veía era el de 80×25). Pero claro, las pantallas han evolucionado mucho, son muy grandes y cabe mucho más texto ahí (incluso podríamos representar imágenes sencillas), así que tenemos modos gráficos especiales que mejoran la visualización en este “modo texto”, con cientos de columnas y algunas decenas más de filas, por lo que podemos ver más texto. Aunque es todo muy “años 80”, y puede que poca gente lo use, es un modo perfecto para cuando quieres utilizar toda la memoria de tu dispositivo (puede que una Raspberry PI, o un dispositivo empotrado), o para rescatar un sistema que se ha quedado sin modo gráfico.

A estos terminales podemos acceder con Control+Alt+F1, Control+Alt+F2, etc; tenemos un número finito de estos terminales y podemos configurarlo, puede que algunas distribuciones solo tengan uno o dos, otras podrán traer ocho o diez, incluso nosotros podemos poner más o menos.

Eso sí, aquí también podemos hacer capturas de pantalla:

fbgrab -d /dev/fb0 captura.png

Emacs en la terminal

Automatizando tareas

Cada uno tiene una manera de trabajar con sus capturas de pantalla. Los hay que prefieren métodos Windowseros de toda la vida, que pulsan imprimir pantalla, luego abren un programa y pegan la imagen resultante, que terminan guardando en BMP. Otros prefieren pulsar una tecla y que les permita seleccionar la región de pantalla que quieren capturar y se almacene automáticamente en un archivo. Tal vez quieras reproducir un sonido cuando se produzca la captura y luego abrir la captura con un programa externo o no. Siempre podemos crear scripts que automaticen todas las tareas que solemos hacer con las capturas y vincularlos a una tecla. Con esto, podremos llegar a ser muy productivos.

Tenemos un ejemplo de script aquí:
Y pronto tendremos una nueva versión del script con muchas características interesantes.

También podría interesarte....

Leave a Reply