如何查询X11的显示分辨率?

这似乎是一个简单的问题,但我找不到答案:你如何查询(通过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 

基于:

  1. https://tronche.com/gui/x/xlib/display/opening.html
  2. https://tronche.com/gui/x/xlib/display/display-macros.html
  3. https://tronche.com/gui/x/xlib/display/screen-information.html
  4. https://stackoverflow.com/a/1829747/6003870

清理imagemagick使用的xrandr输出

 xrandr |grep \* |awk '{print $1}'