Ответ 1
Отметьте отображение макросов и экранные макросы из Руководство Xlib.
В частности:
- Из первая ссылка:
ScreenCount()
,ScreenOfDisplay()
- Из вторая ссылка:
WidthOfScreen()
,HeightOfScreen()
Кажется, что это простая проблема, но я не могу найти ответ: как вы запрашиваете (через X11), какие мониторы существуют, и их разрешения?
Отметьте отображение макросов и экранные макросы из Руководство Xlib.
В частности:
ScreenCount()
, ScreenOfDisplay()
WidthOfScreen()
, HeightOfScreen()
Это может быть полезно для cli и scripting
xwininfo -root
Но xRandR может быть более точным, особенно, когда есть несколько окружений монитора:
xrandr
Для современных X-серверов есть также расширение XRandR, которое предоставляет самую современную модель информации о многоэкранном макете, включая перекрывающиеся экраны и динамические изменения экрана.
Документация по нему доступна в XRandR 1.3.1 Спецификация протокола и страница руководства libXrandr.
Если Xinerama используется, попробуйте XineramaQueryScreens
. В противном случае вы можете принять один экран и использовать (X)WidthOfScreen
/(X)HeightOfScreen.
(Также см. другой ответ). Возможно, кто-то использует старую модель экрана X, где ваши экраны :x.0
, :x.1
и т.д.)
xrandr
для использования imagemagickxrandr |grep \* |awk '{print $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
На основании: