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

Если кто-то ищет обновленную ссылку Руководство для сервера Ubuntu »Установка.

Эта ссылка предназначена для всех выпусков LTS.

1
задан 10 December 2012 в 00:03

4 ответа

В дополнение к существующим ответам, чтобы отобразить скриншот в ASCII в терминале:

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

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

7
ответ дан 25 May 2018 в 03:33
  • 1
    Не совсем релевантно, но прохладное дополнение. – Yatharth Agarwal 25 July 2014 в 10:39
  • 2
    [F1] – gregn3 19 June 2016 в 23:48
  • 3
    Современные версии ImageMagick часто не могут вывести формат xwd из магических чисел, поэтому лучше указать входной формат явно: xwd -root -display :0 | convert xwd:- jpg:- | jp2a - --colors – Bass 16 March 2018 в 13:51

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

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

import не работает, потому что корневое окно не используется. Компостирование «обходит» его (каждое окно отображается в собственном буфере, а затем мультиплексируется на дисплей вместо старого, где все они отображаются в «корневом» окне).

Кроме того, вы должны убедиться, что VTY активен, прежде чем снимать снимок экрана. Например,

#! / Bin / bash X: 1 & amp; export DISPLAY =: 1 sleep 10 # дать время для X, чтобы начать gedit & amp; sleep 10 # дать время для приложения сделать что-то chvt 8 # гарантировать, что X-дисплей активен затвором -f -e -n -o "$ HOME / Pictures / screenshot.png" # screenshot killall xorg # завершить X
4
ответ дан 25 May 2018 в 03:33
  • 1
    Нет, все еще давая черный экран :( – Yatharth Agarwal 8 December 2012 в 22:35
  • 2
    Вы находитесь в X-сеансе (на мониторе), когда вы это делаете. Я просто попытался, и все получилось очень хорошо. Вам нужно будет войти в систему и иметь сеанс X в активном VTY. – coteyr 9 December 2012 в 06:38
  • 3
    Я хочу, чтобы сценарий, запущенный в tty, мог это сделать. – Yatharth Agarwal 9 December 2012 в 20:34
  • 4
    Да, но вы переключаетесь на сеанс X перед съемкой на экране. X :0 & sleep 50 && sudo chvt 6 && program & sleep 5 && screenshot (обратите внимание на фальшивый скрипт). – coteyr 9 December 2012 в 22:14
  • 5
    Также просто чтобы убедиться, что вы говорите то же самое, что хотите VT0 (или что-то еще), а не на экране текстовой консоли. Таким образом, вы запускаете скрипт из TTY, пытаясь снять снимок X (VTY). Это верно? – coteyr 9 December 2012 в 22:16

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

 xwd -root -out screenshot.xwd

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

Для подробнее см. http://www.x.org/wiki/UserDocumentation/GettingStarted/.

4
ответ дан 25 May 2018 в 03:33

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

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

Q-108: Я использую виртуальные терминалы Linux (VT) для реализации «быстрого переключения пользователей» между сеансами пользователей (например, Betty находится на Ctrl-Alt-F7, Bobby находится на Ctrl-Alt- F8 и Sid находятся в Ctrl-Alt-F1: они используют эти нажатия клавиш для переключения между их сеансами.) Как выглядит просмотр в средстве просмотра VNC, подключающемся к x11vnc, либо полностью черный, либо не обновляется, либо пиксели перепутаны, X-сессия x11vnc привязана к активному VT? Это, похоже, связано с тем, как приложения (в этом случае процессы X-сервера) должны «играть хорошо», если они не находятся в активном VT (иногда называемом VC для виртуальной консоли). То есть, они не должны читать с клавиатуры или мышь или управлять видеодисплеем, если у них нет активного VT. Учитывая, что, как представляется, вызов XGetImage () должен в конечном счете извлекать данные фреймбуффа из самого видеооборудования, было бы разумным, чтобы опрос x11vnc не работал, если X-сессия не имела активного управления VT. Кажется, что нет простого способа обойти это. Даже xwd (1) не работает в этом случае (попробуйте). Что-то нужно было сделать на более низком уровне, скажем, на сервере XFree86 / Xorg X. Кроме того, использование Shadow Framebuffer (копия фреймбуфера видео хранится в основной памяти), похоже, не устраняет проблему (последний раз отмечен 2007.) Если на рабочей станции никто не сидит, и вы просто хотите удаленно переключить VT поверх к той, которая связана с вашим X-сеансом (поэтому x11vnc может опросить его правильно), можно использовать команду chvt (1), например «chvt 7» для VT # 7.
0
ответ дан 25 May 2018 в 03:33

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

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