Как запросить разрешение дисплея X11?

Кажется, что это простая проблема, но я не могу найти ответ: как вы запрашиваете (через X11), какие мониторы существуют, и их разрешения?

Ответы

Ответ 2

Это может быть полезно для cli и scripting

xwininfo -root

Но xRandR может быть более точным, особенно, когда есть несколько окружений монитора:

xrandr

Ответ 3

Для современных X-серверов есть также расширение XRandR, которое предоставляет самую современную модель информации о многоэкранном макете, включая перекрывающиеся экраны и динамические изменения экрана.

Документация по нему доступна в XRandR 1.3.1 Спецификация протокола и страница руководства libXrandr.

Ответ 4

Если Xinerama используется, попробуйте XineramaQueryScreens. В противном случае вы можете принять один экран и использовать (X)WidthOfScreen/(X)HeightOfScreen.

(Также см. другой ответ). Возможно, кто-то использует старую модель экрана X, где ваши экраны :x.0, :x.1 и т.д.)

Ответ 5

Вывод xrandr для использования imagemagick

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

Ответ 6

Библиотека 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

На основании: