Schnellste Methode zur Bildschirmaufnahme unter Linux
Lesezeit: 6 Minuten
lurscher
Diese Frage ähnelt dieser
Schnellste Methode zur Bildschirmaufnahme
aber für Linux/X11.
Um genauer zu sein, brauche ich eine Methode, um die Pixelbilder eines Fensters (das programmatische Äquivalent des Alt-Print-Bildschirms in Windows) zu erfassen, das auf einem X11-Display ausgeführt wird.
Hinweise und Anforderungen:
1) Auch wenn ein neues Fenster über dem erfassten Fenster platziert wird, sollte das Pixelbild immer noch ohne jegliche Okklusion auf das ursprüngliche Anwendungsfenster zeigen
2) Es ist nicht erforderlich, dass das Anwendungsfenster vom Benutzer gesehen wird, ich muss nur die Pixelpuffer/Bilder für Videozwecke speichern
Andere Alternativen, die ich untersucht habe, sind:
1) xvfb – es funktioniert, aber es macht CPU-Rendering, was langsam und verschwenderisch für eine gute GPU ist
2) x11 in vielen lxc – könnte theoretisch funktionieren, ist aber komplex einzurichten, und ich bin mir nicht sicher, ob es gut skaliert, wenn viele Fenster erfasst werden
Anregungen und Ideen sind willkommen
Wenn das Fenster abgedeckt ist, ist das, was Sie lesen, undefiniert.
– BЈовић
20. November 2012 um 19:22 Uhr
Ja, CPU-Rendering ist langsam und verschwenderisch, aber ist diese Leistung unannehmbar langsam? Wenn es sich um einen Compositing-Window-Manager handelt, können Sie je nach verwendetem Fenstermanager auch nach einer wm-spezifischen API suchen, die Ihnen einen Zeiger auf einen Off-Screen-Puffer einer Anwendung geben könnte. Alles, was Sie dann tun müssen, ist eine Kopie des Puffers zu erstellen, bevor die Anwendung sich selbst neu zeichnet.
– Robert Maurer
20. November 2012 um 20:14 Uhr
@RobertMason, das würde funktionieren, und es wäre definitiv eine gültige Antwort, wenn jemand einen Fenstermanager vorschlagen könnte, der 1) GPU-Beschleunigungs-Rendering unterstützt (ich weiß nichts über die x11-Architektur, aber ich nehme an, das geschieht durch Erweiterungen) und 2) unterstützt diese spezielle Art von API
– lurscher
20. November 2012 um 21:13 Uhr
@RobertMason, die Leistung (des Ausführens von Apps in xvfb) ist nicht unannehmbar langsam, sondern gerade langsam genug, sodass es sich lohnt, Zeit mit der Suche nach Alternativen zu verbringen
– lurscher
20. November 2012 um 21:18 Uhr
Sie können wmctrl oder xdotool verwenden, um ein Fenster zu aktivieren, wenn dies akzeptabel ist, auch xwininfo ist nützlich, um die Fenster-ID für xwd zu erhalten (wenn Sie xwd verwenden, geben Sie es an > name.xwd aus und einige Bildprogramme können es nativ öffnen).
– Technosaurus
29. November 2012 um 4:07 Uhr
Dies ist möglich mit VirtualGL in einem Server mit Hardwarebeschleunigung. Im Grunde nur den Server entsprechend konfigurieren, dann entweder auf der gleichen Maschine oder auf einer Maschine im selben Netzwerk laufen lassen
1) Ihre App wird mit virtualGL gerendert, das die Hardware verwendet
2) VirtualGL zeigt Ihren 3D-Kontext innerhalb der Xfvb-Anzeige an, die nur die 2D-Widgets in der CPU rendert
3) Konfigurieren Sie Xvfb so, dass es in einen Framebuffer gerendert wird
4) Gewinn!
das ist sehr interessant! Danke, ich werde es überprüfen und versuchen, es zu konfigurieren
– lurscher
29. November 2012 um 15:50 Uhr
Dies ist mit reinem X11 nicht möglich.
Sie können mit Compositing bekommen, was Sie wollen, aber nur auf Servern, die es unterstützen (die meisten modernen tun es). Das hat eigentlich nichts mit Fenstermanagern zu tun. Ein WM ist nur ein weiterer Client, wenn auch mit einigen besonderen Fähigkeiten, aber diese haben nichts mit Compositing zu tun. Sie können dieselbe Compositing-API verwenden.
man xcomposite sollte Ihnen den Einstieg erleichtern.
Ich habe dies auf der Compiz-Mailingliste gefragt, aber sie glauben nicht, dass es viel Sinn macht, dies vom Composite-Manager aus zu tun: listen.compiz.org/pipermail/dev/2012-November/thread.html#1545 Ich werde xcompòsite überprüfen und sehen, wohin das führt
– lurscher
22. November 2012 um 19:34 Uhr
Nun, sie scheinen mehr oder weniger dasselbe zu sagen wie ich, nur ausführlicher. Das Code-Snippet verwendet Funktionen von xcomposite.
– n. 1.8e9-wo-ist-meine-Aktie m.
22. November 2012 um 19:52 Uhr
Ich habe Kommentare gesehen, die besagen, dass dies in X11 nicht möglich ist, daher kann es sein, dass ich etwas nicht verstehe, aber ich kann meinen Bildschirm mit dem folgenden Code erfassen.
Sie können verwenden xwd(1) ein X11-Fenster ausgeben (und xwud(1) um es anzuzeigen). ImageMagick und die Netpbm-Tools wissen, wie man mit dem XWD-Format umgeht. Diese sind aber nicht besonders schnell. Und sie werden keine versteckten Teile eines Fensters enthüllen.
Dies ist nur eine wilde Vermutung, aber ich nehme an, Sie könnten x11vnc mit der -id verwenden [windowid] (http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id) Option, um dieses einzelne Fenster über VNC zu streamen. Dadurch wird Ihnen das gesamte Fenster mit genau der gleichen Positionierung wie im Hauptbildschirm angezeigt (Sie könnten einige Popup-Menüs verlieren), selbst wenn es verdeckt ist. Sie können die Fensterkoordinaten vom echten X11-Bildschirm abrufen.
Ich würde die Quellen für greifen gnome-screenshotoder ein anderes vorhandenes Open-Source-Tool, und finden Sie heraus, wie sie es tun.
Vergessen Sie jedoch nicht, die Lizenz zu überprüfen, bevor Sie große Codeabschnitte ausschneiden und einfügen!
Rahul Tripathi
Xpaint ist ein sehr altes X11-Dienstprogramm, das mit dem MIT Athena-Widget-Set erstellt wurde. File > Take Snapshot greift ein Fenster oder ein mit der Maus ausgewähltes Rechteck vom Bildschirm auf.
ODER
MagiCapture ist ein Bildschirmaufnahme- und Vorschauprogramm für das X Window System. Ein Benutzer kann ein einzelnes Fenster, ein einzelnes Fenster mit Dekorationen, einen rechteckigen Bereich der Anzeige oder die gesamte Anzeige selbst erfassen. Der Benutzer kann das erfasste Bild in einer Grafikdatei speichern, die vom ImageMagick-Toolkit unterstützt wird, das die meisten (wenn nicht alle) gängigen Grafikformate unterstützt. MagiCapture verwendet die Bibliotheken GLIB und GTK+ für die Benutzeroberfläche und die Bibliotheken ImageMagick und GdkMagick für die gesamte Grafikverarbeitung. Benötigt ImageMagick.
ODER
Zscreen:- Diese Bildschirmaufnahme-App nur für Windows hat unzählige Funktionen. Es nimmt eine Aufnahme des aktiven Fensters, eines ausgewählten Fensters oder des gesamten Bildschirms auf. Sobald Sie das Bild haben, öffnen Sie es automatisch in Ihrem Bildeditor oder laden Sie es auf Twitpic, YFrog, Flickr oder einen von mehreren anderen unterstützten Diensten hoch. ZScreen speichert alle Ihre Bilder, sogar die in der Zwischenablage, sodass Sie immer einen Verlauf Ihrer Screenshots direkt zur Hand haben.
13843200cookie-checkSchnellste Methode zur Bildschirmaufnahme unter Linuxyes
Wenn das Fenster abgedeckt ist, ist das, was Sie lesen, undefiniert.
– BЈовић
20. November 2012 um 19:22 Uhr
Ja, CPU-Rendering ist langsam und verschwenderisch, aber ist diese Leistung unannehmbar langsam? Wenn es sich um einen Compositing-Window-Manager handelt, können Sie je nach verwendetem Fenstermanager auch nach einer wm-spezifischen API suchen, die Ihnen einen Zeiger auf einen Off-Screen-Puffer einer Anwendung geben könnte. Alles, was Sie dann tun müssen, ist eine Kopie des Puffers zu erstellen, bevor die Anwendung sich selbst neu zeichnet.
– Robert Maurer
20. November 2012 um 20:14 Uhr
@RobertMason, das würde funktionieren, und es wäre definitiv eine gültige Antwort, wenn jemand einen Fenstermanager vorschlagen könnte, der 1) GPU-Beschleunigungs-Rendering unterstützt (ich weiß nichts über die x11-Architektur, aber ich nehme an, das geschieht durch Erweiterungen) und 2) unterstützt diese spezielle Art von API
– lurscher
20. November 2012 um 21:13 Uhr
@RobertMason, die Leistung (des Ausführens von Apps in xvfb) ist nicht unannehmbar langsam, sondern gerade langsam genug, sodass es sich lohnt, Zeit mit der Suche nach Alternativen zu verbringen
– lurscher
20. November 2012 um 21:18 Uhr
Sie können wmctrl oder xdotool verwenden, um ein Fenster zu aktivieren, wenn dies akzeptabel ist, auch xwininfo ist nützlich, um die Fenster-ID für xwd zu erhalten (wenn Sie xwd verwenden, geben Sie es an > name.xwd aus und einige Bildprogramme können es nativ öffnen).
– Technosaurus
29. November 2012 um 4:07 Uhr