C ++ Linux: получите частоту обновления монитора

В Windows winapi предоставляет функцию, которая сообщает информацию о мониторе:

DEVMODE dm;
dm.dmSize = sizeof(DEVMODE);

EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm);

int FPS = dm.dmDisplayFrequency;

Что эквивалентно этому в Linux? Справочные страницы Linux направляют меня к функции библиотеки allegro, но я не только не использую allegro, эта функция взята из очень устаревшей версии указанной библиотеки и, как сообщается, работает только в Windows.

4

Решение

Используйте XRandr API (man 3 Xrandr). Смотрите здесь для примера:

Вы также можете посмотреть код для xrandr (1).


Edit1: для потомков:

Пример кода немного скорректирован, так что это скорее демо:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <iostream>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xrandr.h>

int main()
{
int num_sizes;
Rotation current_rotation;

Display *dpy = XOpenDisplay(NULL);
Window root = RootWindow(dpy, 0);
XRRScreenSize *xrrs = XRRSizes(dpy, 0, &num_sizes);
//
//     GET CURRENT RESOLUTION AND FREQUENCY
//
XRRScreenConfiguration *conf = XRRGetScreenInfo(dpy, root);
short current_rate = XRRConfigCurrentRate(conf);
SizeID current_size_id = XRRConfigCurrentConfiguration(conf, &current_rotation);

int current_width = xrrs[current_size_id].width;
int current_height = xrrs[current_size_id].height;
std::cout << "current_rate = " << current_rate << std::endl;
std::cout << "current_width = " << current_width << std::endl;
std::cout << "current_height = " << current_height << std::endl;

XCloseDisplay(dpy);
}

Компилировать с:

g++ 17797636.cpp -o 17797636 -lX11 -lXrandr

Выход:

$ ./17797636
current_rate = 50
current_width = 1920
current_height = 1080
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]