Как сделать снимок экрана полностью затененного окна

Попробовать zcalc в zsh; если Вы уже не автоматически загрузите все функции, которые идут с zsh, то Вы должны будете autoload zcalc сначала. Покончил bc, имеет запрос, обратные ссылки $output, историю команд, научные функции, способность определить больше функций, и т.д.

Зарегистрированный в zshcontrib (1).

Оборотная сторона: все еще имеет "ints" проблемой по умолчанию, таким образом 3./5 != 3/5

7
04.04.2014, 02:45
2 ответа

Если в вашей системе уже не установлены xwd и xwud , я был бы очень удивлен, если бы вам не удалось легко установить их через диспетчер пакетов максимум за несколько секунд.

% man xwd

 NAME 
xwd - выгрузить образ X-окна 
 
СИНХРОНИЗАЦИЯ 
xwd [-debug] [-help] [ -nobdrs] [-out файл] [-xy] [-frame] [-добавить значение] 
 [-root | -id id | -name name] [-icmap] [-screen] [-silent] [-display 
display] 
 
ОПИСАНИЕ 
Xwd - это дамп окна системы X Window полезность. Xwd позволяет пользователям X 
сохранять изображения окон в специально отформатированном файле дампа. Этот файл 
затем может быть прочитан различными другими утилитами X для повторного отображения, печати, 
редактирования, форматирования, архивирования, обработки изображений и т. Д. Целевой выигрыш - 
dow выбирается щелкнув указатель в желаемом окне. Клавиатура 
звонит один раз в начале дампа и два раза, когда 
дамп завершен. 
 

Поймите, это своего рода программа для записи сеанса рабочего стола - встроен в X-сервер - он позволяет делать снимки экрана и многое другое. Но вы захотите немного прочитать документацию, прежде чем погрузиться в нее - я думаю, просто для того, чтобы ознакомиться с ней.

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

Просто пролистайте еще немного и ...

  -root Этот параметр указывает, что корневое окно должно быть выбрано 
для дампа окна, не требуя от пользователя выбора окна 
с помощью указателя. 
 {{1 }} -id id Этот параметр указывает, что окно с указанным идентификатором ресурса 
должно быть выбрано для дампа окна без 
требования, чтобы пользователь выбирал окно с помощью указателя. {{1} } 

Если вы последуете моему совету, вы также очень внимательно посмотрите на xdotool , хотя, по общему признанию, здесь он имеет ограниченное значение. Он в основном выполняет скрипты для мыши, хотя предлагает некоторый прямой интерфейс командной строки для X backend api - как ссылки @Gilles. И пользоваться им довольно просто.

С учетом всего сказанного, основная проблема заключается в том, что ваш дисплей в настоящее время занят. Если ваше окно должно оставаться невидимым, с этим можно справиться несколькими способами:хотя, я думаю, вам придется немного их попробовать, прежде чем вы их опустите. Я бы рекомендовал просто настроить ваш экран так, чтобы он был в два раза больше вашего экрана. Таким образом, вы можете просто перетащить окно за пределы экрана, и оно продолжит обновлять отображение, но за пределами экрана. Я могу сделать это с помощью инструментов nvidia, и большинство из них могут сделать это с помощью xrandr, , но, особенно в Linux, кажется, по крайней мере, по моему опыту, проблемы с отображением часто являются личными проблемами только потому, что существует так много возможных способов настроить их.

Другой способ сделать это - использовать виртуальный X-сервер, например xnest или xephyr. Эти серверы помещают весь X-сервер в окно, которое может быть фоновым или полностью отсутствовать, если вы предпочитаете. Последний раз я проверял, что было, к сожалению, некоторое время назад, они использовали xdummy-driver - и поэтому не были бы хорошим выбором для видеоигры, требующей ускорения видео. Тем не менее, я уверен, что ваши справочные страницы могут рассказать вам больше, и я могу только надеяться, что помог.

3
27.01.2020, 20:17

Вероятно, это вина игры, а не утилиты создания снимков экрана. X11 отправляет приложениям событие VisibilityNotify , чтобы сообщить им, что их окно полностью видно, частично или полностью закрыто. Когда окно полностью закрыто, большинство приложений не заботятся об обновлении своего дисплея, что экономит ресурсы. Другими словами, если никто не видит его, дерево не падает.

Я думаю, что если вы отправите игровому окну событие VisibilityNotify, чтобы сделать вид, что оно видно, то вы получите снимок экрана. Вам нужно будет отправить событие после того, как окно станет закрытым, поскольку X11 сам отправит свое обычное событие в это время. Вот непроверенный сценарий, который отправляет событие VisibilityNotify, вызовите его с аргументом VisibilityParhibitedObscured или VisibilityUnobscured . Я следую за событием MapNotify , я не знаю, полезно ли оно. Вам нужны Python и Python-xlib.

#! /usr/bin/env python
import re, sys, time
import Xlib.X, Xlib.XK, Xlib.display, Xlib.protocol

def parse_action(string):
    state = {
              '0': 0,
              '1': 1,
              '2': 2,
              'unobscured': 0,
              'partiallyobscured': 1,
              'fullyobscured': 2,
              'visibilityunobscured': 0,
              'visibilitypartiallyobscured': 1,
              'visibilityfullyobscured': 2,
             }[string.lower()]
    return state

def parse_window(display, arg):
    wid = int(arg, 0)
    return display.create_resource_object('window', wid)

def send_event(display, window, state):
    window.send_event(Xlib.protocol.event.VisibilityNotify(window=window,
                                                           state=state))
    window.send_event(Xlib.protocol.event.MapNotify(window=window,
                                                    event=window,
                                                    override=False))
    display.sync()

if __name__ == "__main__":
    display = Xlib.display.Display()
    send_event(display, parse_window(display, sys.argv[1]), parse_action(sys.argv[2]))
6
27.01.2020, 20:17

Теги

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