Pregunta

Usando C en Linux, ¿sería posible cambiar el brillo de la pantalla de visualización? No se espera que esto sea portátil que no sea ejecutar en mis instalaciones de Ubuntu y Fedora. Estoy preguntando cómo interactuaría con el sistema operativo para cambiar el brillo.

¿Fue útil?

Solución

Comenzaría con la selección de la siguiente lista de Ubuntu Pacakges, la herramienta que le permite administrar el brillo de su pantalla (sugerir: depende de la marca)

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

Una vez que lo hayas seleccionado,

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

Debería llevarte al camino correcto

Otros consejos

Dar un toque /sys/class/backlight/*/brightness. Sí, incluso en C.

Sí, pero no portátil: necesita una función específica de la plataforma, no hay nada en la biblioteca estándar C.

Revisar la Fuente de XBacklight. Por ejemplo, el siguiente código establece el brillo de la pantalla en 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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top