Provavelmente é culpa do jogo, não por culpa do utilitário de captura de tela. O X11 envia aos aplicativos um evento VisibilityNotify para informar que sua janela está totalmente visível, parcialmente obscurecido ou totalmente obscurecido. Quando a janela está totalmente obscurecida, a maioria dos aplicativos não se incomoda em atualizar sua exibição, o que economiza recursos. Em outras palavras, se ninguém está lá para vê-lo, a árvore não cai.
Acho que, se você enviar para a janela do jogo um evento VisibilityNotify para fingir que é visível, você verá sua captura de tela. Você precisará enviar o evento depois que a janela ficar obscura, já que o próprio X11 enviará seu evento normal naquele momento. Aqui é um script não testado que envia um evento VisibilityNotify, chame-o com o argumento VisibilityPartiallyObscured
ou VisibilityUnobscured
. Eu sigo com um evento MapNotify
, não sei se é útil. Você precisa do Python e do 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]))