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

7

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

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

    
задан Yatharth Agarwal 08.12.2012 в 16:04
источник

5 ответов

3

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

chvt 7
DISPLAY=:0 import -window root "$HOME/Pictures/screenshot.png
chvt 1
    
ответ дан Yatharth Agarwal 09.12.2012 в 17:31
источник
6

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

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

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

    
ответ дан Niklas 24.07.2014 в 10:20
источник
4

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

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

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

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

  

#! / Bin / Баш
  X: 1 & amp;
  export DISPLAY =: 1
  спать 10 # дать время для X, чтобы начать -   gedit & amp;
  спать 10 # дать время для приложения сделать что-то
  chvt 8 # гарантируют, что дисплей X активен
  shutter -f -e -n -o "$ HOME / Картинки / screenshot.png" # screenshot
  killall xorg # terminate X

    
ответ дан coteyr 08.12.2012 в 16:27
источник
4

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

 xwd -root -out screenshot.xwd

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

Подробнее см. Ссылка .

    
ответ дан rendon 03.12.2013 в 18:27
источник
0

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

Здесь объясняется: Ссылка . Цитата:

  

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.

    
ответ дан Golar Ramblar 09.09.2015 в 07:11
источник

Ознакомьтесь с другими вопросами по меткам