iftop
を5秒間実行し、スクリーンショットをキャプチャしてファイルに保存します。
iftop
は、ネットワークトラフィックを視覚化するための美しいプログラムですが、数秒間実行して出力をファイルにキャプチャできるバッチモードがありません。
screen
などのコマンドを使用して仮想ディスプレイを作成し、その中でiftop
を実行します。screendump
のスクリーンショットを撮るツール(screen
)を探します。これをどうやって使うかについてのアイデアはありますか?
出力が実際にウィンドウにレンダリングされない限り、screen
でこれを行うことはできないと思います。これは、おそらくscreenを使用するポイントを無効にします。ただし、ウィンドウはフォアグラウンドである必要はありません。
ImageMagickスイートには、これに使用できるimport
というユーティリティが含まれています。 import --help
で「コマンドが見つかりません」と表示された場合は、imagemagickパッケージをインストールすると、すべてのLinuxディストリビューションで利用できるようになります。
import
にはウィンドウの名前が必要です。 iftop
は端末インターフェースであるため、正しい名前を使用するためには、実行するGUI端末のタイトルを設定する必要があります。その方法は、使用するGUI端末によって異なります。たとえば、私はXFCEターミナルを好みます。
Terminal -T Iftop -e iftop
「Iftop」というタイトルでiftop
を実行している新しいターミナルを開きます。そのスクリーンショットを撮ることができます:
import -window Iftop ss.jpg
これを5秒ごとに実行する場合は、代わりにスクリプトを実行しているウィンドウを開いて、同じ端末を再利用できるようにすることをお勧めします。
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
スクリプトが「iftopSShot.sh」の場合は、おそらくTerminal
を使用していない場合を除いて、このTerminal -T Iftop -e iftopSShot.sh
を開始します。ほとんどのLinuxGUI端末は特定のDEに関連付けられていますが、それらは独立して使用できるスタンドアロンアプリケーションです。 KDEのデフォルト端末の名前はKonsole
であり、-T
および-e
の規則に従っていると思います。 GNOMEの場合はおそらくgnome-terminal
(これは変更されている可能性があります)であり、-t
ではなく-T
を使用しているようです。
import
はデフォルトでベルを鳴らし、イライラすることに注意してください。ただし、-silent
オプションがあります。
screen
はファイルにログを記録できます:
-Lは、ウィンドウの自動出力ログをオンにするように画面に指示します。
または、現在の画面のコピーをファイルに作成します。
ハードコピー[-h] [ファイル]
Writes out the currently displayed image to the file file, or, if no filename is specified, to hardcopy.n in the default directory, where n is the number of the current window. This either appends or overwrites the file if it exists. See below. If the option -h is specified, dump also the contents of the scrollback buffer.
1つの画面セッションを実行している場合は、次のコマンドを使用して現在のコンテンツを保存できます。
screen -X hardcopy
100個の個別のファイルに保存する場合、10秒ごとに1つ:
for c in {1..100}; do screen -X hardcopy /my/dir/screen-$c; sleep 10; done
いくつかのアイデア:
この記事のタイトルからこのスクリプトを使用できます: 繰り返しスクリーンショットを撮るためのスクリーンショットツール 。
#!/bin/bash
# Screenshot tool for TIMS.
#
# -------------------------
#
# By regj 2012.05
#
# -------------------------
#
# Check for config file create if needed with sane defaults then exit.
if [ ! -f $HOME/.scrotter ]; then
echo "Creating scrotter config file ${HOME}/.scrotter"
echo "scrotfldrbase=${HOME}/Desktop/scrots" > $HOME/.scrotter
echo "fontsize=14" >> $HOME/.scrotter
echo "fillcolor=white" >> $HOME/.scrotter
echo "whiteterm=yes" >> $HOME/.scrotter
echo "subw=130" >> $HOME/.scrotter
echo "subh=5" >> $HOME/.scrotter
echo "fontpath=/usr/share/fonts/dejavu/DejaVuSansMono.ttf" >> $HOME/.scrotter
if [ $? = 0 ] ; then
echo -e "Config file succesfully created. Adjust values if needed in ~/.scrotter.\nIf you use a black term background set whiteterm to no."
echo "Current values:"
cat $HOME/.scrotter
echo "Rerun scrotter with --server-id if initial run"
exit 0
else
echo "Something went wrong"
exit 1
fi
fi
# Source config file
source $HOME/.scrotter
# convert functions for white or black terminal
conv_black () {
convert -pointsize $fontsize \
-font $fontpath \
-fill $fillcolor \
-draw "text ${xyplace} \"$(date "+%Y.%m.%d %H:%M"|sed -e ' s/\"/\\\"/g' )\"" \
$scrotfldr/$srvid-$count.png $scrotfldr/$srvid-$count.png
}
conv_white () {
convert -pointsize $fontsize \
-font $fontpath \
-fill $fillcolor \
-stroke black \
-strokewidth 1 \
-draw "text ${xyplace} \"$(date "+%Y.%m.%d %H:%M"|sed -e ' s/\"/\\\"/g' )\"" \
$scrotfldr/$srvid-$count.png $scrotfldr/$srvid-$count.png
}
# Options
case $1 in
--server-id) echo "Setting srvid" ; echo $2 > /tmp/${USER}-scrot-srvid ; exit 0;;
--reset-count) echo "0" > /tmp/$USER-scrot-count ; exit 0;;
--clean-up) rm -f $scrotfldr/*.png ; rm -f /tmp/${USER}-scrot-* ; exit 0 ;;
--help) echo "Options are:
--server-id: Set servername used in test.
--reset-count: Reset counter for enumerating png's.
--clean-up: Delete png's in current serverfolder and reset counters and serverid.
--help: This info."
exit 0;;
# Uncomment below if you want to remove everything in your scrot folder with this script
#--clean-all) if [ -z $scrotfldrbase ]; then
# echo "Exiting .." ; exit 1
# fi
# echo "NB: $scrotfldrbase will be removed recursively!"
# rm -rI $scrotfldrbase/*
# rm -f /tmp/${USER}-scrot-*
# exit 0 ;;
esac
# Check if serverid is defined, use if yes
if [ -s /tmp/${USER}-scrot-srvid ]; then
srvid=$(cat /tmp/${USER}-scrot-srvid)
scrotfldr=$HOME/Desktop/scrots/$srvid
else
echo "Please set server id with --server-id option. # scrotter --server-id <servername>"
exit 1
fi
# Check if root, exit if yes.
if [ $(id -u) = 0 ]; then
echo "Do not run as root!"
exit 1
fi
# Create count file
if [ ! -f /tmp/${USER}-scrot-count ]; then
echo "0" > /tmp/$USER-scrot-count
fi
# Create Screenshot folder if not present
if [ ! -d $scrotfldr ]; then
mkdir -p $scrotfldr
fi
# Get active window ID
activewin=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | grep "window id" )
activewinid=${activewin:40}
# Get geometry of window
geowinw=$(xwininfo -id ${activewinid} | awk '/Width/ {print $2}')
geowinh=$(xwininfo -id ${activewinid} | awk '/Height/ {print $2}')
# Define X,Y placment of date text
xyplace="$(($geowinw - $subw)),$(($geowinh - $subh))"
# Get current count
count=$(cat /tmp/${USER}-scrot-count)
# Take screenshot
import -window "$activewinid" $scrotfldr/$srvid-$count.png
# Insert date stamp into screenshot use xyplace variable to adjust placement
if [ $whiteterm = yes ] ; then
conv_white
else
conv_black
fi
# Increment counter
echo $(($count+1)) > /tmp/$USER-scrot-count
上記をscrotter
というファイルに入れて、実行可能にします。初めて実行するとき:
$ ./scotter
Creating scrotter config file /home/saml/.scrotter
Config file succesfully created. Adjust values if needed in ~/.scrotter.
If you use a black term background set whiteterm to no.
Current values:
scrotfldrbase=/home/saml/Desktop/scrots
fontsize=14
fillcolor=white
whiteterm=yes
subw=130
subh=5
fontpath=/usr/share/fonts/dejavu/DejaVuSansMono.ttf
Rerun scrotter with --server-id if initial run
2回目に実行すると、使用法がわかります。
$ ./scrotter
Please set server id with --server-id option. # scrotter --server-id <servername>
次に、--server-id blah
を使用して実行し、スクリーンショットの撮影を開始します。
$ ./scrotter --server-id blah
$ ./scrotter
アクティブなウィンドウのスクリーンショットを撮ります。これは、ループ構造に変更されるか、直接変更されます。
Importコマンドを使用してスクリーンショットを撮り、必要に応じて好きなタイプのループ(for、whilteなど)でラップすることができます。このアリクル、 タイムラプススクリーンショット には、必要なものがすべて揃っています。スクリプトをcronから実行する必要はないと思いますが、他のすべては適用できるようです。
例えば:
# takes screenshot
$ import -window root -display :0 -crop 958x490+20+128 "savedfiles/screenshot_$(date +%d%m%y-%H.%M).png"
# makes a video out of a bunch of them
$ mencoder "mf://screamshots/*.png" -mf fps=10 -o test.avi -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=800