Ecco una chiamata esempio per xrandr:xrandr correlate, di programmazione C
$ xrandr --output LVDS --mode 1680x1050 --pos 0x0 --rotate normal --output S-video --off --output DVI-0 --mode 1024x768 --pos 1680x104 --rotate normal
pensare a un sistema in cui la chiamata ha successo; ci sono due schermate (LVDS e DVI-0) che funzionano con risoluzioni diverse. Il DVI-0 è posizionato a destra nel mezzo.
Come posso ottenere tutte queste informazioni in un programma C? Ho controllato il codice sorgente xrandr, ma ho trovato difficile leggere e non c'è modo apparente di interrogare il valore --pos (edit: è nascosto in bella vista, grazie alla risposta di ernestofele).
So che posso chiedere un _NET_WORKAREA con XGetWindowProperty, ma per quanto ho visto non dice le posizioni dello schermo, solo la dimensione del rettangolo ideale che le contiene tutte.
Dopo qualche altro studio sul codice xrandr, questo codice sembra un passo in avanti nella soluzione. Tuttavia non sono convinto, xrandr.c intorno alla riga 2940 presuppone che crtc_info potrebbe non essere disponibile. Mi manca ancora l'altro modo per ottenere risoluzione e posizione.
#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; }
Hi there Mi chiedevo se tu fossi convinto circa il codice di oggi? O se hai trovato il modo migliore? – yatg
Ho pensato di usare una combinazione di questo e xinerma nel caso in cui xrandr non sia disponibile: http://stackoverflow.com/a/836376/5062337 – yatg