Xorg 启动并创建虚拟屏幕
虚拟屏幕尺寸确定为 3120 x 1050
跨越我的 2 个 1680x1050 和 1440x900 物理屏幕,我猜是使用 xinerama。
没有配置文件,我不想更改系统设置。
我的应用程序使用 DisplayWidth 和 DisplayHeight 来检索屏幕尺寸,这在单屏设置上很好。
maxwidth = DisplayWidth (dpy, scrnum);
maxheight = DisplayHeight (dpy, scrnum);
Run Code Online (Sandbox Code Playgroud)
但在自动创建虚拟屏幕的双屏设置中,这些函数返回虚拟屏幕的大小。
我尝试了不同的方法来检索物理屏幕尺寸,但结果相同:
maxwidth = XWidthOfScreen (XScreenOfDisplay(dpy, scrnum));
maxheight = XHeightOfScreen (XScreenOfDisplay(dpy, scrnum));
Run Code Online (Sandbox Code Playgroud)
或者
XWindowAttributes attr;
XGetWindowAttributes(dpy, RootWindow(dpy, scrnum), &attr);
maxwidth = attr.width;
maxheight = attr.height;
Run Code Online (Sandbox Code Playgroud)
是否可以仅使用 Xlib 检索物理屏幕的大小?我想避免只是为了设置窗口的大小而添加更多的库依赖项,但这可能可以使用 Xrand 扩展来实现吗?
我知道执行此操作的唯一方法是使用您提到的 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;
}
Run Code Online (Sandbox Code Playgroud)