检索物理屏幕大小

时间:2015-02-27 21:44:06

标签: c xlib

Xorg启动并创建虚拟屏幕

  

虚拟屏幕尺寸确定为3120 x 1050

跨越我的2个物理屏幕1680x1050和1440x900,我想是使用xinerama。

没有配置文件,我也不想更改系统设置。

我的应用程序使用DisplayWidth和DisplayHeight来检索屏幕大小,这在单屏设置上很好。

maxwidth = DisplayWidth (dpy, scrnum);
maxheight = DisplayHeight (dpy, scrnum);

但是在自动创建虚拟屏幕的双屏幕设置中,这些功能会返回虚拟屏幕的大小。

我尝试了不同的方法来检索物理屏幕大小,结果相同:

maxwidth = XWidthOfScreen (XScreenOfDisplay(dpy, scrnum));
maxheight = XHeightOfScreen (XScreenOfDisplay(dpy, scrnum));

XWindowAttributes attr;
XGetWindowAttributes(dpy, RootWindow(dpy, scrnum), &attr);
maxwidth = attr.width;
maxheight = attr.height;

是否可以仅使用Xlib检索物理屏幕的大小?我想避免添加更多的库依赖项只是为了设置窗口的大小,但是可以使用Xrand扩展来实现吗?

1 个答案:

答案 0 :(得分:2)

我知道这样做的唯一方法是使用你提到的Xrandr扩展。您将需要使用XRRGetScreenResources并遍历每个Crtc以获取所需的信息。

#include <X11/Xlib.h>
#include <X11/extensions/Xrandr.h>
#include <stdio.h>

int main()
{
    Display *display = XOpenDisplay(NULL);
    XRRScreenResources *screens = XRRGetScreenResources(display, DefaultRootWindow(display));
    XRRCrtcInfo *info = NULL;
    int i = 0;

    for (i = 0; i < screens->ncrtc; i++) {
        info = XRRGetCrtcInfo(display, screens, screens->crtcs[i]);
        printf("%dx%d\n", info->width, info->height);
        XRRFreeCrtcInfo(info);
    }
    XRRFreeScreenResources(screens);

    return 0;
}