HOWTO: Cómo hacer capturas de pantalla, usando scrot (SCReen shOT).


ÍNDICE


INTRODUCCIÓN

Siempre han sido de gran utilidad las capturas de pantalla o screenshots, siendo algunos motivos el entretenimiento, la comparación, la evidencia, y el diseño gráfico, entre otros.

Tómese como ejemplo las aplicaciones gráficas (Sistemas Operativos, Entornos de Escritorio, Reproductores de Música, Navegadores de Internet, Clientes de Mensajería, Clientes de Correo, Juegos, etc.) que se ofrecen a través de la Internet, en donde quizás la mejor manera de responder rápidamente a la pregunta -"¿cómo se ve la aplicación?"- es mediante una captura de pantalla.


JUSTIFICACIÓN

En Kubuntu existe una herramienta predeterminada para capturar la pantalla, dicha herramienta se llama KSnapshot y se invoca al presionar la tecla ImprPant (PrintScreen) o desde el menú K en la categoría Gráficos. Al momento de ejecutarse KSnapshot mostrará que ha capturado todo el escritorio y sólo resta guardar la imagen en un medio de almacenamiento.

Pero si se desea volver a capturar otra pantalla, o parte de la pantalla, se debe volver a usar KSnapshot e indicar si se desea capturar todo el escritorio, sólo una región, o sólo una ventana. Es decir, la herramienta requiere de la interacción con el usuario para poder capturar y guardar las imágenes. Esto impide usarla de manera más personalizada o automatizada.

Por otro lado está scrot ( sitio oficial ) que significa SCReen shOT. Es una aplicación desarrollada por Tim Gilbert la cual permite capturar la pantalla en su totalidad o parte de la misma, usando distintos parámetros que le hacen una herramienta versátil. Scrot es una clara demostración más de que muchas herramientas de la consola son a veces superiores a aquéllas que son sólamente gráficas, incluso cuando se trata de hacer algo gráfico.

Este tutorial pretende explicar cómo usar scrot en Kubuntu, para realizar capturas de pantalla de distintas maneras.


INSTALACIÓN

Scrot se encuentra en los repositorios oficiales, así que para ver la información del paquete se usa el comando:

$ aptitude show scrot

Debido a que scrot se encuentra en los repositorios oficiales sólo se requiere un comando para instalar (como root):

$ sudo aptitude install scrot

Para confirmar que scrot ya se ha instalado en el sistema se ejecuta el comando:

$ which scrot
/usr/bin/scrot

y así se ha mostrado la ruta donde se encuentra el comando.


CÓMO CAPTURAR LA PANTALLA

A continuación se explican algunos métodos para hacer capturas de pantalla, aunque seguramente hay más formas.

Capturar el Escritorio completo

En Kubuntu se usa la combinación de teclas ALT+F2 para invocar la miniCLI. Al aparecer la miniCLI se escribe simplemente el comando siguiente:

scrot

y se presiona ENTER. La miniCLI se cerrará y aparentemente no habrá sucedido nada, cuando en realidad ya se habrá capturado el Escritorio completo y se habrá guardado un archivo en el directorio ~/ , es decir en el directorio /home/usuario/ . Para comprobarlo basta abrir dicho directorio usando un explorador de archivos como Konqueror o Dolphin, o listando el contenido desde una terminal virtual:

$ ls -l ~/*.png
-rw-r--r-- 1 usuario grupo 841452 2009-08-22 14:25 2009-08-22-142545_1280x1024_scrot.png

El archivo creado es una imagen en formato PNG (Portable Network Graphic), y el nombre del archivo denota el año, mes, día, horas, minutos, segundos, resolución (anchura x altura). Adicionalmente lleva la palabra scrot para indicar que el archivo fue generado por dicha aplicación.

Capturar una Ventana

Si sólo se desea capturar una ventana, por ejemplo la de la calculadora SpeedCrunch, entonces se vuelve a presionar ALT+F2 para invocar la miniCLI y se escribe el comando scrot agregando el parámetro -s (select) para indicar que se hará una selección, y el parámetro -b (border) para indicar que se incluya el borde de la ventana:

scrot -s -b

y se presiona ENTER. La miniCLI desaparecerá y en ese momento scrot estará esperando que se seleccione una ventana o región, o que se presione la tecla ESC para cancelar la captura. Para continuar se debe hacer un sólo clic únicamente sobre la ventana (no importa qué parte de la ventana) que se desea capturar, por ejemplo SpeedCrunch, la cual debió estar visible (es decir no minimizada) antes de ejecutar el comando anterior. Al momento de hacer clic nuevamente se habrá hecho la captura y se puede comprobar como se explicó anteriormente.

Capturar una Región

Si se desea de la pantalla entonces ejecuta el mismo comando anterior, con la diferencia de que, en vez de hacer un clic y soltar sobre una sóla ventana, se hará clic sobre la pantalla y sin soltar se hará un cuadro de selección (en la pantalla se irá dibujando un rectángulo) que abarque la región que se desea capturar, soltando finalmente cuando se haya elegido la región que se desea. Al momento de soltar el clic se habrá hecho la captura y se puede comprobar como se explicó anteriormente.

Capturar el Escritorio completo

Por supuesto que los comandos anteriores pueden usarse también en consolas virtuales, como Konsole, Yakuake, XTerm, Terminator, entre otras. También es posible agregar más parámetros que en la miniCLI no se usaron en los ejemplos anteriormente citados.

El parámetro -d (delay) permite indicar cuántos segundos debe esperar la aplicación antes de capturar la pantalla, por ejemplo:

$ scrot -d 10

y se presiona ENTER. Scrot contará 10 segundos, tiempo durante el cual la consola ignorará cualquier cosa que se introduzca, y entonces hará la captura de pantalla. Así que durante el tiempo especificado uno puede acomodar el Escritorio y las ventanas contenidas en él. Si por alguna razón se desea cancelar (cancel) la operación se debe presionar CTRL+C.

El parámetro -c (count) se usa junto con el parámetro anterior, y es útil para mostrar en la línea de comandos una cuenta regresiva, de esta manera el usuario sabrá cuánto tiempo resta para la captura de pantalla:

$ scrot -d 10 -c

y se presiona ENTER. Scrot contará 10 segundos, pero esta vez mostrará la cuenta regresiva, y si por alguna razón se desea cancelar la operación se debe presionar CTRL+C.:

Taking shot in 10.. 9.. 8.. 7.. 6.. 5.. 4.. 3..

El siguiente comando usa los parámetros ya explicados, y es útil para Capturar una Ventana o para Capturar una Región. Se indica que el usuario seleccionará una ventana ó región, que también se capturará el borde (en caso de haberse seleccionado una ventana), que habrá un retardo de 10 segundos a partir del momento en el que se suelte el clic, y que se mostrará una cuenta regresiva:

$ scrot -s -b -d 10 -c

Es posible crear un icono que represente la ejecución de scrot y sus parámetros, de tal manera que con sólo hacer un clic sobre el icono se ejecute el comando. Para ello es necesario crear un archivo especial que contendrá el código que será interpretado por el shell del sistema, y por ello se le llama shell scripting. Estos son los pasos:

1) crear un directorio, que contendrá las capturas de pantalla:

$ mkdir -p ~/Pictures/scrot/

2) crear un directorio que contendrá el archivo de script y las capturas de pantalla, y entrar en dicho directorio:

$ mkdir ~/scripts
$ cd ~/scripts

3) crear el archivo de script, el cual se llamará scrot-captura.sh:

$ touch scrot-captura.sh

4) abrir el archivo scrot-captura.sh con el editor nano:

$ nano scrot-captura.sh

o con un editor gráfico como kwrite:

$ kwrite scrot-captura.sh

5) ingresar el código siguiente:

#!/bin/bash
scrot -s -b -e 'mv $f ~/Pictures/scrot/'

La primer línea (llamada sha-bang) indica que es un archivo especial, y que se ejecutará usando el shell Bash. La segunda línea contiene el código para la captura de la pantalla. También se indica el parámetro -e (execute) ya que se ejecutará un comando después de capturar la pantalla, en este caso el comando es para mover (move) el archivo (indicado con la variable $f que equivale a file) al directorio ~/Pictures/scrot/ que fue creado unos pasos atrás. Para salir del editor nano guardando los cambios se presiona CTRL+X, Y, ENTER.

Ahora hay que hacer que el archivo de script se convierta en un archivo ejecutable, agregándole el modo de ejecución (eXecute):

$ chmod +x scrot-captura.sh

Para comprobar que el archivo ahora es ejecutable:

$ ls -l
-rwxr-xr-x  1 usuario grupo   24 2009-08-21 19:27 scrot-captura.sh*

se observa que al final del nombre de archivo hay un asterisco (*) indicando que es un archivo ejecutable, y al principio se muestra el modo de ejecución (x) para el usuario, para el grupo del usuario, y para otros usuarios.

el siguiente paso es crear un enlace simbólico (symbolic link) en el Escritorio,:

$ ln -s ~/scripts/scrot-captura.sh ~/Desktop/

para comprobar que se ha creado el enlace simbólico:

$ ls -l ~/Desktop/scr*.sh

el resultado es

lrwxrwxrwx 1 usuario grupo 36 2009-08-22 10:38 scrot-captura.sh -> /home/usuario/scripts/scrot-captura.sh*

por último se puede personalizar el icono del enlace creado en el Escritorio, haciendo clic secundario sobre él para mostrar el menú contextual, se selecciona "Propiedades", y en la pestaña "General" se oprime el icono de la llave de tuercas para "Editar el tipo de archivo", en la ventana nueva dentro en la pestaña "General" se oprime el icono que representa una terminal y se desplegará otra ventana nueva en donde se puede seleccionar un icono del sistema. Para mayor comodidad se puede mover/copiar el enlace al panel de tareas y de esta manera siempre estará visible, sin tener que minimizar todo para mostrar el Escritorio. También es posible asignarle al enlace una combinación de teclas para no sólo invocarlo con clic, sino presionando (por ejemplo) CTRL+SHIFT+S.

Por último sólo resta ejecutar el enlace y este invocará automáticamente el script realizado, parecerá que no ha sucedido nada, pero se debe hacer 1 clic sobre la ventana que se desea capturar, o arrastrar dibujando un rectángulo para seleccionar sólamente una región o todo el Escritorio. Al momento de soltar el clic scrot capturará la ventana/región y moverá el archivo al directorio ~/Pictures/scrot/ de acuerdo a lo indicado en el script.


SUGERENCIAS

Scrot tiene muchas características más, como especificar el tipo de archivo final (JPEG, PNG, y otros), crear automáticamente miniaturas (thumbnails) de la captura, especificar el nombre que tendrá el archivo para no usar el formato predeterminado aaaa-mm-dd-hh-hhmmss_AnchuraxAltura_scrot.png, y otras opciones más. Para ver la lista completa de parámetros se debe consultar el MANual de scrot:

$ man scrot

Algunas ideas que han surgido durante la redacción de este tutorial, para aumentar la versatilidad del script, son:

- que el archivo script se proteja para que sólo usuarios administrativos puedan editar, renombrar, borrar

- que se programe el script usando cron para que se ejecute cada X tiempo, por ejemplo cada 1 minuto ( más información aquí )

- que se omitan los parámetros -s -b para que la captura sea automática, sin interactuar con el usuario

- que después de la captura de la pantalla el archivo de imagen sea renombrado para que incluya el nombre de usuario y el nombre del equipo, por ejemplo: 2009-08-22-110754_scrot_usuario_equipo.png

- que la imagen creada sea enviada por correo usando alguna aplicación como Email (ver el artículo), con algunas variantes como incluir la contraseña para usar SMTP sin esperar la intervención del usuario

- que de la imagen creada sea haga una copia con el nombre ultima-captura.png y el archivo se mueva a un directorio con el nombre del usuario, y que la ruta de ese directorio pertenezca a un servidor web, para que algúna página index.html apunte siempre al archivo ultima-captura.png haciendo que la imagen sea accesible desde un navegador

- que la imagen creada originalmente sea movida a un archivo .ZIP o .TAR.GZ con el nombre del año y mes, por ejemplo: 2009-08.tar.gz para mantener un archivo

Con lo anterior se lograría monitorizar un equipo y ver en qué se ha estado ocupando, de esta manera es posible supervisar con responsabilidad a los pequeños del hogar, o a los usuarios de una red de trabajo, o un servidor que esté corriendo en modo gráfico.


NOTAS

Scrot captura la pantalla gráfica, es decir funciona en un Entorno de Escritorio como KDE, GNOME, XFCE, Fluxbox, etc. No funcionará en una TTY, es decir, en una consola real que se haya invocado mediante CTRL+ALT+F[1, 2, 3 ...].