如何查询X11显示分辨率?

时间:2009-12-01 23:35:22

标签: linux x11

这似乎是一个简单的问题,但我找不到答案:您如何查询(通过X11)监控存在哪些及其解决方案?

7 个答案:

答案 0 :(得分:13)

display macros查看screen macrosXlib manual

具体做法是:

  • 来自first linkScreenCount()ScreenOfDisplay()
  • 来自second linkWidthOfScreen()HeightOfScreen()

答案 1 :(得分:11)

这可能对cli和脚本编写有帮助

xwininfo -root

但是,当存在多个监视器环境时,xRandR可能更准确:

xrandr

答案 2 :(得分:5)

对于现代X服务器,还有XRandR扩展,它提供了最新的多屏幕布局信息模型,包括重叠屏幕和动态屏幕更改。

XRandR 1.3.1 Protocol speclibXrandr man page

提供了相关文档

答案 3 :(得分:4)

如果正在使用Xinerama,请尝试XineramaQueryScreens。否则,您可以采用单个屏幕并使用(X)WidthOfScreen / (X)HeightOfScreen.

(另请参阅另一个答案。有人可能会使用旧的X屏幕模型,屏幕为:x.0:x.1等。

答案 4 :(得分:2)

库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

答案 5 :(得分:1)

为imagemagick使用

清除xrandr输出
xrandr |grep \* |awk '{print $1}'

答案 6 :(得分:1)

Python

import os
from Xlib import X, display
d = display.Display()
s = d.screen().root
output = os.popen("xrandr --listmonitors | grep '*' | awk {'print $4'}").read().splitlines()
num_sc = s.xinerama_get_screen_count().screen_count
width = s.get_geometry().width
height = s.get_geometry().height
print("Total count screens: %s" % num_sc)
for i in range(num_sc):
    print("\tScreen %s(%s): %sX%s" % (i, output[i], width, height))

重击

$ xrandr --listmonitors
$ xrandr
$ xrandr | grep '*' | awk {'print $1'}