여러 Xserver의 스크린샷

여러 Xserver의 스크린샷

데스크탑 컴퓨터의 여러 X 서버에서 동시에 스크린샷을 찍고 싶습니다.

tty1여러 사용자가 서로 다른 터미널( , tty2, tty3, ) 에 로그인하고 있으며 그들은 tty4각각 ( 및 , )을 사용하여 여러 Xserver를 시작합니다. 이런 식으로, , 를 사용하여 각각에 액세스할 수 있습니다.startx /usr/bin/openbox-session -- :1:2:3:4Ctrl+Alt+F8+F9+F10+F11

이 데스크탑에는 모니터가 하나만 있습니다.

가급적이면 를 사용하여 각 X 서버에 대한 스크린샷을 찍고 싶지만 scrot현재 시도할 때마다 검은색/빈 이미지가 나타납니다. 해당 X 서버에서 활동 중일 때만 올바른 스크린샷을 얻을 수 있습니다.

예를 들어, 열고 Ctrl+Alt+F8실행 하면 올바른 스크린샷을 얻을 수 있습니다. 올바르게 이해했다면 > 을 얻은 후에는 scrot test.png설정할 필요가 없습니다 . 하지만 달리고 가면 검은 이미지가 나타납니다.$DISPLAYCtrl+Alt+F8echo $DISPLAY:1sleep 10; scrot test.pngCtrl+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. openboxXserver와 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

관련 정보