这似乎是一个简单的问题,但我找不到答案:你如何查询(通过X11)什么监视器存在和他们的决议?
查看Xlib手册中的 显示宏和屏幕宏 。
特别:
ScreenCount()
, ScreenOfDisplay()
WidthOfScreen()
, HeightOfScreen()
这可能是cli和脚本的帮助
xwininfo -root
但是xRandR可能更加准确,特别是当有多个监视器环境时:
xrandr
对于现代X服务器,还有XRandR扩展,它提供了最新的多屏幕布局信息模型,包括重叠屏幕和动态屏幕变化。
它的文档可以在XRandR 1.3.1协议规范和libXrandr手册页中找到 。
如果Xinerama正在使用,请尝试使用XineramaQueryScreens
。 否则,您可以假设一个屏幕并使用(X)WidthOfScreen
/ (X)HeightOfScreen.
(另请参阅其他答案。远程可能有人使用旧的X屏幕模型,其屏幕是:x.0
, :x.1
等)
库X11只能与类Unix操作系统一起工作,所以它不是一个跨平台的解决方案。
完整的代码
#include <stdio.h> #include <X11/Xlib.h> int main(const int argc, const char *argv[]) { Display *display; Screen *screen; // open a display display = XOpenDisplay(NULL); // return the number of available screens int count_screens = ScreenCount(display); printf("Total count screens: %d\n", count_screens); for (int i = 0; i < count_screens; ++i) { screen = ScreenOfDisplay(display, i); printf("\tScreen %d: %dX%d\n", i + 1, screen->width, screen->height); } // close the display XCloseDisplay(display); return 0; }
汇编
gcc -o setup setup.c -std=c11 `pkg-config --cflags --libs x11`
结果 (实际为我的电脑)
Total count screens: 1 Screen 1: 1366X768
基于:
xrandr
输出 xrandr |grep \* |awk '{print $1}'