टेक्स्ट टर्मिनल (जैसे tty1) से X11 आधारित GUI का स्क्रीनशॉट कैसे लें?


11

मैंने उपयोग करने की कोशिश की DISPLAY=:0 import -window root "$HOME/Pictures/screenshot.png"( importइमेजमैजिक सूट का हिस्सा है), लेकिन यह सिर्फ एक काली स्क्रीन प्रदर्शित करता है।

मैं ऐसा करना चाहता हूं क्योंकि मैं एक ऐप खोलना चाहता था और विभिन्न भाषाओं में इसके स्क्रीनशॉट ले रहा था, और भाषाओं को बदलने के लिए, मुझे lightdm को पुनरारंभ करना होगा। इसलिए, एक tty पर दौड़ें ताकि आपकी स्क्रिप्ट जारी रहे ...

जवाबों:


10

मौजूदा उत्तरों के अलावा, टर्मिनल में ASCII में स्क्रीनशॉट प्रदर्शित करने के लिए:

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

(आवश्यक है x11-appsके लिए xwd, imagemagickके लिए convertऔर jp2a।)


बिल्कुल प्रासंगिक नहीं है, लेकिन शांत इसके अलावा।
यत्रार्थ अग्रवाल

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

2
आधुनिक इमेजमैजिक संस्करण अक्सर xwdजादू संख्याओं से प्रारूप का अनुमान नहीं लगा सकते हैं , इसलिए इनपुट प्रारूप को स्पष्ट रूप से निर्दिष्ट करना बेहतर है: xwd -root -display :0 | convert xwd:- jpg:- | jp2a - --colors
बास

मेरे लिए: 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

7

यहाँ समाधान का उपयोग किया गया है xwd, जो लगभग सभी Xorg प्रतिष्ठानों में उपलब्ध है:

 xwd -root -out screenshot.xwd

screenshot.xwdफ़ाइल GIMP के साथ खोला जा सकता है:

अधिक जानकारी के लिए http://www.x.org/wiki/UserDocumentation/GettingStarted/ देखें ।



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

नहीं, अभी भी एक काली स्क्रीन दे रही है :(
यत्रार्थ अग्रवाल

जब आप ऐसा करते हैं तो आप एक्स सेशन (एक मॉनिटर पर) में होते हैं। मैंने बस कोशिश की और इसने काफी अच्छा काम किया। आपको लॉग इन करने की आवश्यकता होगी और सक्रिय वीटीवाई में एक्स सत्र होगा।
coteyr

मैं चाहता हूं कि tty में लॉन्च की गई स्क्रिप्ट ऐसा करने में सक्षम हो।
यतार्थ अग्रवाल

हां, लेकिन क्या आप स्क्रीन शॉट लेने से पहले एक्स सेशन पर जाते हैं। X :0 & sleep 50 && sudo chvt 6 && program & sleep 5 && screenshot(नोटिस पूरी तरह से नकली स्क्रिप्ट)।
coteyr

यह भी सुनिश्चित करने के लिए कि आप वही बात कर रहे हैं जो आप चाहते हैं VT0 (या कुछ) पाठ कंसोल का स्क्रीन शॉट नहीं। तो अपने टीटीवाई से स्क्रिप्ट चलाने के लिए स्क्रीन शॉट एक्स (वीटीवाई) की कोशिश कर रहा है। क्या वो सही है?
coteyr

0

एक ही कंप्यूटर पर बैठना और X सर्वर के चलने से भिन्न वर्चुअल टर्मिनल से करना काम नहीं करता है।

यह वहां समझाया गया है: http://www.karlrunge.com/x11vnc/faq.html#faq-linuxvc । उद्धरण:

Q-108: मैं लिनक्स वर्चुअल टर्मिनलों (वीटी) का उपयोग उपयोगकर्ताओं के सत्रों के बीच 'तेज उपयोगकर्ता स्विचिंग' को लागू करने के लिए करता हूं (जैसे बेटी Ctrl-Alt-F7 पर है, बॉबी Ctrl-Alt-F8 पर है, और सिड Ctrl-Alt पर है -F1: वे अपने सत्रों के बीच स्विच करने के लिए उन कीस्ट्रोक्स का उपयोग करते हैं।) X11vnc से कनेक्ट होने वाले VNC व्यूअर में दृश्य या तो पूरी तरह से काला है, अपडेट नहीं करता है, या पिक्सेल गड़बड़ नहीं करता है जब तक कि X सत्र x11vnc संलग्न नहीं होता है। सक्रिय VT

ऐसा लगता है कि अनुप्रयोगों के साथ क्या करना है (इस मामले में एक्स सर्वर प्रक्रिया) को "अच्छी तरह से खेलना चाहिए" यदि वे सक्रिय वीटी पर नहीं हैं (कभी-कभी वर्चुअल कंसोल के लिए वीसी कहा जाता है।) यही है, उन्हें कीबोर्ड से नहीं पढ़ना चाहिए। या जब तक उनके पास सक्रिय वीटी न हो, तब माउस या वीडियो डिस्प्ले का प्रबंधन करें। यह देखते हुए कि यह XGetImage () कॉल प्रतीत होता है अंततः वीडियो हार्डवेयर से फ्रेमबफ़र डेटा को पुनः प्राप्त करना होगा, यह समझ में आएगा कि x11vnc का मतदान तब तक काम नहीं करेगा जब तक कि एक्स सत्र में वीटी का सक्रिय नियंत्रण नहीं था।

इस के आसपास काम करने का एक आसान तरीका नहीं लगता है। यहां तक ​​कि xwd (1) इस मामले में काम नहीं करता है (इसे आज़माएं।) कुछ को निचले स्तर पर करने की आवश्यकता होगी, XFree86 / Xorg X सर्वर में कहें। इसके अलावा, शैडो फ्रेमबफ़र (वीडियो फ्रेमबफ़र की एक कॉपी को मुख्य मेमोरी में रखा जाता है) का उपयोग करके समस्या को ठीक करने के लिए प्रकट नहीं होता है (अंतिम बार 2007 में चेक किया गया।)

यदि कोई वर्कस्टेशन पर नहीं बैठा है और आप बस अपने एक्स सेशन से जुड़े वीटी को दूरस्थ रूप से स्विच करना चाहते हैं (तो x11vnc इसे सही तरीके से पोल कर सकता है), एक chvt (1) कमांड का उपयोग कर सकता है, जैसे "chvt 7" वीटी # 7 के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.