C ++ Linux: get monitor refresh rate

On Windows, winapi provides a function that reports monitor information:

DEVMODE dm; dm.dmSize = sizeof(DEVMODE); EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm); int FPS = dm.dmDisplayFrequency; 

What is equivalent to this on Linux? Linux personal pages direct me to the library function allegro, but not only I do not use allegro, this function is from a very outdated version of the specified library and, as reported, works only on Windows.

+4
source share
1 answer

Use the XRandr API (man 3 Xrandr). See here for an example:

You can also see the code for xrandr (1).


Edit1: For posterity:

The sample code is slightly adjusted, so its a great demo:

 #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); } 

Compile with:

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

Output:

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

Source: https://habr.com/ru/post/1492797/


All Articles