可以用C改变屏幕亮度吗?

可以用C改变屏幕亮度吗?,c,linux,screen-brightness,C,Linux,Screen Brightness,在Linux中使用C,是否可以更改查看屏幕的亮度?除了在我安装的Ubuntu和Fedora上运行之外,这是不可移植的。我问的是如何与操作系统交互以改变亮度。是的,但不可移植——您需要一个特定于平台的函数,C标准库中没有任何函数。Poke/sys/class/backlight/*/brightness。是的,即使在C.中,我也会从下面的ubuntu软件包列表中选择,这个工具可以让你管理屏幕的亮度(提示:它取决于品牌) 一旦你选择了它 sudo apt-get build-dep <pkgn

在Linux中使用C,是否可以更改查看屏幕的亮度?除了在我安装的Ubuntu和Fedora上运行之外,这是不可移植的。我问的是如何与操作系统交互以改变亮度。

是的,但不可移植——您需要一个特定于平台的函数,C标准库中没有任何函数。

Poke
/sys/class/backlight/*/brightness
。是的,即使在C.

中,我也会从下面的ubuntu软件包列表中选择,这个工具可以让你管理屏幕的亮度(提示:它取决于品牌)

一旦你选择了它

sudo apt-get build-dep <pkgname>
apt-get source --compile <pkgname> 
sudo-apt-get-build-dep
apt获取源代码——编译
应该会让你走上正确的轨道

查看。例如,以下代码将屏幕亮度设置为50%

// brightness.c
// gcc -o brightness brightness.c -lXrandr -lX11

#include <X11/Xatom.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xrandr.h>

#define BRIGHTNESS 0.5 // Target brightness between 0.0 and 1.0

int main(int argc, char *argv[])
{
        Display *dpy;
        static Atom backlight;
        int screen = 0, o = 0;
        Window root;
        XRRScreenResources *resources;
        RROutput output;
        XRRPropertyInfo *info;
        double min, max;
        long value;

        dpy = XOpenDisplay(NULL);
        backlight = XInternAtom (dpy, "Backlight", True);
        root = RootWindow(dpy, screen);
        resources = XRRGetScreenResources(dpy, root);
        output = resources->outputs[o];
        info = XRRQueryOutputProperty(dpy, output, backlight);
        min = info->values[0];
        max = info->values[1];
        XFree(info); // Don't need this anymore
        XRRFreeScreenResources(resources); // or this

        value = BRIGHTNESS * (max - min) + min;

        XRRChangeOutputProperty(dpy, output, backlight, XA_INTEGER,
                        32, PropModeReplace, (unsigned char *) &value, 1);
        XFlush(dpy);
        XSync(dpy, False);
        return 0;
}
//亮度.c
//gcc-o亮度c-lXrandr-lX11
#包括
#包括
#包括
#定义亮度0.5//目标亮度介于0.0和1.0之间
int main(int argc,char*argv[])
{
显示*dpy;
静态原子背光;
int屏幕=0,o=0;
窗根;
XRR资源*资源;
r输出;
XRPropertyInfo*信息;
双最小值,最大值;
长期价值;
dpy=XOpenDisplay(空);
背光=XInternAtom(dpy,“背光”,真);
根=根窗口(dpy,屏幕);
resources=xrrgetscreensources(dpy,root);
输出=资源->输出[o];
info=XRQueryOutputProperty(dpy、输出、背光);
最小值=信息->值[0];
max=info->value[1];
XFree(info);//不再需要这个了
xrrfreescreensources(resources);//或者这个
值=亮度*(最大-最小)+最小;
XRRChangeOutputProperty(dpy、输出、背光、XA_整数、,
32,PropModeReplace,(无符号字符*)和值,1);
XFlush(dpy);
XSync(dpy,False);
返回0;
}

看看power manager软件是如何在笔记本电脑上运行的。根据剩余的电池容量,它会使亮度略微变暗,直至完全关闭亮度。他的问题可能会重复标记为“linux”,这可能会将其缩小到足够小的范围,从而得出一个半途而废的解决方案。@John:是吗?我不太确定。此外,我认为Ben的观点是,没有任何东西将此功能与C联系在一起。我同意+1.是的,除了在我安装的ubuntu和fedora上运行外,这是不可移植的。我在问我如何与操作系统接口来改变亮度。@a三明治:那你最好在你的问题中写出来。这是非常有用的信息。:)@John,@a sandwich:我认为@sehe的工具列表说明了这个功能对硬件的依赖程度。在我的两次安装中/sys/class/backlight都没有任何内容。你说的戳是指寻找信息吗?对不起,你的笔记本电脑有背光吗?我说的“戳”是指“操纵”。如中所示,将一个值输入。我正在运行一个带有两个显示器的桌面,这会有区别吗?这会让世界上所有的人都有所不同。好的。如果我在其中创建了一个文件,我的计算机还会将其解释为操纵显示器的亮度吗?50%是否来自value=brightness*(max-min)+min;
// brightness.c
// gcc -o brightness brightness.c -lXrandr -lX11

#include <X11/Xatom.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xrandr.h>

#define BRIGHTNESS 0.5 // Target brightness between 0.0 and 1.0

int main(int argc, char *argv[])
{
        Display *dpy;
        static Atom backlight;
        int screen = 0, o = 0;
        Window root;
        XRRScreenResources *resources;
        RROutput output;
        XRRPropertyInfo *info;
        double min, max;
        long value;

        dpy = XOpenDisplay(NULL);
        backlight = XInternAtom (dpy, "Backlight", True);
        root = RootWindow(dpy, screen);
        resources = XRRGetScreenResources(dpy, root);
        output = resources->outputs[o];
        info = XRRQueryOutputProperty(dpy, output, backlight);
        min = info->values[0];
        max = info->values[1];
        XFree(info); // Don't need this anymore
        XRRFreeScreenResources(resources); // or this

        value = BRIGHTNESS * (max - min) + min;

        XRRChangeOutputProperty(dpy, output, backlight, XA_INTEGER,
                        32, PropModeReplace, (unsigned char *) &value, 1);
        XFlush(dpy);
        XSync(dpy, False);
        return 0;
}