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: