diff --git a/src/loaders/loader_x11.cpp b/src/loaders/loader_x11.cpp index 549424fc..dc599277 100644 --- a/src/loaders/loader_x11.cpp +++ b/src/loaders/loader_x11.cpp @@ -37,6 +37,14 @@ bool libx11_loader::Load(const std::string& library_name) { return false; } + XDefaultScreen = + reinterpret_castXDefaultScreen)>( + dlsym(library_, "XDefaultScreen")); + if (!XDefaultScreen) { + CleanUp(true); + return false; + } + XQueryKeymap = reinterpret_castXQueryKeymap)>( dlsym(library_, "XQueryKeymap")); diff --git a/src/loaders/loader_x11.h b/src/loaders/loader_x11.h index fedac4ce..8861985f 100644 --- a/src/loaders/loader_x11.h +++ b/src/loaders/loader_x11.h @@ -16,6 +16,7 @@ class libx11_loader { decltype(&::XOpenDisplay) XOpenDisplay; decltype(&::XCloseDisplay) XCloseDisplay; + decltype(&::XDefaultScreen) XDefaultScreen; decltype(&::XQueryKeymap) XQueryKeymap; decltype(&::XKeysymToKeycode) XKeysymToKeycode; decltype(&::XStringToKeysym) XStringToKeysym; diff --git a/src/nvctrl.cpp b/src/nvctrl.cpp index 6ceba3af..ca565ceb 100644 --- a/src/nvctrl.cpp +++ b/src/nvctrl.cpp @@ -26,7 +26,8 @@ static bool find_nv_x11(libnvctrl_loader& nvctrl, Display*& dpy) snprintf(buf, sizeof(buf), ":%d", i); Display *d = libx11->XOpenDisplay(buf); if (d) { - if (nvctrl.XNVCTRLIsNvScreen(d, i)) { + int s = libx11->XDefaultScreen(d); + if (nvctrl.XNVCTRLIsNvScreen(d, s)) { dpy = d; SPDLOG_DEBUG("XNVCtrl is using display {}", buf); return true;