텍스트 터미널 (예 : tty1)에서 X11 기반 GUI의 스크린 샷을 만드는 방법은 무엇입니까?


11

DISPLAY=:0 import -window root "$HOME/Pictures/screenshot.png"( importImageMagick 제품군의 일부)를 사용해 보았지만 검은 화면 만 표시됩니다.

앱을 열고 다른 언어로 스크린 샷을 찍고 언어를 변경하려면 lightdm을 다시 시작해야 하므로이 작업을 수행하고 싶습니다. 따라서 tty에서 실행하면 스크립트가 계속 실행됩니다.

답변:


10

기존 답변 외에도 터미널에서 스크린 샷을 ASCII로 표시하려면 다음을 수행하십시오.

xwd -root -display :0 | convert - jpg:- | jp2a - --colors

(요구 x11-apps에 대해 xwd, imagemagick에 대해 convert하고 jp2a).


정확히 관련이 없지만 멋진 추가.
Yatharth Agarwal

1
xwd -root -display :0 | convert - jpg:- > screenshot.jpg
gregn3 2016 년

2
현대의 ImageMagick 버전은 종종 xwd마법 번호 에서 형식을 유추 할 수 없으므로 입력 형식을 명시 적으로 지정하는 것이 좋습니다. xwd -root -display :0 | convert xwd:- jpg:- | jp2a - --colors
Bass

나를 위해 : xwd -name "$win_name" | convert xwd:- /tmp/"$win_name".png어디에서win_name=$(xwininfo -tree -root | grep 'The Window Name Im Looking For' | awk -F\" '{print $2}')
Avio


5

여기 나를 위해 일한 것이 있습니다.

chvt 7
DISPLAY=:0 import -window root "$HOME/Pictures/screenshot.png
chvt 1

5

셔터를 사용해보십시오

DISPLAY=:0 shutter -f -e -n -o "$HOME/Pictures/screenshot.png"

루트 창이 사용 중이 아니므로 가져 오기가 작동하지 않습니다. 컴 포지 팅은 "바이 패스"합니다 (각 윈도우는 자체 버퍼로 렌더링 된 다음 이전 방식 대신 디스플레이에 멀티플렉싱되어 "루트"윈도우에서 모두 렌더링 됨).

또한 스크린 샷을 찍기 전에 VTY가 활성화되어 있는지 확인해야합니다. 예를 들어

#!/bin/bash  
X :1 &  
export DISPLAY=:1  
sleep 10 # give time for X to start  
gedit &  
sleep 10 # give time for app to do something  
chvt 8  # ensure the X display is active  
shutter -f -e -n -o "$HOME/Pictures/screenshot.png" # screenshot  
killall xorg # terminate X

아니, 아직도 검은 화면 :( 제공
Yatharth 아가 왈

이 작업을 수행 할 때 X 세션 (모니터)에 있습니까? 방금 시도했는데 꽤 잘 작동했습니다. 로그인해야하고 활성 VTY에 X 세션이 있어야합니다.
coteyr

tty에서 시작된 스크립트 가이 작업을 수행하기를 원합니다.
Yatharth Agarwal

예. 그러나 스크린 샷을 찍기 전에 X 세션으로 전환합니까? X :0 & sleep 50 && sudo chvt 6 && program & sleep 5 && screenshot(완전히 가짜 스크립트입니다).
coteyr

또한 텍스트 콘솔의 스크린 샷이 아닌 VT0 (또는 다른 것)과 동일한 것을 말하고 있는지 확인하십시오. 그래서 당신은 스크린 샷 X (VTY)를 시도하는 TTY에서 스크립트를 실행합니다. 그 맞습니까?
coteyr 2016

0

동일한 컴퓨터에 앉아서 X 서버가 실행중인 것과 다른 가상 터미널에서 작업하는 것은 작동하지 않습니다.

http://www.karlrunge.com/x11vnc/faq.html#faq-linuxvc에 설명되어 있습니다. 인용문:

Q-108 : Linux 가상 터미널 (VT)을 사용하여 사용자 세션간에 '빠른 사용자 전환'을 구현합니다 (예 : Betty는 Ctrl-Alt-F7, Bobby는 Ctrl-Alt-F8, Sid는 Ctrl-Alt -F1 : 키 입력을 사용하여 세션 간을 전환합니다.) x11vnc에 연결하는 VNC 뷰어의보기가 완전히 검은 색이거나 업데이트되지 않거나 X 세션 x11vnc가 연결되어 있지 않으면 픽셀이 엉망이되는 방법 활성 VT?

이것은 응용 프로그램 (이 경우 X 서버 프로세스)이 활성 VT에 있지 않은 경우 (가상 콘솔의 경우 VC라고도 함) 어떻게 "잘 작동"해야하는지와 관련이있는 것 같습니다. 즉, 키보드에서 읽지 않아야합니다 VT가 활성화되어 있지 않으면 마우스 또는 비디오 디스플레이를 관리합니다. XGetImage () 호출이 궁극적으로 비디오 하드웨어 자체에서 프레임 버퍼 데이터를 검색해야한다고 가정하면 X 세션이 VT를 적극적으로 제어하지 않으면 x11vnc의 폴링이 작동하지 않는 것이 좋습니다.

이 문제를 해결하는 쉬운 방법이없는 것 같습니다. 이 경우 xwd (1)조차도 작동하지 않습니다 (시도하십시오). XFree86 / Xorg X 서버와 같이 더 낮은 레벨에서 무언가를 수행해야합니다. 또한 섀도 프레임 버퍼 (비디오 프레임 버퍼의 사본이 주 메모리에 보관 됨)를 사용해도 문제가 해결되지 않습니다 (마지막으로 확인한 2007).

아무도 워크 스테이션에 앉아 있지 않고 VT를 X 세션과 연결된 것으로 원격으로 전환하려는 경우 (x11vnc가 올바르게 폴링 할 수 있음) chvt (1) 명령을 사용할 수 있습니다 (예 : "chvt 7"). VT # 7.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.