Я пишу программу на C для изменения яркости экрана, так как xbacklight не работает в моих обстоятельствах.Решение должно быть собственным C (без функции system ()), потому что программа должна быть исполняемой как обычный пользователь через setuid.Вызов внешних команд оболочки или сценариев заставляет ядро игнорировать этот бит.
Чтение proc-файла, управляющего яркостью, работает нормально, но запись в него с использованием C не дает результата, даже если я запускаю программу от имени root.Вызов fprintf возвращает -130, что указывает на ошибку.В качестве проверки работоспособности я включил работающее решение, используя system () в качестве комментария.
[...]
const char* brightness = "/sys/class/backlight/intel_backlight/brightness";
f = fopen(brightness, (!strncmp(argv[1], "get", 3)) ? "r" : "rw");
[...]
int get_brightness() {
int buff;
fscanf(f, "%d", &buff);
return buff;
}
int set(int i) {
i = MAX(0, MIN(255, i));
fprintf(f, "%d", i);
printf("%d", i);
//char *cmd = (char*) malloc(59 *sizeof(char));
//snprintf(cmd, 59, "echo %d > %s", i, brightness);
//system(cmd);
//free(cmd);
}