[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Touche de fonction sur protable



Bonjour à tous,

La seule touche de fonction qui est activée sur mon portable c'est
#define KEY_SLEEP               142     /* SC System Sleep */

Avec Fn Esc

Cf.
/usr/include/linux/input.h

J'ai vérifié avec:
showkey -k
C'est bien 142.

D'autre part, deux raccourci de fonction que j'aimerais en priorité c'est
Fn flèche bas
et
Fn flèche haut
correspondant respectivement à :
 
#define KEY_BRIGHTNESSDOWN      224
#define KEY_BRIGHTNESSUP        225

Comment faire pour que ça marche ?

Pour contourner cette difficulté, j'utilise xbindkeys, mais ça ne marche que sous X, ce qui ne m'arrange pas trop :

#Augmanter le luminausité
"sudo setbrightness +1 &"
        XF86MonBrightnessUp

# Dimiuer la luminosité
"sudo setbrightness -1 &"
        XF86MonBrightnessDown
Dans .xbindkeysrc.

Quant à setbrightness, c'est un bout de code C qui écrit dans l'ACPI.
Merci à je ne sais plus qui (tu n'as pas signé ton code, mais tu le reconnaîtras) sur cette liste pour l'exemple,de code que j'ai adapté à mon ACPI.

Comment lier:
setbrightness +1 à #define KEY_BRIGHTNESSUP        225 (Fn flèche haut)
et
setbrightness -1 à #define KEY_BRIGHTNESSDOWN      224 (Fn flèche bas)
En mode console(sans X) ?

Ou est-ce définit pour :
KEY_SLEEP               142     /* SC System Sleep */

Avec Fn Esc ?
Si je vois comment c'est fait pour la mise en veille, j'aurai probablement l'inspiration pour les autres touches de fonction.

Merci d'avance


#include <stdio.h>
#include <stdlib.h>

#define BRIGHTNESS_FILE "/sys/class/backlight/acpi_video0/brightness"
#define MAX_BRIGHTNESS_FILE "/sys/class/backlight/acpi_video0/max_brightness"
//#define PRINT_DEBUG 1

void mod_brightness(int delta);
void set_brightness(int bright);
int get_brightness();
int get_max_brightness();

int main(int nbParam, char *argVect[])
{
  int bright = 0;
  int is_delta = 0;

  // si le nombre de paramètres est inférieur à 2 il n'y en a pas assez
  if (nbParam < 2)
    {
      printf("%s [+|-]VALUE\n", argVect[0]);
      exit(EXIT_FAILURE);
    }

  // argVect[0] contient le nom de l'exécutable
  //atoi retourne la valeur numérique du tableau de caractère contenu dans argVect[1]
  bright = atoi(argVect[1]);
  if (argVect[1][0] == '+' || bright < 0) // si argVect[1] contient +n OU -n
    is_delta = 1;

  if (is_delta)
    {
#ifdef PRINT_DEBUG
      if (bright > 0)
	printf("Increasing brightness by %d\n", bright);
      else if (bright < 0)
	printf("Decreasing brightness by %d\n", -bright);
#endif
      mod_brightness(bright);
    }
  else
    {
#ifdef PRINT_DEBUG
      fprintf(stderr, "Setting brightness to %d\n", bright);
#endif
      set_brightness(bright);
    }

  return 0;
}

void mod_brightness(int delta)
{
  int bright;

  bright = get_brightness(BRIGHTNESS_FILE);
#ifdef PRINT_DEBUG
  fprintf(stderr, "Old brightness was %d\n", bright);
#endif
  bright += delta;
  set_brightness(bright);
}

void set_brightness(int bright)
{
  FILE *fd;
  int brightnessMax = get_brightness(MAX_BRIGHTNESS_FILE);

  if (bright < 0)
    bright = 0;
  else if (bright > brightnessMax)
    bright = brightnessMax;
  fd = fopen(BRIGHTNESS_FILE, "w");
  if (!fd)
    {
      perror("Unable to open " BRIGHTNESS_FILE);
      exit(EXIT_FAILURE);
    }
  fprintf(fd, "%d\n", bright);
  if (ferror(fd))
    {
      perror("Unable to write " BRIGHTNESS_FILE);
      exit(EXIT_FAILURE);
    }
  fclose(fd);
}

int get_brightness(char *nomFichier)
{
  FILE *fd;
  char buffer[64];
  size_t r;

  fd = fopen(nomFichier, "r");
  if (!fd)
    {
      perror(nomFichier);
      exit(EXIT_FAILURE);
    }
  r = fread(buffer, 1, 63, fd);
  if (ferror(fd) || !r)
    {
      perror(nomFichier);
      exit(EXIT_FAILURE);
    }
  fclose(fd);
  buffer[r] = 0;
  return atoi(buffer);
}

Reply to: