Подтвердить что ты не робот

Самый быстрый способ захвата экрана в Linux

Этот вопрос похож на этот

Самый быстрый способ захвата экрана

но для linux/X11.

Чтобы быть более конкретным, мне нужен метод для захвата пиксельных изображений одного окна (программный эквивалент экрана alt-print в окнах), запущенного на X11 diplay.

Примечания и требования:

1) Даже если новое окно помещается поверх окна, которое выполняется, пиксельное изображение должно все же указывать на исходное окно приложения без какой-либо окклюзии

2) не требуется, чтобы окно приложения отображалось пользователем, мне просто нужно сохранить пиксельные буферы/изображения для целей видео.

другие альтернативы, которые я изучил:

1) xvfb - он работает, но он делает рендеринг ЦП, который медленный и расточительство хорошего графического процессора

2) x11 внутри многих lxc - теоретически может работать, но сложно setup, и я не уверен, что он будет хорошо масштабироваться, при этом многие окна будут захватил

Предложения и идеи приветствуются

4b9b3361

Ответ 1

Это возможно, используя VirtualGL на сервере с аппаратным ускорением. В основном просто настройте сервер соответствующим образом, затем либо на том же компьютере, либо на машине в той же сети, запустите

export DISPLAY=<your xvfb display>
vglrun <your_app>

Это будет иметь следующие преимущества:

1) ваше приложение будет отображать с помощью virtualGL, которое будет использовать аппаратное обеспечение

2) VirtualGL отобразит ваш 3D-контекст на экране Xfvb, который будет отображать только 2D-виджеты в CPU

3) настроить Xvfb для рендеринга в фреймбуфер

4) прибыль!

Ответ 2

Это невозможно с чистым X11.

Вы можете получить то, что хотите, с композицией, но только на серверах, которые его поддерживают (большинство современных). Это фактически не имеет ничего общего с менеджерами окон. WM - это еще один клиент, хотя и с некоторыми особыми способностями, но они не связаны с композицией. Вы можете использовать один и тот же API компоновки.

man xcomposite должен начать работу.

Ответ 3

Вы можете использовать xwd (1), чтобы сбросить окно X11 (и xwud (1), чтобы отобразить его). ImageMagick и инструменты Netpbm знают, как бороться с формат XWD. Но это не особенно быстро. И они не будут раскрывать скрытые части окна.

Ответ 4

Я бы захватил источники для gnome-screenshot или другого существующего инструмента с открытым исходным кодом и выяснил, как они это делают.

Вы можете найти источники, которые использует Ubuntu здесь: http://packages.ubuntu.com/quantal/gnome-screenshot

Но, не забудьте проверить лицензию, прежде чем вырезать и вставить большие разделы кода!

Ответ 5

Это просто дикая догадка, но я полагаю, вы могли бы использовать x11vnc с опцией -id [windowid] (http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id) для потоковой передачи этого одиночного окно над VNC. Это покажет вам все окно с тем же самым расположением, что и на главном экране (вы можете потерять несколько всплывающих меню), даже когда оно будет закрыто. Вы можете получить координаты окна с экрана истинного X11.

Ответ 6

Xpaint - очень старая утилита X11, созданная с использованием набора виджета MIT Athena. Файл > Take Snapshot захватит прямоугольник с выбранным окном или мышью на экране.

ИЛИ

MagiCapture - утилита для захвата экрана и предварительного просмотра для X Window System. Пользователь может захватывать одно окно, одно окно с украшениями, прямоугольную область дисплея или весь экран. Пользователь может сохранить захваченное изображение в графический файл, поддерживаемый набором инструментов ImageMagick, который поддерживает большинство (если не всех) популярных графических форматов. MagiCapture использует библиотеки GLIB и GTK + для пользовательского интерфейса и библиотеки ImageMagick и GdkMagick для всей обработки графики. Требуется ImageMagick.

ИЛИ

Zscreen: - Это приложение для захвата экрана только для Windows имеет множество функций. Он захватывает снимок активного окна, выбранного окна или всего экрана. После того, как вы получите изображение, автоматически откройте его в своем графическом редакторе или загрузите его в Twitpic, YFrog, Flickr или одну из нескольких других поддерживаемых служб. ZScreen кэширует все ваши изображения, даже те, что находятся в буфере обмена, поэтому всегда есть история ваших скриншотов прямо у вас под рукой.

Ответ 7

Что вы можете сделать с помощью сложного взлома в вашей локальной сети, это использование возможности X Remote открыть ваш порт X-прослушивания, а затем с помощью env var установить экспорт в порт X-прослушивания, а затем с помощью XscreenCapture