Как сделать снимок экрана графического интерфейса пользователя X11 из текстового терминала (например, tty1)

Я пытался использовать DISPLAY=:0 import -window root "$HOME/Pictures/screenshot.png" (import является частью пакета ImageMagick), но на нем просто отображается черный экран.

Я хочу сделать это так, как я хотел автоматизировать открытие приложения и делать его скриншоты на разных языках, а для смены языков мне нужно перезапустить lightdm. поэтому запустите tty, чтобы ваш скрипт продолжал работать ...

11
задан 9 December 2012 в 22:03

5 ответов

В дополнение к существующим ответам, для отображения скриншота в ASCII в терминале:

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

(Требуется x11-apps для xwd, imagemagick для convert и jp2a). .)

0
ответ дан 9 December 2012 в 22:03

Вот что сработало для меня.

chvt 7
DISPLAY=:0 import -window root "$HOME/Pictures/screenshot.png
chvt 1
0
ответ дан 9 December 2012 в 22:03

Вот решение с использованием xwd, которое доступно почти во всех установках Xorg:

 xwd -root -out screenshot.xwd

Файл screenshot.xwd можно открыть с помощью GIMP:

Для получения дополнительной информации см. http://www.x.org/wiki/UserDocumentation/GettingStarted/ .

0
ответ дан 9 December 2012 в 22:03

Попробуйте использовать затвор

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
0
ответ дан 9 December 2012 в 22:03

Сидеть на одном компьютере и делать это с другого виртуального терминала, на котором работает X-сервер, не работает.

Это объясняется там: http://www.karlrunge.com/x11vnc/faq.html#faq-linuxvc . Цитата:

Q-108: Я использую виртуальные терминалы Linux (VT) для реализации «быстрого переключения пользователей» между сеансами пользователей (например, Бетти находится на Ctrl-Alt-F7 Бобби находится на Ctrl-Alt-F8, а Сид на Ctrl-Alt-F1: они используют эти нажатия клавиш для переключения между своими сессиями.) Почему вид в средстве просмотра VNC, подключающемся к x11vnc, либо полностью черный, обновить или пиксели испортились, если X-сессия, к которой подключен x11vnc, не находится в активном VT?

Похоже, это связано с тем, как приложения (процессы X-сервера в этом случае) должны «хорошо играть», если они не находятся на активном VT (иногда называемом VC для виртуальной консоли). То есть они не должны читать с клавиатуры или мыши или управлять дисплеем видео, если у них нет активного VT. Учитывая, что кажется, что вызов XGetImage () должен в конечном итоге получить данные кадрового буфера от самого видеооборудования, было бы разумно, чтобы опрос x11vnc не работал, если сеанс X не имел активного контроля над VT.

Кажется, нет простого способа обойти это. Даже xwd (1) в этом случае не работает (попробуйте.) Что-то должно быть сделано на более низком уровне, скажем, на XFree86 / Xorg X-сервере. Кроме того, использование теневого кадрового буфера (копия видеокадрового буфера хранится в основной памяти), по-видимому, не решает проблему (последняя проверка 2007 г.).

Если на рабочей станции никто не сидит, а вы просто хотите для удаленного переключения VT на тот, который связан с вашим сеансом X (чтобы x11vnc мог правильно его опрашивать), можно использовать команду chvt (1), например "chvt 7" для VT # 7.

0
ответ дан 9 December 2012 в 22:03

Другие вопросы по тегам:

Похожие вопросы: