Linux Mint Cinnamon, positionner la luminosité en ligne de commande

2012-09-07

Il est possible d’utiliser les fichiers :

  • /sys/class/backlight/acpi_video0/max_brightness
  • /sys/class/backlight/acpi_video0/brightness afin de modifier la luminosité. Le script suivant prend un numérique (pourcentage entre 0 et 100) et modifie le fichier /sys/class/backlight/acpi_video0/brightness en conséquent.
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int is_numeric(const char *p) {
  if (*p) {
    char c;
    while ((c=*p++)) {
      if (!isdigit(c)) return 0;
    }
    return 1;
  }
  return 0;
}

int
main(int argc, char *argv[]) {
  if (argc != 2) {
    fprintf(stderr, "Usage: %s <brightness>\n\nwhere brightness is an integer between 0 and 100\n", argv[0]);
    exit(1);
  }
  if (! is_numeric(argv[1])) {
    fprintf(stderr, "The given parameter '%s' is not an integer between 0 and 100.\n", argv[1]);
    exit(1);
  }
  int percent = atoi(argv[1]);
  if (percent < 0 || percent > 100) {
    fprintf(stderr, "The given parameter '%s' is not an integer between 0 and 100.\n", argv[1]);
    exit(1);
  }


  char *path = "/sys/class/backlight/acpi_video0/max_brightness";
  FILE *fp = fopen(path, "r");
  if (fp == NULL) {
    char buf[512];
    snprintf(buf, sizeof(buf), "The following error occurred while opening '%s'", path);
    perror (buf);
    exit(1);
  }
  char line[256];
  if (fgets(line, sizeof(line), fp) == NULL) {
    fprintf(stderr, "Can not read maximal brightness in file '%s'\n", path);
    exit(1);
  }
  int maxbrightness = atoi(line);
  fclose(fp);
  int newbrightness = maxbrightness * percent / 100;
  printf("Set brightness to %d/%d (%d%%)\n", newbrightness, maxbrightness, percent);
  path = "/sys/class/backlight/acpi_video0/brightness";
  fp = fopen(path, "w");
  if (fp == NULL) {
    char buf[512];
    snprintf(buf, sizeof(buf), "The following error occurred while opening '%s'", path);
    perror (buf);
    exit(1);
  }
  fprintf(fp, "%d\n", newbrightness);
  fclose(fp);
}
```   Toutefois, pour exécuter ce fichier, il faudra être root (sudo ou SUID bit positionné sur l'exécutable une fois compilé).   

Note: après rédaction de ce post, j'ai découvert que le paquet `xbacklight` met à disposition un utilitaire du même genre.  

```bash
$ xbacklight -set 0

Il permet la même chose sauf en mode console…