[NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Schede NVIDIA!
Inviato: mercoledì 1 aprile 2009, 17:25
Ciao!
Non so se sono proprio nella sezione giusta, ma volevo riportare la mia esperienza e la mia soluzione riguardo all'aumento/diminuzione della luminosità quando i tasti Fn non funzionano utilizzando una scheda video Nvidia.
Problema: io ho un samsung X460 e non sembrano volere sapere di funzionare i tasti Fn+Up/Down che servono per la regolazione dell'illuminazione dello schermo. Utilizzando Xev o Xkeysbind pare proprio che i tasti Fn non vengano riconosciuti come evento anche se l'aumento/diminuzione dell'audio funziona.
Target: ottenere una combinazione di tasti che permetta l'aumento/diminuzione della luminosità per le schede video Nvidia.
Workaround: volendo mantenere una combinazione di tasti che regola la luminosità il problema si risolve installando xkeysbind (così che possa funzionare su ogni ambiente grafico la suddetta combinazione) configurandolo in modo da fargli chiamare un programmino che regoli la luminosità. Il "bello" viene qui, nel senso che mi sono scritto un piccolo programma C per fare questo. Il codice è il seguente:
1. Copiate il codice in un file dal nome nvidia-bright.c cambiando la stringa /home/your_root/.nvidia-bright con il percorso della vostra home.
2. Eseguite gcc nvidia-bright.c -o nvidia-bright
3. Copiate nvidia-bright (è l'eseguibile ottenuto dalla compilazione precedente) in /usr/bin.
4. Create nella vostra home un file nascosto col nome '.nvidia-bright' e scriveteci dentro semplicemente 0 (zero).
5. Installate xkeysbind e andate nel suo file di configurazione (/home/utente/.xbindkeysrc). A questo punto potete aggiungere una cosa tipo:
"nvidia-bright UP"
Ctrl+Up
"nvidia-bright DOWN"
Ctrl+Down
6. Godetevi l'aumento/diminuzione della luminosità del vostro notebook!
Ciao!
Non so se sono proprio nella sezione giusta, ma volevo riportare la mia esperienza e la mia soluzione riguardo all'aumento/diminuzione della luminosità quando i tasti Fn non funzionano utilizzando una scheda video Nvidia.
Problema: io ho un samsung X460 e non sembrano volere sapere di funzionare i tasti Fn+Up/Down che servono per la regolazione dell'illuminazione dello schermo. Utilizzando Xev o Xkeysbind pare proprio che i tasti Fn non vengano riconosciuti come evento anche se l'aumento/diminuzione dell'audio funziona.
Target: ottenere una combinazione di tasti che permetta l'aumento/diminuzione della luminosità per le schede video Nvidia.
Workaround: volendo mantenere una combinazione di tasti che regola la luminosità il problema si risolve installando xkeysbind (così che possa funzionare su ogni ambiente grafico la suddetta combinazione) configurandolo in modo da fargli chiamare un programmino che regoli la luminosità. Il "bello" viene qui, nel senso che mi sono scritto un piccolo programma C per fare questo. Il codice è il seguente:
Codice: Seleziona tutto
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <limits.h>
#define BRIGHT_C 0.10;
int main(int argc, char **argv) {
//Brightness bounds.
double UP_LIMIT = 0;
double DOWN_LIMIT = -0.5;
//Path and command.
char *path_fbright = "/home/your_root/.nvidia-bright";
char nvidia_cmd_bright[LINE_MAX] = "brightness=";
char *nvidia_cmd[] = { "nvidia-settings", "-a", nvidia_cmd_bright, NULL };
//String version of final command and brightness values.
char nvidia_cmd_offs[LINE_MAX];
char curr_fbright[LINE_MAX];
char retn_fbright[LINE_MAX];
//Current brightness.
double curr_bright;
//New brightness.
double retn_bright;
//File descriptor.
FILE *path_ffd;
//----->START OPS.
//Check params.
if(argc < 2) {
printf("Usage: nvidia-bright UP/DOWN\n");
return -1;
}
//Opn the file that contains current brightness.
path_ffd = fopen(path_fbright, "r");
//Read current brightness.
fgets(curr_fbright, LINE_MAX, path_ffd);
//Convert to double the current brightness.
curr_bright = atof(curr_fbright);
//Returned brightness.
if(strcmp(argv[1], "UP") == 0 || strcmp(argv[1], "up") == 0) {
retn_bright = curr_bright + BRIGHT_C;
}
else if(strcmp(argv[1], "DOWN") == 0 || strcmp(argv[1], "down") == 0) {
retn_bright = curr_bright - BRIGHT_C;
}
else {
printf("Usage: nvidia-bright UP/DOWN\n");
fclose(path_ffd);
return -1;
}
//Close the readed file.
fclose(path_ffd);
//Performs brightness adjustment if bounds are ok.
if(retn_bright >= DOWN_LIMIT) {
if(retn_bright <= UP_LIMIT) {
//Convert in string the new brightness.
sprintf(retn_fbright, "%lf", retn_bright);
int nvidia_pid = fork();
if(nvidia_pid == 0) {
//Generate the command.
strcat(nvidia_cmd_bright, retn_fbright);
if(execv("/usr/bin/nvidia-settings", nvidia_cmd) == -1) {
printf("Error starting nvidia-settings command! %s\n", nvidia_cmd_bright);
return -1;
}
else {
exit(0);
}
}
else {
//Write new brightness.
path_ffd = fopen(path_fbright, "w");
fputs(retn_fbright, path_ffd);
fflush(path_ffd);
fclose(path_ffd);
exit(0);
}
}
}
}
2. Eseguite gcc nvidia-bright.c -o nvidia-bright
3. Copiate nvidia-bright (è l'eseguibile ottenuto dalla compilazione precedente) in /usr/bin.
4. Create nella vostra home un file nascosto col nome '.nvidia-bright' e scriveteci dentro semplicemente 0 (zero).
5. Installate xkeysbind e andate nel suo file di configurazione (/home/utente/.xbindkeysrc). A questo punto potete aggiungere una cosa tipo:
"nvidia-bright UP"
Ctrl+Up
"nvidia-bright DOWN"
Ctrl+Down
6. Godetevi l'aumento/diminuzione della luminosità del vostro notebook!
Ciao!