Làm cách nào để chụp ảnh màn hình của GUI dựa trên X11 từ thiết bị đầu cuối văn bản (chẳng hạn như tty1)?


11

Tôi đã thử sử dụng DISPLAY=:0 import -window root "$HOME/Pictures/screenshot.png"( importlà một phần của bộ ImageMagick), nhưng nó chỉ hiển thị một màn hình đen.

Tôi muốn làm điều này vì tôi muốn tự động mở một ứng dụng và chụp ảnh màn hình của nó bằng các ngôn ngữ khác nhau và để thay đổi ngôn ngữ, tôi cần khởi động lại lightdm. do đó, chạy trên tty để tập lệnh của bạn tiếp tục chạy ...

Câu trả lời:


10

Ngoài các câu trả lời hiện có, để hiển thị ảnh chụp màn hình trong ASCII trong thiết bị đầu cuối:

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

(Yêu cầu x11-appscho xwd, imagemagickcho convertjp2a.)


Không chính xác có liên quan, nhưng bổ sung mát mẻ.
Yatharth Agarwal

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

2
Các phiên bản ImageMagick hiện đại thường không thể suy ra xwdđịnh dạng từ các số ma thuật, vì vậy tốt hơn là chỉ định rõ định dạng đầu vào: xwd -root -display :0 | convert xwd:- jpg:- | jp2a - --colors
Bass

Dành cho tôi : xwd -name "$win_name" | convert xwd:- /tmp/"$win_name".png, ở đâuwin_name=$(xwininfo -tree -root | grep 'The Window Name Im Looking For' | awk -F\" '{print $2}')
Avio


5

Đây là những gì làm việc cho tôi.

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

5

Hãy thử sử dụng màn trập

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

Nhập sẽ không hoạt động, vì cửa sổ gốc không được sử dụng. Kết hợp "bỏ qua" nó (mỗi cửa sổ được hiển thị trong bộ đệm riêng sau đó được ghép vào màn hình, thay vì cách cũ, nơi tất cả chúng được hiển thị trên cửa sổ "gốc").

Ngoài ra, bạn cần đảm bảo VTY đang hoạt động trước khi bạn chụp ảnh màn hình. Ví dụ,

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

Không, vẫn cho một màn hình đen :(
Yatharth Agarwal

Bạn có đang ở phiên X (trên màn hình) khi bạn làm việc này không. Tôi chỉ cần thử và nó hoạt động khá tốt. Bạn sẽ cần phải đăng nhập và có phiên X trong VTY đang hoạt động.
coteyr

Tôi muốn một kịch bản được đưa ra trong tty để có thể làm điều này.
Yatharth Agarwal

Có, nhưng bạn có chuyển sang phiên X trước khi chụp ảnh màn hình không. X :0 & sleep 50 && sudo chvt 6 && program & sleep 5 && screenshot(thông báo kịch bản hoàn toàn giả).
coteyr

Ngoài ra, chỉ để đảm bảo rằng bạn đang nói điều tương tự mà bạn muốn VT0 (hoặc một cái gì đó) không phải là ảnh chụp màn hình của bảng điều khiển văn bản. Vì vậy, việc bạn chạy tập lệnh từ TTY đang cố gắng chụp màn hình X (VTY). Đúng không?
coteyr

0

Ngồi trên cùng một máy tính và thực hiện nó từ một thiết bị đầu cuối ảo khác với máy chủ X đang chạy không hoạt động.

Nó được giải thích ở đó: http://www.karlrunge.com/x11vnc/faq.html#faq-linuxvc . Trích dẫn:

Q-108: Tôi sử dụng Thiết bị đầu cuối ảo Linux (VT) để triển khai 'Chuyển đổi người dùng nhanh' giữa các phiên của người dùng (ví dụ: Betty ở trên Ctrl-Alt-F7, Bobby ở trên Ctrl-Alt-F8 và Sid là trên Ctrl-Alt -1 VT hoạt động?

Điều này dường như liên quan đến cách các ứng dụng (máy chủ X xử lý trong trường hợp này) phải "chơi độc đáo" nếu chúng không có trên VT hoạt động (đôi khi được gọi là VC cho bảng điều khiển ảo.) Đó là, chúng không nên đọc từ bàn phím hoặc chuột hoặc quản lý hiển thị video trừ khi chúng có VT hoạt động. Do nó xuất hiện lệnh gọi XGetImage () cuối cùng phải lấy dữ liệu bộ đệm khung từ chính phần cứng video, việc bỏ phiếu của x11vnc sẽ không hoạt động trừ khi phiên X có kiểm soát hoạt động của VT.

Dường như không có một cách dễ dàng để giải quyết vấn đề này. Ngay cả xwd (1) cũng không hoạt động trong trường hợp này (hãy thử nó.) Một cái gì đó sẽ cần phải được thực hiện ở mức thấp hơn, giả sử trong máy chủ XFree86 / Xorg X. Ngoài ra, sử dụng Shadow Framebuffer (bản sao của bộ đệm khung video được giữ trong bộ nhớ chính) dường như không khắc phục được sự cố (kiểm tra lần cuối năm 2007)

Nếu không có ai ngồi ở máy trạm và bạn chỉ muốn chuyển VT từ xa sang phiên được liên kết với phiên X của bạn (vì vậy x11vnc có thể thăm dò chính xác), người ta có thể sử dụng lệnh chvt (1), ví dụ: "chvt 7" cho VT # 7.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.