Screenshot di sistemi Unix e GNU/Linux via command line
Postato da ROb | nella categoria Linux, Utilità | venerdì, 22 aprile 2011
2
Tutti noi conoscono almeno 3 o 4 modi differenti per catturare screenshot di finestre o schermo intero sia su sistemi Windows che in sistemi Linux o Unix.
Oggi voglio proporvi due piccoli script che ho scritto ispirandomi a un interessante articolo su IBM Developer Works.
Entrambi gli script sfruttano i comandi messi a disposizione dai sistemi X11 e tipicamente già installati nelle nostre distribuzioni. Tali comandi sono: xwd e xwininfo .
Per renderli un pò più comodi ho utilizzato anche il comando convert, della suite di ImageMagick, e notify-send per inviare delle notifiche all’utente al termine delle operazioni di salvataggio.
Il primo script, di nome capture_full.sh, può ricevere in ingresso 1 parametro che determina il numero di secondi di attesa prima di catturare il nostro desktop in un file nel nostro Desktop. Se tale parametro non viene passato il valore di attesa di default è 3 secondi.
#!/bin/bash
if [ "$1" != "" ]
then
seconds=$1;
else
seconds=3;
fi
now=`date "+%Y_%m_%d-%H_%M_%S"`
filepath="${HOME}/screen_full_${now}.png"
sleep ${seconds} ; xwd -root | convert - ${filepath}
notify-send -t 3000 -u low -i gtk-dialog-info "Screenshot" "file saved in ${filepath}";
Il secondo script, di nome capture_window.sh, ci permette invece di catturare una singola finestra (anche se non ci permette di interagire con il mouse nella finestra, per far apparire ad esempio un menu contestuale). Il funzionamento di questo script è il seguente: dopo che viene lanciato attende alcuni secondi (modificabili con il primo parametro opzionale) per permetterci di scegliere una finestra del desktop, quindi salva l’id della finestra e lo usa per memorizzare l’immagine della finestra nel desktop.
#!/bin/bash
if [ "$1" != "" ]
then
seconds=$1;
else
seconds=3;
fi
sleep ${seconds};
wid=`xwininfo | grep "Window id" | awk '{print $4}'`;
now=`date "+%Y_%m_%d-%H_%M_%S"`
filepath="${HOME}/Desktop/screen_window_${now}.png";
xwd -id ${wid} | convert - ${filepath}
notify-send -t 3000 -u low -i gtk-dialog-info "Screenshot" "file saved in ${filepath}";
Provateli, modificando anche la variabile $filepath se lo ritenete opportuno, e fatemi sapere.

Ciao, mi sai dire se questo script funziona qualora si voglia effettuare uno screenshot di una schermata dalla shell in frambuffer senza essere loggati ad xserver?
Io penso che funzioni solo quando è in esecuzione un server XWindow, ma non te lo posso assicurare. Puoi provare a leggere le pagine man dei singoli comandi per avere ulteriori dettagli in merito.