질문
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
안에엑스환경:
터미널 제목을 동적으로 설정합니다.
우리 스크립트에는 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
두 번째로 실행하면 사용량이 표시됩니다.
$ ./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