1fe8aea9eSmrg#include <stdlib.h> 2fe8aea9eSmrg#include <stdio.h> 3fe8aea9eSmrg#include <string.h> 4fe8aea9eSmrg#include <X11/Xlib.h> 5fe8aea9eSmrg#include <X11/extensions/xf86vmode.h> 6fe8aea9eSmrg 7fe8aea9eSmrgint main(void) 8fe8aea9eSmrg{ 9fe8aea9eSmrg Display *dpy; 10fe8aea9eSmrg XF86VidModeModeLine current; 11fe8aea9eSmrg XF86VidModeModeInfo **modes; 12fe8aea9eSmrg int num_modes, i; 13fe8aea9eSmrg int saved_mode = -1; 14fe8aea9eSmrg int dotclock; 15fe8aea9eSmrg 16fe8aea9eSmrg dpy = XOpenDisplay(NULL); 17fe8aea9eSmrg if (dpy == NULL) 18fe8aea9eSmrg dpy = XOpenDisplay(":0"); 19fe8aea9eSmrg 20fe8aea9eSmrg XF86VidModeGetModeLine(dpy, DefaultScreen(dpy), &dotclock, ¤t); 21fe8aea9eSmrg XF86VidModeGetAllModeLines(dpy, XDefaultScreen(dpy), 22fe8aea9eSmrg &num_modes, &modes); 23fe8aea9eSmrg for (i = 0; i < num_modes; i++) { 24fe8aea9eSmrg int this; 25fe8aea9eSmrg 26fe8aea9eSmrg this = (current.hdisplay == modes[i]->hdisplay && 27fe8aea9eSmrg current.vdisplay == modes[i]->vdisplay && 28fe8aea9eSmrg dotclock == modes[i]->dotclock); 29fe8aea9eSmrg if (this && saved_mode == -1) 30fe8aea9eSmrg saved_mode = i; 31fe8aea9eSmrg 32fe8aea9eSmrg printf("[%d] %dx%d%s\n", 33fe8aea9eSmrg i, 34fe8aea9eSmrg modes[i]->hdisplay, 35fe8aea9eSmrg modes[i]->vdisplay, 36fe8aea9eSmrg this ? "*" : ""); 37fe8aea9eSmrg } 38fe8aea9eSmrg 39fe8aea9eSmrg for (i = 0; i < num_modes; i++) { 40fe8aea9eSmrg printf("Switching to mode %dx%d\n", 41fe8aea9eSmrg modes[i]->hdisplay, 42fe8aea9eSmrg modes[i]->vdisplay); 43fe8aea9eSmrg XF86VidModeSwitchToMode(dpy, XDefaultScreen(dpy), modes[i]); 44fe8aea9eSmrg XSync(dpy, True); 45fe8aea9eSmrg } 46fe8aea9eSmrg 47fe8aea9eSmrg if (saved_mode != -1) { 48fe8aea9eSmrg XF86VidModeSwitchToMode(dpy, XDefaultScreen(dpy), 49fe8aea9eSmrg modes[saved_mode]); 50fe8aea9eSmrg XFlush(dpy); 51fe8aea9eSmrg } 52fe8aea9eSmrg 53fe8aea9eSmrg return 0; 54fe8aea9eSmrg} 55