[NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Schede NVIDIA!

Riconoscimento, installazione e configurazione delle periferiche.
Scrivi risposta
nEcR0SoFt
Prode Principiante
Messaggi: 43
Iscrizione: venerdì 25 febbraio 2005, 13:28

[NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Schede NVIDIA!

Messaggio da nEcR0SoFt »

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);
			}
		}
	}
}
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!
Ultima modifica di nEcR0SoFt il mercoledì 1 aprile 2009, 17:30, modificato 1 volta in totale.
Avatar utente
LicaoNesSs
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1054
Iscrizione: venerdì 13 febbraio 2009, 3:23

Re: [NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Schede NVIDIA!

Messaggio da LicaoNesSs »

cosa posso dire :) sei un fico lol
hacking inside   (good) (good)
Mad Macaco Fan Club
Q: How many Marxists does it take to screw in a light bulb?
A: None:  The light bulb contains the seeds of its own revolution.
zerocool87
Prode Principiante
Messaggi: 56
Iscrizione: giovedì 19 aprile 2007, 0:17

Re: [NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Schede NVIDIA!

Messaggio da zerocool87 »

va in segmentation fault
nEcR0SoFt
Prode Principiante
Messaggi: 43
Iscrizione: venerdì 25 febbraio 2005, 13:28

Re: [NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Sch

Messaggio da nEcR0SoFt »

zerocool87 ha scritto: va in segmentation fault
A me funziona alla perfezione...sicuro di aver configurato tutto nel modo giusto? Non son stato ad ottimizzare e il check sull'esistenza del file non lo fa...se il file non esiste o qualche path è sbagliato può essere che vada in segmentation....idem se il file nascosto .nvidia-bright non ha i permessi di accesso giusti...
zerocool87
Prode Principiante
Messaggi: 56
Iscrizione: giovedì 19 aprile 2007, 0:17

Re: [NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Schede NVIDIA!

Messaggio da zerocool87 »

adesso non porta segmentation fault ma questo errore ERROR: Error parsing assignment 'brightness=-0.100000' (Trailing garbage).
nEcR0SoFt
Prode Principiante
Messaggi: 43
Iscrizione: venerdì 25 febbraio 2005, 13:28

Re: [NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Sch

Messaggio da nEcR0SoFt »

zerocool87 ha scritto: adesso non porta segmentation fault ma questo errore ERROR: Error parsing assignment 'brightness=-0.100000' (Trailing garbage).
Prima era sicuramente un problema di path, ora c'è un errore nel comando che va a lanciare relativo all'nvidia. Il comando che gli faccio lanciare è:

nvidia-settings -a brightness="valore". Non so se può essere diverso a seconda delle versioni del driver che monti, io monto i 177 mi pare...prova ad eseguire da console quel comando e vedere se da console va a buon fine perchè potrebbe essere che la sintassi sia diversa, magari, in versioni diverse. Sui valori di assegnamento a me non ha mai dato problemi...
Ultima modifica di nEcR0SoFt il giovedì 2 aprile 2009, 13:22, modificato 1 volta in totale.
zerocool87
Prode Principiante
Messaggi: 56
Iscrizione: giovedì 19 aprile 2007, 0:17

Re: [NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Schede NVIDIA!

Messaggio da zerocool87 »

da shell funziona  in effetti  :o
nEcR0SoFt
Prode Principiante
Messaggi: 43
Iscrizione: venerdì 25 febbraio 2005, 13:28

Re: [NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Sch

Messaggio da nEcR0SoFt »

zerocool87 ha scritto: da shell funziona  in effetti  :o
Allora è un bug (uno dei molti :D) che dovrei verificare...vattelapesca che condizioni diverse dalle mie puoi avere...se gli dai da shell tipo:

nvidia-brightness -a brightness=-0.100000 ti da errore? Va solo con '=-0.1'? Non ho mai visto quell'errore nei miei test...
Ultima modifica di nEcR0SoFt il giovedì 2 aprile 2009, 13:25, modificato 1 volta in totale.
zerocool87
Prode Principiante
Messaggi: 56
Iscrizione: giovedì 19 aprile 2007, 0:17

Re: [NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Schede NVIDIA!

Messaggio da zerocool87 »

;D ;D niente di che ...cmq pensavo di potere sistemare il problema della luminosità dello schermo,ma questo aumenta la luminosità da software e non hardwar :( >:(
nEcR0SoFt
Prode Principiante
Messaggi: 43
Iscrizione: venerdì 25 febbraio 2005, 13:28

Re: [NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Sch

Messaggio da nEcR0SoFt »

zerocool87 ha scritto: ;D ;D niente di che ...cmq pensavo di potere sistemare il problema della luminosità dello schermo,ma questo aumenta la luminosità da software e non hardwar :( >:(
eh bhe, si, lo fa tramite nvidia che è l'unico modo veloce per poterlo fare...ma dimmi una cosa, che versione di driver nvidia stai usando?
zerocool87
Prode Principiante
Messaggi: 56
Iscrizione: giovedì 19 aprile 2007, 0:17

Re: [NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Schede NVIDIA!

Messaggio da zerocool87 »

la versione è la 180.11
nEcR0SoFt
Prode Principiante
Messaggi: 43
Iscrizione: venerdì 25 febbraio 2005, 13:28

Re: [NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Sch

Messaggio da nEcR0SoFt »

zerocool87 ha scritto: la versione è la 180.11
C'è qualcosa che non gli piace nel valore di brillantezza che calcolo ma nella mia versione è ok che è la 177 se ricordo bene, ora non ce l'ho sottomano....
nEcR0SoFt
Prode Principiante
Messaggi: 43
Iscrizione: venerdì 25 febbraio 2005, 13:28

Re: [NVidia] Quando i tasti Fn+LuminositàUP/DOWN non funzionano...Workaround Schede NVIDIA!

Messaggio da nEcR0SoFt »

Comunque, prova a sostituire in questa riga:

sprintf(retn_fbright, "%lf", retn_bright);

%lf con %g e vedi se va...
Scrivi risposta

Ritorna a “Driver e periferiche”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti