Also habe ich ein seltsames Problem mit xvfb. Im Grunde habe ich eine Anwendung durch xvfb läuft etwa so:Lesen von Pixeldaten von xvfb
Xvfb :1 -screen 0 1920x1080x24+32 -fbdir /var/tmp &
export DISPLAY=:1
gimp &
Und dann las ich die Pixeldaten aus der Datei wie folgt aus:
#include <string>
#include <string.h>
#include <thread>
#include <math.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
char *fbp1 = 0;
int fbfd1;
long int screensize1;
int main() {
fbfd1 = 0;
screensize1 = 0;
fbfd1 = open("/var/tmp/Xvfb_screen0", O_RDWR);
screensize1 = 1920 * 1080 * 4;
fbp1 = (char*)mmap(0,
screensize1,
PROT_READ | PROT_WRITE,
MAP_SHARED,
fbfd1,
0);
for (int i = 0; i < 1000; i++) {
cout << ((int*)fbp1)[i] << endl;
}
return 0;
}
Aus irgendeinem Grund, wenn ich die ersten 1000 Elemente ausdrucken oder So druckt der Puffer eine Menge zufälliger Daten aus, bevor er das eigentliche Bild auf dem Bildschirm druckt.
Jede Hilfe würde sehr geschätzt werden!
Nebenbei würde ich empfehlen, die Rückgabewerte von 'open()', 'mmap()' usw. zu testen. Und dokumentieren Sie die magische Zahlen (ist '4' der Wert von' sizeof (int) 'auf Ihrem Plattform? - Sie könnten 'int * fbp1' und' sizeof * fbp1' zur besseren Übersicht schreiben. –