質問
5秒間実行し、iftop
スクリーンショットをキャプチャしてファイルとして保存します。
iftop
はネットワークトラフィックを視覚化する素晴らしいプログラムですが、数秒間実行して出力をファイルにキャプチャするバッチモードはありません。
だから私の考えは
screen
仮想ディスプレイの作成や実行などのコマンドを使用してくださいiftop
。screendump
スクリーンショットを撮るツール()を見つけますscreen
。
私は何をすべきか知っていますか?
答え1
出力が実際にウィンドウでレンダリングされない限り、これを行うことはできないと思います。screen
これにより、画面を使用するポイントが失われる可能性があります。しかし、窓が前景にある必要はありません。
これイメージマジシャンこのスイートには、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 -T Iftop -e iftopSShot.sh
。ただし、そうでない場合がありますTerminal
。ほとんどのLinux GUI端末は、独立して使用できるスタンドアロンアプリケーションですが、特定のDEに関連付けられています。私はKDEのデフォルトの端末名があると思います。これはGNOMEの場合と規則Konsole
に従い(変更された可能性があります)andを使用していないようです。-T
-e
gnome-terminal
-t
-T
デフォルトではベルが鳴りますがimport
、これは迷惑ですが、オプションがあります-silent
。
答え2
screen
ファイルに書き込むことができます:
-Lは、Windowsの自動出力ロギングをオンにするように画面に指示します。
または、現在の画面をファイルにコピーします。
ハードコピー[-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.
screenセッションを実行している場合は、次のコマンドを使用して現在の内容を保存できます。
screen -X hardcopy
100個の個別ファイルを10秒ごとに1つずつ保存するには、次の手順を実行します。
for c in {1..100}; do screen -X hardcopy /my/dir/screen-$c; sleep 10; done
答え3
中X環境:
端末のタイトルを動的に設定します。
私たちのスクリプトには、ansiシーケンスを使用して端末のタイトルを変更する方法があります。
echo -e "\033]0;Term | myApp\007";
ウィンドウタイトルでpngをキャプチャする:
これで、正しいタイトルを使用してウィンドウIDを検索し、wmctrl
そのIDをimport
ユーティリティに渡すことができます。
import -window $(wmctrl -l | grep -i 'Term | myApp' | awk '{print $1}') ~/Pictures/capture.png
GIFを作成する:
convert
調整の例は、毎秒5つのキャプチャを実行してから、2秒の無限ループを使用してそれをgifに変換することです。
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
答え4
いくつかのアイデア:
この資料の次のタイトルのスクリプトを使用できます。繰り返しスクリーンショット用のキャプチャツール。
#!/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>
ここでaを使って実行し、
--server-id blah
スクリーンショットを撮り始めます。$ ./scrotter --server-id blah $ ./scrotter
アクティブウィンドウのスクリーンショットを撮ります。これをループ構造に変更するか、自分で修正してみてください!
インポートコマンドを使用してスクリーンショットを撮り、必要に応じて必要なループ(for、whileなど)にラップできます。この記事は、タイムラプス写真のスクリーンショット、必要なすべてがあります。スクリプトが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