Вот мое решение проблемы яркости:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(int args, char **argv)
{
FILE *f;
int cur_br, new_br;
char cmd[256] = { 0, };
if (args <= 1 || strnlen(argv[1], 256) >= 256) {
printf("Set the screen brightness:\n\tbr 0-852 or [+-]\n\n");
exit(1);
}
f = fopen("/sys/class/backlight/intel_backlight/brightness", "r+");
if (f) {
fscanf(f, "%d", &cur_br);
fprintf(stderr, "%d\t%s", cur_br, argv[1]);
if (strncmp(argv[1], "-", 1) == 0) {
new_br = (int)((float)cur_br / 1.1);
} else if (strncmp(argv[1], "+", 1) == 0) {
new_br = (int)((float)(cur_br + 1) * 1.1);
} else {
new_br = atoi(argv[1]);
}
if (new_br < 0) {
new_br = 0;
} else if (new_br > 852) {
new_br = 852;
}
fprintf(stderr, "\t%d\n", new_br);
fprintf(f, "%d", new_br);
fclose(f);
}
return 0;
}
Я понятия не имею, почему 852 - это магическое число для максимальной яркости (выведено методом проб и ошибок). Я связал свои клавиши яркости, чтобы вызвать этот исполняемый файл (имеет suid set) с + или - как args. Если вы случайно установили яркость в 0: D, вы всегда можете выполнить с 500 (или 852) в качестве параметра.