Ich habe ein Spiel im Hintergrund, aber ich möchte Screenshots des Fensters machen, das nicht sichtbar ist. Anscheinend müssen alle Screenshot-Dienstprogramme für X11 das Fenster sichtbar haben. Gibt es eine Möglichkeit, dies zu tun?
x11
screenshot
Marinara
quelle
quelle
Antworten:
Es ist wahrscheinlich die Schuld des Spiels, nicht die Schuld des Screenshot-Dienstprogramms. X11 sendet Anwendungen ein VisibilityNotify- Ereignis, um ihnen mitzuteilen, dass ihr Fenster vollständig sichtbar, teilweise verdeckt oder vollständig verdeckt ist. Wenn das Fenster vollständig verdeckt ist, müssen die meisten Anwendungen ihre Anzeige nicht aktualisieren, wodurch Ressourcen gespart werden. Mit anderen Worten, wenn niemand da ist, um es zu sehen, fällt der Baum nicht.
Ich denke, wenn Sie dem Spielfenster ein VisibilityNotify-Ereignis senden, um vorzutäuschen, dass es sichtbar ist, erhalten Sie Ihren Screenshot. Sie müssen das Ereignis senden, nachdem das Fenster verdeckt wurde, da X11 selbst zu diesem Zeitpunkt sein normales Ereignis sendet. Hier ist ein nicht getestetes Skript, das ein VisibilityNotify-Ereignis sendet. Rufen Sie es mit dem Argument
VisibilityPartiallyObscured
oder aufVisibilityUnobscured
. Ich folge mit einemMapNotify
Ereignis, ich weiß nicht, ob es nützlich ist. Sie benötigen Python und Python-xlib.quelle
Wenn Sie nicht haben ,
xwd
undxwud
auf Ihrem System bereits installiert wäre ich sehr überrascht sein , wenn man nicht so leicht sie höchstens über Paket - Manager in wenigen Sekunden installieren konnte.% man xwd
Verstehen Sie, dass dies eine Art Desktop-Sitzungsaufzeichnungssoftware ist, die in den X-Server integriert ist und Screenshots und vieles mehr ermöglicht. Aber Sie sollten die Dokumentation ein wenig lesen, bevor Sie eintauchen - nur um sich damit vertraut zu machen, denke ich.
Hinweis - Das Zielfenster muss nicht wie oben erwähnt mit dem Mauszeiger ausgewählt werden. Dies ist nur das Standardverhalten, wenn es ohne Argumente aufgerufen wird. Die gesamte Oberfläche ist vollständig skriptfähig.
Scrollen Sie einfach ein bisschen mehr und ...
Wenn Sie meinen Rat befolgen , werden Sie sich xdotool auch ziemlich genau ansehen , allerdings hat es hier nur eine begrenzte Relevanz. Es schreibt meistens Skripte mit der Maus, bietet jedoch eine direkte Befehlszeilenschnittstelle zur X-Backend-API - als @ Gilles-Referenzen. Und es ist ziemlich einfach zu bedienen.
Das Hauptproblem ist jedoch, dass Ihr Display derzeit belegt ist. Wenn Ihr Fenster unsichtbar bleiben muss, können Sie es auf verschiedene Arten handhaben - obwohl Sie es ein wenig ausprobieren müssen, denke ich, bevor Sie es herunterfahren. Ich würde nur empfehlen, Ihren Bildschirm so zu konfigurieren, dass er doppelt so groß ist wie Ihr Bildschirm. Auf diese Weise können Sie das Fenster einfach vom Bildschirm ziehen und die Anzeige wird weiterhin aktualisiert - jedoch außerhalb des Bildschirms. Ich kann dies mit den Tools von nvidia tun, und die meisten können dies mit tun,
xrandr,
aber insbesondere unter Linux scheinen Anzeigeprobleme zumindest meiner Erfahrung nach oft persönliche Probleme zu sein, nur weil es so viele Möglichkeiten gibt, sie zu konfigurieren.Eine andere Möglichkeit besteht darin, einen virtuellen X-Server zu verwenden, z. B.
xnest
oderxephyr.
Diese Server verschachteln einen gesamten X-Server in einem Fenster, das im Hintergrund oder vollständig nicht vorhanden sein kann, wenn Sie dies bevorzugen. Zuletzt habe ich überprüft, was leider vor einiger Zeit war, dass diese den xdummy-Treiber verwendeten - und daher keine gute Wahl für ein Videospiel wären, das eine Videobeschleunigung erfordert. Trotzdem bin ich sicher, dass Ihre Manpages Ihnen mehr erzählen könnten, und ich kann nur hoffen, dass ich geholfen habe.quelle