How on earth do you set your screen res after a crash??
Glynn Clements
glynn at gclements.plus.com
Mon Oct 19 06:04:05 PDT 2009
Adam Nielsen wrote:
> Please let me know if anyone knows how to change X11 screen resolutions
> without closing down everything and restarting.
The following uses XFree86-VidModeExtension:
/* make xvidmode CFLAGS='-Wall' LDFLAGS='-L/usr/X11R6/lib' LDLIBS='-lX11 -lXxf86vm -lXext' */
#include <X11/Xlib.h>
#include <X11/extensions/xf86vmode.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv)
{
Display *dpy;
int num_modes;
XF86VidModeModeInfo **modes;
int width, height;
int i;
XF86VidModeModeInfo *best_mode = NULL;
if (argc != 3) {
fprintf(stderr, "Usage: %s <width> <height>\n", argv[0]);
return 1;
}
width = atoi(argv[1]);
height = atoi(argv[2]);
dpy = XOpenDisplay(NULL);
if (!dpy) {
fprintf(stderr, "Unable to open display\n");
return 1;
}
if (!XF86VidModeGetAllModeLines(dpy, DefaultScreen(dpy), &num_modes, &modes)) {
fprintf(stderr, "Unable to query modes\n");
return 1;
}
for (i = 0; i < num_modes; i++) {
XF86VidModeModeInfo *mode = modes[i];
if (mode->hdisplay < width || mode->vdisplay < height)
continue;
if (best_mode && (mode->hdisplay > best_mode->hdisplay || mode->vdisplay > best_mode->vdisplay))
continue;
best_mode = mode;
}
if (!best_mode) {
fprintf(stderr, "Unable to find a suitable mode\n");
return 1;
}
XWarpPointer(dpy, None, DefaultRootWindow(dpy), 0, 0, 0, 0, 0, 0);
XF86VidModeSwitchToMode(dpy, DefaultScreen(dpy), best_mode);
XF86VidModeSetViewPort(dpy, DefaultScreen(dpy), 0, 0);
XFree(modes);
XCloseDisplay(dpy);
return 0;
}
--
Glynn Clements <glynn at gclements.plus.com>
More information about the xorg
mailing list