Hier ist ein Beispiel Aufruf xrandr:xrandr bezogen, C-Programmierung
$ xrandr --output LVDS --mode 1680x1050 --pos 0x0 --rotate normal --output S-video --off --output DVI-0 --mode 1024x768 --pos 1680x104 --rotate normal
über ein System denken, wo der Anruf Erfolg hat; Es gibt zwei Bildschirme (LVDS und DVI-0), die mit unterschiedlichen Auflösungen arbeiten. Der DVI-0 ist rechts in der Mitte platziert.
Wie bekomme ich all diese Informationen in einem C-Programm? Ich überprüfte den xrandr-Quellcode, aber ich fand es schwierig zu lesen und es gibt keine offensichtliche Möglichkeit, den Wert --pos abzufragen (edit: es ist in Sichtweite versteckt, dank der Antwort von Ernestopheles, die ich bekommen habe).
Ich weiß, dass ich ein _NET_WORKAREA mit XGetWindowProperty fragen kann, aber soweit ich gesehen habe, sagt es nicht die Bildschirmpositionen, nur die Größe des idealen Rechtecks, das sie alle enthält.
Nach einigen anderen Studie von Xrandr-Code, scheint dieser Code ein Schritt nach vorne die Lösung. Noch bin ich nicht überzeugt, Xrandr.c um Zeile 2940 geht davon aus, dass crtc_info möglicherweise nicht verfügbar ist. Ich vermisse immer noch den anderen Weg, Auflösung und Position zu bekommen.
#include <stdio.h> #include <X11/extensions/Xrandr.h> int main() { Display *disp; XRRScreenResources *screen; XRROutputInfo *info; XRRCrtcInfo *crtc_info; int iscres; int icrtc; disp = XOpenDisplay(0); screen = XRRGetScreenResources (disp, DefaultRootWindow(disp)); for (iscres = screen->noutput; iscres > 0;) { --iscres; info = XRRGetOutputInfo (disp, screen, screen->outputs[iscres]); if (info->connection == RR_Connected) { for (icrtc = info->ncrtc; icrtc > 0;) { --icrtc; crtc_info = XRRGetCrtcInfo (disp, screen, screen->crtcs[icrtc]); fprintf(stderr, "==> %dx%d+%dx%d\n", crtc_info->x, crtc_info->y, crtc_info->width, crtc_info->height); XRRFreeCrtcInfo(crtc_info); } } XRRFreeOutputInfo (info); } XRRFreeScreenResources(screen); return 0; }
Hallo dort verknüpfe ich mich gefragt, ob Sie heute davon überzeugt, über Ihren Code waren? Oder wenn du einen besseren Weg gefunden hast? – yatg
Ich dachte, eine Kombination von diesem und xinerma zu verwenden, falls xrandr nicht verfügbar ist: http://stackoverflow.com/a/836376/5062337 – yatg