GNU/Linux >> Linux Esercitazione >  >> Linux

Catturare screenshot dell'applicazione terminale tramite script di shell?

Non penso che sarai in grado di farlo con screen a meno che l'output non sia effettivamente visualizzato in una finestra, il che probabilmente rende inutile l'uso di screen. Tuttavia, la finestra non deve essere in primo piano.

ImageMagick suite contiene un'utilità chiamata import puoi usare per questo. Se import --help ti dà "comando non trovato", installa il pacchetto imagemagick, sarà disponibile in qualsiasi distribuzione Linux.

import richiede il nome della finestra. iftop è un'interfaccia terminale, quindi per assicurarti di usare il nome giusto, dovrai impostare il titolo del terminale GUI in cui viene eseguito. Il modo in cui lo fai dipende dal terminale GUI che usi. Ad esempio, preferisco il terminale XFCE, che sarebbe:

Terminal -T Iftop -e iftop

Apre un nuovo terminale che esegue iftop con il titolo "Iftop". Uno screenshot può essere preso:

import -window Iftop ss.jpg

Se lo farai ogni cinque secondi, probabilmente vorrai invece aprire la finestra che esegue uno script in modo da poter riutilizzare lo stesso terminale:

count=0;
while ((1)); do
    iftop &
    pid=$!
    sleep 1  # make sure iftop is up
    count=$(($count+1))
    import -window Iftop iftop_sshot$count.jpg
    kill $pid
    sleep 5
done

Se lo script è "iftopSShot.sh", dovresti iniziare questo Terminal -T Iftop -e iftopSShot.sh -- tranne che probabilmente non stai usando Terminal . La maggior parte dei terminali GUI di Linux sono associati a specifici DE, sebbene siano applicazioni autonome che possono essere utilizzate indipendentemente. Credo che il nome del terminale predefinito su KDE sia Konsole e segue il -T e -e convegni; per GNOME è probabilmente gnome-terminal (questo potrebbe essere cambiato) e sembra usare -t e non -T .

Attenzione import per impostazione predefinita suona il campanello, che diventerà irritante, ma c'è un -silent opzione.


Tra una X ambiente:

Imposta dinamicamente il titolo del terminale:

Dal nostro script, un modo per cambiare il titolo del terminale usando le sequenze ansi:

echo -e "\033]0;Term | myApp\007";

Cattura un png in base al titolo della finestra:

Ora possiamo cercare l'id della finestra in base al titolo esatto usando wmctrl e passa l'id al import utilità:

import -window $(wmctrl -l | grep -i 'Term | myApp' | awk '{print $1}') ~/Pictures/capture.png

Crea una gif:

Esempio da modificare, fai 5 catture ogni secondo e poi convertile in una gif usando convert , in un ciclo infinito di 2 secondi.

rm -f /tmp/*png && for i in {1..5}; do import -window $(wmctrl -l | grep -i 'Term | myApp' | awk '{print $1}') /tmp/$i.png && sleep 1; done && convert -delay 200 -loop 0 /tmp/*.png animation.gif

Linux
  1. Determinare la shell nello script durante il runtime?

  2. Determinazione del percorso per lo script della shell di origine?

  3. Cancellazione della console Shell?

  4. Processi in una sessione in una shell interattiva vs in uno script?

  5. Il significato di $? In uno script di shell?

Come eseguire un comando in uno script della shell?

Esecuzione di script di shell in parallelo

Esegui lo script Python tramite crontab

Directory corrente dello script Shell?

Automatizza mysql_secure_installation con il comando echo tramite uno script di shell

Attacco script shell su server Apache, tramite un cron di origine sconosciuta