我写了一个小函数来改变我的显示器的伽玛值,但不幸的是它改变了错误显示器的伽玛,我不需要它。
我几乎尝试了一切,但我找不到任何有效的解决方案 - 它总是错误的显示器。
如何正确地告诉它应该更改哪个监视器?
另一个奇怪的事情是,ScreenCount()总是返回1.
这个函数应该是破解SDL_SetGamma()的一种解决方法,它在Linux上不起作用,或者至少不适用于ATi卡。我在运行时加载libXxf86vm.so
,因此它是一个可选功能,不需要链接到应用程序。
如果有人能解释我,我怎么能用xgamma
命令改变我的第二台监视器的伽玛值,这也很棒,因为该命令正好相同。
#include <X11/Xlib.h>
typedef struct {
float red; /* Red Gamma value */
float green; /* Green Gamma value */
float blue; /* Blue Gamma value */
} XF86VidModeGamma;
typedef Bool (*XF86VidModeSetGamma)(Display*, int, XF86VidModeGamma*);
int changegamma(float red, float green, float blue)
{
void *lib;
XF86VidModeSetGamma f;
int screen;
Display *display;
XF86VidModeGamma gamma;
lib = dlopen("libXxf86vm.so", RTLD_LAZY);
if(!lib) goto error;
f = (XF86VidModeSetGamma)dlsym(lib, "XF86VidModeSetGamma");
if(!lib) goto error;
gamma.red = red;
gamma.green = green;
gamma.blue = blue;
display = XOpenDisplay(NULL);
if(!display) goto error;
screen = DefaultScreen(display);
if(!f(display, screen, &gamma)) goto error;
XCloseDisplay(display);
dlclose(lib);
return 0;
error:;
if(lib) dlclose(lib);
return SDL_SetGamma(red, green, blue);
}
答案 0 :(得分:2)
屏幕的XF86界面非常陈旧,并不能反映现代多屏幕设置(使用xinerama,......)。
在任何情况下,您都应该使用xrandr来设置这些天的每个显示设置。 最简单的方法可能就是检查xrandr实用程序本身的源代码,该代码可用于设置cmdline中的每屏幕伽玛。