Bir metin terminalinden (tty1 gibi) X11 tabanlı bir GUI'nin ekran görüntüsü nasıl alınır?


11

Kullanmayı denedim DISPLAY=:0 import -window root "$HOME/Pictures/screenshot.png"( importImageMagick paketinin bir parçası), ancak bu sadece siyah bir ekran görüntüler.

Bir uygulamayı açmayı ve farklı dillerde ekran görüntüleri almayı otomatikleştirmek istediğim için bunu yapmak istiyorum ve dilleri değiştirmek için lightdm'yi yeniden başlatmam gerekiyor. bu nedenle, bir tty üzerinde çalıştırın böylece betiğiniz çalışmaya devam ediyor ...

Yanıtlar:


10

Mevcut cevaplara ek olarak, ekran görüntüsünü terminalde ASCII'de görüntülemek için:

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

(Gerektirir x11-appsiçin xwd, imagemagickiçin convertve jp2a.)


Tam olarak alakalı değil, ama harika bir ekleme.
Yatharth Agarwal

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

2
Modern ImageMagick sürümleri genellikle xwdsihirli sayılardan biçimi çıkartamaz , bu nedenle giriş biçimini açıkça belirtmek daha iyidir: xwd -root -display :0 | convert xwd:- jpg:- | jp2a - --colors
Bass

Benim için:, xwd -name "$win_name" | convert xwd:- /tmp/"$win_name".pngneredewin_name=$(xwininfo -tree -root | grep 'The Window Name Im Looking For' | awk -F\" '{print $2}')
Avio


5

İşte benim için işe yarayan.

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

5

Deklanşörü kullanmayı deneyin

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

Kök pencere kullanılmadığı için içe aktarma çalışmaz. Kompozisyonu "bypass eder" (her pencere kendi tamponunda işlenir ve daha sonra eski yolun yerine ekrana "çoğaltılır").

Ayrıca, ekran görüntüsünü almadan önce VTY'nin etkin olduğundan emin olmanız gerekir. Yani mesela,

#!/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

Hayır, hala siyah bir ekran veriyor :(
Yatharth Agarwal

Bunu yaptığınızda X oturumunda (monitörde) misiniz? Sadece denedim ve oldukça iyi çalıştı. Giriş yapmanız ve etkin VTY'de X oturumunun olması gerekir.
coteyr

Bunu yapabilmek için tty'de başlatılan bir senaryo istiyorum.
Yatharth Agarwal

Evet, ancak ekran görüntüsünü almadan önce X oturumuna geçiyor musunuz? X :0 & sleep 50 && sudo chvt 6 && program & sleep 5 && screenshot(tamamen sahte senaryoya dikkat edin).
coteyr

Ayrıca sadece aynı şeyi konuştuğunuzdan emin olmak için VT0 (veya bir şey) bir metin konsolunun ekran görüntüsü değil. Yani senaryoyu ekran görüntüsü X (VTY) görüntülemeye çalışan bir TTY'den çalıştırıyorsunuz. Bu doğru mu?
coteyr

0

Aynı bilgisayarda oturmak ve bunu X sunucusunun çalıştığından farklı bir sanal terminalden yapmak çalışmıyor.

Burada açıklanmıştır: http://www.karlrunge.com/x11vnc/faq.html#faq-linuxvc . Alıntı:

S-108: Kullanıcıların oturumları arasında 'Hızlı Kullanıcı Değiştirme' uygulamak için Linux Sanal Terminalleri (VT) kullanıyorum (örneğin, Betty Ctrl-Alt-F7'de, Bobby Ctrl-Alt-F8'de ve Sid Ctrl-Alt'ta -F1: oturumları arasında geçiş yapmak için bu tuş vuruşlarını kullanırlar.) X11vnc'ye bağlanan bir VNC görüntüleyicide görünüm tamamen siyah, güncellenmiyor veya X oturumu x11vnc bağlı olmadığı sürece karışan pikseller aktif VT?

Bunun, uygulamaların (bu durumda X sunucusu işlemleri) etkin VT'de değilse (bazen sanal konsol için VC olarak da adlandırılır) nasıl "güzel oynaması" gerektiği ile ilgili olduğu anlaşılmaktadır. veya etkin VT'ye sahip olmadıkları sürece fare veya video görüntüsünü yönetin. Görünüşe göre, XGetImage () çağrısının sonuçta video donanımının kendisinden framebuffer verilerini alması gerektiği göz önüne alındığında, X oturumu VT'nin aktif kontrolü olmadıkça x11vnc'nin yoklaması işe yaramazdı.

Bu sorunu çözmek için kolay bir yol gibi görünmüyor. Xwd (1) bile bu durumda çalışmaz (deneyin.) XFree86 / Xorg X sunucusunda bir şey daha düşük bir düzeyde yapılmalıdır. Ayrıca, Gölge Framebuffer'ın kullanılması (video framebuffer'ın bir kopyası ana bellekte tutulur) sorunu çözmez (son kontrol 2007).

İş istasyonunda hiç kimse oturmuyorsa ve VT'yi X oturumunuzla ilişkili olana uzaktan değiştirmek istiyorsanız (böylece x11vnc doğru şekilde kirletebilir), chvt (1) komutunu kullanabilirsiniz, örneğin "chvt 7" VT # 7 için.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.