3

Linux で C を使用して、表示画面の明るさを変更することはできますか? これは、私のインストールした Ubuntu と Fedora で実行する以外は、移植可能であるとは予想されていません。OSとインターフェースして明るさを変更する方法について質問しています。

4

4 に答える 4

8

画面の明るさを管理できるツールである次の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> 

あなたを正しい軌道に乗せるはずです

于 2011-04-27T22:34:33.690 に答える
5

突く/sys/class/backlight/*/brightness。はい、C でも。

于 2011-04-27T22:33:36.980 に答える
2

はい。ただし、移植性はありません。プラットフォーム固有の関数が必要です。C 標準ライブラリには何もありません。

于 2011-04-27T22:19:25.447 に答える
1

xbacklight ソースを確認してください。たとえば、次のコードは画面の明るさを 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;
}
于 2013-08-09T18:47:11.990 に答える