Самый быстрый способ захвата экрана в Linux
Этот вопрос похож на этот
Самый быстрый способ захвата экрана
но для linux/X11.
Чтобы быть более конкретным, мне нужен метод для захвата пиксельных изображений одного окна (программный эквивалент экрана alt-print в окнах), запущенного на X11 diplay.
Примечания и требования:
1) Даже если новое окно помещается поверх окна, которое выполняется, пиксельное изображение должно все же указывать на исходное окно приложения без какой-либо окклюзии
2) не требуется, чтобы окно приложения отображалось пользователем, мне просто нужно сохранить пиксельные буферы/изображения для целей видео.
другие альтернативы, которые я изучил:
1) xvfb - он работает, но он делает рендеринг ЦП, который медленный и
расточительство хорошего графического процессора
2) x11 внутри многих lxc - теоретически может работать, но сложно
setup, и я не уверен, что он будет хорошо масштабироваться, при этом многие окна будут
захватил
Предложения и идеи приветствуются
Ответы
Ответ 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