【问题标题】:Possible to change screen brightness with C?可以用C改变屏幕亮度吗?
【发布时间】:2011-04-27 22:15:09
【问题描述】:

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

【问题讨论】:

  • 看看电源管理软件如何在笔记本电脑上运行。它会根据剩余电池容量稍微调暗亮度以完全关闭亮度。

标签: c linux screen-brightness


【解决方案1】:

我将从以下 ubuntu 软件包列表中进行选择,该工具可让您管理屏幕亮度(提示:取决于品牌)

nvidia-settings - Tool of configuring the NVIDIA graphics driver
smartdimmer - Change LCD brightness on Geforce cards
armada-backlight - adjust backlight of Compaq Armada laptops (E300, M500, M700)
ddccontrol - a program to control monitor parameters
eeepc-acpi-scripts - Scripts to support suspend and hotkeys on the Asus Eee PC laptop
fnfxd - ACPI and hotkey daemon for Toshiba laptops
gddccontrol - a program to control monitor parameters
spicctrl - Sony Vaio controller program to set LCD backlight brightness
tpb - program to use the IBM ThinkPad(tm) special keys
xfce4-power-manager - power manager for Xfce desktop
xfce4-power-manager-plugins - power manager plugins for Xfce panel
xvattr - Utility to change Xv attributes

一旦你选择了它,

sudo apt-get build-dep <pkgname>
apt-get source --compile <pkgname> 

应该让你走上正轨

【讨论】:

    【解决方案2】:

    /sys/class/backlight/*/brightness。是的,即使在 C 中也是如此。

    【讨论】:

    • 在我的两个安装中 /sys/class/backlight 里面什么都没有。你说的戳是指寻找信息吗?对不起。
    • 您的笔记本电脑背光吗? “戳”我的意思是“操纵”。如,输入一个值。
    • 我正在运行带有两个显示器的桌面,这有什么不同吗?
    • 它让 AAAAAAALL 与众不同。
    • 好的。如果我在其中创建了一个文件,我的计算机还会将其解释为操纵显示器亮度吗?
    【解决方案3】:

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

    【讨论】:

    • 他的问题被标记为“linux”,这可能会将其范围缩小到足以做出一个不错的解决方案。
    • @John:是吗?我不确定。另外,我认为 Ben 的观点是,没有任何东西可以将此功能与 C 联系起来。我同意。 +1。
    • 是的,除了在我安装的 ubuntu 和 fedora 上运行之外,预计它不会是可移植的。我在问我如何与操作系统交互来改变亮度。
    • @a sandwich:那么你最好在你的问题中写下来。这是非常有用的信息。 :)
    • @John, @a sandwich:我认为@sehe 的工具列表说明了此功能是如何依赖于硬件的。
    【解决方案4】:

    查看xbacklight source。例如,下面的代码将屏幕亮度设置为 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;
    }
    

    【讨论】:

    • 50% 是否来源于值 = BRIGHTNESS * (max - min) + min;
    猜你喜欢
    • 2020-11-23
    • 2013-04-13
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多