Кажется, что это простая проблема, но я не могу найти ответ: как вы запрашиваете (через X11), какие мониторы существуют, и их разрешения?
Как запросить разрешение дисплея X11?
Ответ 1
Отметьте отображение макросов и экранные макросы из Руководство Xlib.
В частности:
- Из первая ссылка:
ScreenCount()
,ScreenOfDisplay()
- Из вторая ссылка:
WidthOfScreen()
,HeightOfScreen()
Ответ 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
На основании: