
데스크탑 컴퓨터의 여러 X 서버에서 동시에 스크린샷을 찍고 싶습니다.
tty1
여러 사용자가 서로 다른 터미널( , tty2
, tty3
, ) 에 로그인하고 있으며 그들은 tty4
각각 ( 및 , )을 사용하여 여러 Xserver를 시작합니다. 이런 식으로, , 를 사용하여 각각에 액세스할 수 있습니다.startx /usr/bin/openbox-session -- :1
:2
:3
:4
Ctrl+Alt+F8
+F9
+F10
+F11
이 데스크탑에는 모니터가 하나만 있습니다.
가급적이면 를 사용하여 각 X 서버에 대한 스크린샷을 찍고 싶지만 scrot
현재 시도할 때마다 검은색/빈 이미지가 나타납니다. 해당 X 서버에서 활동 중일 때만 올바른 스크린샷을 얻을 수 있습니다.
예를 들어, 열고 Ctrl+Alt+F8
실행 하면 올바른 스크린샷을 얻을 수 있습니다. 올바르게 이해했다면 > 을 얻은 후에는 scrot test.png
설정할 필요가 없습니다 . 하지만 달리고 가면 검은 이미지가 나타납니다.$DISPLAY
Ctrl+Alt+F8
echo $DISPLAY
:1
sleep 10; scrot test.png
Ctrl+Alt+F7
각 터미널에서 동시에 여러 스크린샷을 찍는 방법은 무엇입니까?
나에게 도움이 된 것은 이 솔루션의 유일한 문제점은 매우 빠른 명령을 실행할 때 X만큼 빠르게 응답하지 않는다는 Xephyr
것입니다 .xdotool
나중에 참고할 수 있도록 4명의 사용자와 터미널 각각에 대해 내가 수행한 작업은 다음과 같습니다.
에서는 ~/.profile
시스템이 시작된 후 각 사용자가 자동으로 로그인하도록 설정했습니다. 예를 들면 다음과 같습니다.
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
sleep 30 # for some reason it crashes if I do not let
# it sleep for a while, not necessarily so long.
# I guess it has to do with my "normal" X at DISPLAY=:0 .
# Thus for tty2 I let it sleep 40 seconds,
# for tty3 50 seconds and so on.
startx
fi
에서 ~/.Xsession
저는 Xserver/client(블랙박스 포함)와 Xepyr(오픈박스 포함)을 다음과 같이 시작했습니다.
Xephyr -fullscreen -screen 1920x1200 :11 &
exec blackbox &
sleep 3 # Perhaps sleeping is redundant.
DISPLAY=:11 /usr/bin/openbox-session
내가 바라는 것은 "최종" 창 관리자입니다 openbox-session
. openbox
Xserver와 Xserver를 동시에 사용 하고 싶지만 Xephyr
작동 exec openbox & DISPLAY=:11 /usr/bin/openbox-session
이 중단되고 exec openbox & DISPLAY=:11 /usr/bin/openbox
작동하지 않습니다.
이렇게 하면 사용자는 :11
모니터에 표시되는 동안 스크린샷을 찍을 수 있습니다 :0
. (또는 :13
등 :14
).
나는 그것을 시도하지 않았지만 XVnc
, Xephyr
내가 틀렸다면 정정해 주십시오.
답변1
방법 #1 - xwd 사용
명령줄 도구를 사용하여 xwd
다음과 같이 X 디스플레이를 가져올 수 있습니다.
$ xwd -display :1 -root -out 1.xwd
다음과 같이 1부터 4까지 반복할 수 있습니다.
$ for i in {1..4};do xwd -display :$i -root $i.xwd; done
노트:결과 .xwd
파일은 특별한 유형의 X Windows 덤프 파일입니다.
$ file 1.xwd
1.xwd: XWD X Window Dump image data, "xwdump", 4160x1440x24
xwud
다음과 같이 표시 할 수 있습니다 .
$ xwud -in 1.xwd
또는 ImageMagick의 display
명령을 사용하여 볼 수 있습니다.
$ display 1.xwd
방법 #2 - 가져오기 사용
ImagMagick의 import
명령을 사용하여 유사한 작업을 수행할 수도 있습니다.
$ import -window root -display :0.0 -screen /tmp/0.png
방법 #3 - scrot 사용
또는 @mikeserv가 댓글에서 제안한 대로 Active X 디스플레이를 올바르게 찾을 수 $DISPLAY
있도록 설정해 보세요.scrot
$ DISPLAY=:1 scrot 1.png
이것은 다음과 같이 반복될 수 있습니다:
$ for i in {1..4};do DISPLAY=:$i scrot $i.png; done
인용하다
답변2
질문의 질문에 대한 나의 이해는 다음과 같습니다.
당신은텍스트 콘솔 tty,
따라서 X는 스크린샷 명령을 실행 중인 tty에서 실행되고 있지 않습니다.당신은 실행할 수 있습니다명령줄 스크린샷X를 누르면 명령이 표시됩니다.
당신은표시하려면 X를 지정하세요.와 같은 스크린샷 명령의 경우
DISPLAY=:2 scrot out.png
.스크린샷 명령이 수행하는 작업은 다음과 같습니다.당신에게 오류를주지 않을 것입니다
그러나 출력으로 검은 이미지가 나타납니다..
문제는 X 서버가 일부 이미지 버퍼에 이미지를 그리지 않고 해당 빈 버퍼에서 스크린샷을 가져오는 것일 수 있습니다. 그러나 예를 들어 compiz
페인트가 아닌 복합 창 관리자일 수도 있습니다 . 적어도 단일 창을 캡처하는 경우 이것이 문제일 수 있습니다. 나는 합성되지 않은 창 관리자를 사용해 볼 가치가 있다고 생각합니다 metacity
.
그래도 문제가 해결되지 않으면 완전히 다른 접근 방식이 있습니다.
하나의 모니터에서 모든 X 서버를 중첩된 X 서버로 실행합니다. 중첩된 각 X 서버는 창에 화면 출력을 표시합니다. 그런 다음 중첩된 디스플레이의 전체 화면 스크린샷을 만들거나 기본 디스플레이의 창 스크린샷을 만들 수 있습니다.
중첩된 X 서버 구현으로서 Xephyr
최신인 것 같습니다. 더 오래된 Xnest
것들도 있고 Xvfb
:
~에서man Xephyr
:
NAME
Xephyr - X server outputting to a window on a pre-existing X display
DESCRIPTION
Xephyr is a kdrive server that outputs to a window on a pre-existing "host" X dis‐
play. Think Xnest but with support for modern extensions like composite, damage
and randr.
Unlike Xnest which is an X proxy, i.e. limited to the capabilities of the host X
server, Xephyr is a real X server which uses the host X server window as "frame‐
buffer" via fast SHM XImages.
비슷한 방식으로 Xvnc(vnc4server 패키지에 있음)를 사용하여 추가로 VNC 프로토콜을 통한 액세스를 제공할 수 있습니다.
~에서Xvnc4
:
NAME
Xvnc - the X VNC server
DESCRIPTION
Xvnc is the X VNC (Virtual Network Computing) server. It is based on a standard X
server, but it has a "virtual" screen rather than a physical one. X applications
display themselves on it as if it were a normal X display, but they can only be
accessed via a VNC viewer - see vncviewer(1).
So Xvnc is really two servers in one. To the applications it is an X server, and to
the remote VNC users it is a VNC server. By convention we have arranged that the
VNC server display number will be the same as the X server display number, which
means you can use eg. snoopy:2 to refer to display 2 on machine "snoopy" in both
the X world and the VNC world.
( Ubuntu에서는 Xvnc
패키지로 사용 가능 )vnc4server