Кажется простой проблемой, но я не могу найти ответ: как вы запрашиваете (через X11), какие мониторы существуют и какие разрешения?Как запросить разрешение дисплея X11?
ответ
Отъезд display macros и screen macros от Xlib manual.
В частности:
- От first link:
ScreenCount()
,ScreenOfDisplay()
- С second link:
WidthOfScreen()
,HeightOfScreen()
Если Xinerama используется, попробуйте XineramaQueryScreens
. В противном случае, вы можете быть в состоянии взять на себя один экран и использовать (X)WidthOfScreen
/(X)HeightOfScreen.
(Также смотрите другой ответ. Это отдаленно возможно кто-то использует старую модель X экрана, где ваши экраны :x.0
, :x.1
и т.д.)
Для современных серверов X имеется также расширение XRandR, которое предоставляет самую современную модель информации о многоэкранном макете, включая перекрывающиеся экраны и динамические изменения экрана.
Документация по нему доступна в XRandR 1.3.1 Protocol spec и libXrandr man page.
Это может быть полезно для кли и сценариев
xwininfo -root
Но XRandR может быть более точным, особенно, когда есть множественная среда монитора:
xrandr
Казалось 'xrandr' по сравнению с' xwininfo -root' не расскажите о мониторе, который в настоящее время активен. Однако это говорит вам о мониторе по доверенности активного корневого окна. – CMCDragonkai
Чистый xrandr
выход для использования ImageMagick
xrandr |grep \* |awk '{print $1}'
Это не связано с X11? –
Библиотека 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
основе:
Благодарим за предоставленный код. Вы знаете ответ на мой вопрос: http://stackoverflow.com/questions/42987932/is-a-monitor-in-gtk3-the-same-as-a-screen-in-x11. Я спрашиваю, являются ли экраны, которые вы находите в этом коде, так же, как то, что Gtk3 3.22 вызывает мониторы. –
+1 для Xinerama – asveikau