【发布时间】:2011-04-27 22:15:09
【问题描述】:
在 Linux 中使用 C,是否可以更改查看屏幕的亮度?除了在我安装的 Ubuntu 和 Fedora 上运行之外,预计它不会是可移植的。我在问我将如何与操作系统交互以改变亮度。
【问题讨论】:
-
看看电源管理软件如何在笔记本电脑上运行。它会根据剩余电池容量稍微调暗亮度以完全关闭亮度。
标签: c linux screen-brightness
在 Linux 中使用 C,是否可以更改查看屏幕的亮度?除了在我安装的 Ubuntu 和 Fedora 上运行之外,预计它不会是可移植的。我在问我将如何与操作系统交互以改变亮度。
【问题讨论】:
标签: c linux screen-brightness
我将从以下 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>
应该让你走上正轨
【讨论】:
戳/sys/class/backlight/*/brightness。是的,即使在 C 中也是如此。
【讨论】:
是的,但不是可移植的——你需要一个特定于平台的函数,C 标准库中没有。
【讨论】:
查看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;
}
【讨论】: