Purtroppo i restanti tasti non vengono nativamente riconosciuti (e mi riferisco soprattutto al Super Hybrid Engine) ed è per questo che sono nati alcuni software per sopperire a questa mancanza (vedasi eee-control e Jupiter), inoltre alcune distro (vedasi Archlinux e Debian) hanno creato script propri.
In questo articolo vi spiegherò come interagire con il demone Acpid per costruirsi i propri script fatti su misura.
Una domanda a questo punto sorge spontanea, perché dovrei perdere tempo a farmi degli script quando i vari eee-control, Jupiter e compagnia bella funzionano a dovere?
Ecco qualche motivo (personale) che mi ha indotto a questa scelta:
- Non sempre eee-control o Jupiter funzionano a dovere o fanno ciò che vogliamo.
- Non tutte le distribuzioni offrono nei loro repository i software sopracitati a meno di rocamboleschi adattamenti (vedete la mia guida per installare Sabayon su EeePc), quindi se vi piace provare le distribuzioni più esotiche non avrete problemi.
- Perchè una volta fatti sono portabili, li potrete usare su una qualsiasi distribuzione con il minimo sforzo e senza grandi modifiche (anche nessuna se siete come me).
- Perché eee-control e Jupiter si basano comunque sul demone Acpid, quindi perché avere un programma in più che beve dalla nostra ram quando possiamo delegare il tutto a Acpid (e si sà che certe persone sono molto brave a delegare)?
- Perché chi fa da se fa per tre ed è servito meglio di un re!!!
AVVISO!!!
In questa guida non ci sarà manna che scende dal cielo fornendovi degli script Acpi, sarete voi a farveli quindi è necessario che conosciate un minimo di alfabetizzazione dello scripting da terminale, in particolare l'unica cosa veramente indispensabile è avere manegevolezza con le variabili e sapere cos'è una condizionale e come si usa (if-else).
Fatta questa premessa prima di buttarci a capofitto assicuriamoci che sia caricato il modulo eeepc_laptop e che il demone Acpid sia in esecuzione, aprite un terminale e digitate:
lsmod | grep eeepcnel caso non compaia il suddetto modulo per avviarlo date il seguente comando
su -c 'modprobe eeepc_laptop'per acpid invece:
ps -e | grep acpide nel caso non compaia niente sempre da terminale per avviarlo date
su -c 'acpid'Inoltre ricordatevi che nel caso facciate qualche modifica all'interno della cartella /etc/acpi/events dovrete riavviare Acpid affinché abbia effetto.
Ora nel caso in cui abbiate altri software quali eee-control, Jupiter e compagnia bella, prima di procedere premuratevi di disabilitarli/disinstallarli in modo che non vadano in conflitto.
INIZIAMO
Tutto ciò che faremo ora avverrà all'interno della cartella /etc/acpi, nonostante sia possibile mettere gli script in altre cartelle io consiglio di metterli qui, sia perché in questo modo solo l'utente root potrà modificarli, sia perché così è piu facile copiarli da una distro ad un altra nel caso ne abbiate la necessità. Per quanto appena detto tutte le operazioni che verranno fatte di seguito necessiteranno dei privilegi di root, quindi non lo ripeterò in seguito, ma quando non esplicitamente specificato sentitevi liberi di usare quello che preferite tra su e sudo.
Ora bisognerà dire ad Acpid che alla pressione di un dato tasto (e quindi quando si genera un evento acpi) bisogna associare un determinato script e per fare ciò per ogni tasto che si vuole intercettare basterà mettere un file di testo nella cartella /etc/acpi/events adeguatamente formattato come vi spiegherò di seguito (più in basso vi spiegherò anche come mettere tutto in un unico file in modo da essere ancora più compatti).
Ogni file che create nella cartella /etc/acpi/events dovrà avere il seguente contenuto:
event=XXXXXXXXDove al posto di quelle XXXX ci va inserito l'evento acpi del tasto in questione; come reperire questo codice?
action=script-da-eseguire
Semplice aprite il vostro fido terminale e digitate il seguente comando (in questo caso non sono necessari i privilegi di root):
acpi_listen -c 1ora il terminale rimarrà in attesa che voi premiate la combinazione di tasti e quando lo farete vi restituirà in output il codice, ad esempio quando io premo Fn+F7 (che è il tasto per spegnere lo schermo) ottengo questo:
hotkey ATKD 00000016 00000002tralasciando l'ultimo gruppo di numeri che indica il numero di volte che è stato premuto quel tasto (nel mio caso 2) copiate tutto il resto e inseritelo al posto delle XXXX di prima... quindi sempre per fare un esempio nel mio caso avrò creato dentro la cartella /etc/acpi/events un file chiamato schermo con il seguente contenuto:
# potete anche inserire un commento anteponendo il cancellettoil file schermo.sh è lo script che viene eseguito alla pressione del tasto, è scritto in Bash e deve essere reso eseguibile, per tutto il resto può contenere tutto quello che vi passa per la testa.
event=hotkey ATKD 00000016
action=/etc/acpi/schermo.sh
Sempre a titolo esemplificativo vi posto il mio schermo.sh:
#!/bin/bashSemplice no? Ricordatevi di rendere eseguibile il suddetto file dando da terminale chmod +x file, nel mio caso:
#qualche commento fa sempre comodo
#la prima riga non è obbligatoria ma è buon costume metterla
xset dpms force off
chmod +x /etc/acpi/schermo.sh(come ho già specificato sopra queste operazioni vanno fatte da root)
ATTENZIONE!!!
Il demone Acpid viene eseguito da root, quindi qualsiasi script da esso eseguito avrà i privilegi di amministratore. Non è obbligatorio ma è caldamente consigliato che le operazioni per cui non siano strettamente necessari questi privilegi elevati vengano eseguite da utente normale, per fare ciò è sufficiente che al posto di dare un comando usiate la seguente sintassi:
su utente -c 'comando'dove al posto di utente dovrete mettere il nome dell'utente che utilizzate, mentre al posto di comando ci va naturalmente il comando che volete sia eseguito (qui fate attenzione agli apici, se il comando che dovete lanciare richiede dei parametri tra virgolette utilizzate le virgolette "" e non gli apici, se volete vedere un esempio date un'occhiata più in basso alla parte riguardante le notifiche).
Inoltre se fate lanciare dagli script un programma con interfaccia grafica potreste avere qualche problema (il problema è che non succede niente quando invece dovrebbe aprirsi il programma), se questo è il vostro caso dovrete aggiungere in cima ai vostri script questa riga:
export DISPLAY=:0
UNO SGUARDO AI FILE DI SISTEMA
Ora che avete visto come fare affinché il demone Acpid esegua un'azione da voi voluta alla pressione di un tasto, vi mostrerò quali sono i file di sistema su cui dovrete agire per poter gestire correttamente le periferiche del vostro EeePc (webcam, cardreader, SHE ecc) e si trovano tutti nella cartella /sys/devices/platform/eeepc.
AVVISO!!!
Nella seguente trattazione ometterò alcuni tasti funzione in quanto sono correttamente riconosciuti dall'ultimo Kernel, questi sono i tasto per la sospensione, wifi, luminosità e volume, nel caso il vostro Desktop Environment non li assegni di default dovreste poter comunque impostarli tra i settaggi del DE in questione.
Super Hybrid Engine
Se avete un EeePc con il processore Intel Atom potrete usare lo SHE per regolare le prestazioni della vostra CPU in base alle vostre esigenze.
Il file a cui dovete far riferimento si chiama cpufv e se andate a vedere il suo contenuto troverete qualcosa del tipo 0x30? dove al posto del punto interrogativo ci sarà un numero trà 0 1 o 2 a seconda se siete rispettivamente su Performance, Normal o Powersave.
Cambiare lo scaling è quindi molto semplice, vi basterà mettere il numero desiderato in questo file e il modo più semplice per farlo è usare il comando echo, da terminale e con i privilegi di amministratore (attenzione qui non va bene usare sudo, dovrete per forza usare su) date:
echo X > /sys/devices/platform/eeepc/cpufvmettendo al posto di X il numero che rappresenta il regime scelto.
NOTA!!
Il Super Hybrid Engine e lo scaling della cpu effettuato da cpufreq (le varie applet di gnome e kde per regolare la cpu) sono due cose diverse, infatti uno agisce sul moltiplicatore mentre l'altro sul Front Side Bus, quindi potrete usare entrambi senza conflitti.
Vediamo ora per completezza uno script che legge lo stato attuale dello SHE e scorre ciclicamente i vari profili:
#!/bin/bash
she="/sys/devices/platform/eeepc/cpufv"
case "$(cat $she)" in
0x300)
echo 2 > $she
;;
0x301)
echo 0 > $she
;;
0x302)
echo 1 > $she
;;
esac
WEBCAM
Il file di sistema relativo alla webcam è chiamato camera, è molto semplice e può assumere solo due valori: 0 per off e 1 per on, per cambiarne lo stato come già fatto per lo SHE potete usare il comando echo, inoltre quando spegnete la webcam potete anche rimuovere il modulo uvcvideo.
Vediamo un rapido esempio:
#!/bin/bash
camera="/sys/devices/platform/eeepc/camera"
if [ $(cat $camera) = 1 ]; then
modprobe -r uvcvideo
echo 0 > $camera
else
modprobe uvcvideo
echo 1 > $camera
fi
CARDREADER
Per il cardreader vale lo stesso discorso della webcam, il file di riferimento è cardr e assume il valore 0 per off e 1 per on. L'amico Valantin ci propone uno script per abilitarlo/disabilitarlo che nel secondo caso si assicura che il cardreader non sia in uso.
#!/bin/bashIn questo script viene fatto uso delle notifiche, per maggiori dettagli vedete la relativa sezione.
CARDR=`cat /sys/devices/platform/eeepc/cardr`
case $CARDR in
0)
echo 1 > /sys/devices/platform/eeepc/cardr
/usr/bin/notify-send "Cardreader" "Abilitato" -t 5000 2>/dev/null
;;
1)
SECURE=`ls -l /dev/disk/by-id/ | grep -c Single_Flash_Reader`
if [ $SECURE -gt 1 ]; then
/usr/bin/notify-send "Cardreader" "Ancora in uso" -t 5000 2>/dev/null
elif [ $SECURE -le 1 ]; then
echo 0 > /sys/devices/platform/eeepc/cardr
/usr/bin/notify-send "Cardreader" "Disabilitato" -t 5000 2>/dev/null
fi
;;
*)
/usr/bin/notify-send "Errore" "Problemi Cardreader" 2>/dev/null
;;
esac
WIFI
Per quanto riguarda il wifi come ho già detto sopra dovrebbe già essere riconosciuto, per i più curiosi però anche il wifi ha uno switch on-off così come per la webcam e il cardreader.
Per trovarlo, partendo sempre dalla cartella /sys/devices/platform/eeepc, andate nella cartella rfkill, dentro questa troverete un'altra cartella (o due se avete anche il bluetooth) all'interno della quale c'è il file state che è lo switch desiderato, potete farne uso nel caso vogliate farvi delle notifiche per il wifi visto che non tutti i DE ce l'hanno. Nel caso invece abbiate la necessità di attivare disattivare il wifi tramite script (se non viene automaticamente riconosciuto il tasto) vi consiglio di usare il comando rfkill che come vedrete è utile anche se avete il bluetooth.
BLUETOOTH
Il caro amico Valantin propone uno script per gestire il bluetooth, richiede però di aver installato il pacchetto rfkill, quindi nel caso non lo abbiate usate il vostro package manager di fiducia per procurarvelo.
#!/bin/bashQuesto script fa uso anche delle notifiche, per maggiori dettagli vedete la relativa sezione.
for i in /sys/class/rfkill/*; do
if [ -f "$i/name" ] && [ "$(cat "$i/name")" = "eeepc-bluetooth" ]; then
BT_STATE=`cat "$i/state"`
fi
done
case $BT_STATE in
0)
rfkill unblock bluetooth
/usr/bin/notify-send "Bluetooth" "Abilitato" -t 5000 2>/dev/null
;;
1)
rfkill block bluetooth
/usr/bin/notify-send "Bluetooth" "Disabilitato" -t 5000 2>/dev/null
;;
*)
/usr/bin/notify-send "Errore" "Problemi Blutooth" 2>/dev/null
;;
esac
SPEGNERE IL MONITOR
Riguardo lo spegnimento del monitor ho già fatto un esempio all'inizio, comunque non necessita la modifica di alcun file ma basta dare il seguente comando:
xset dpms force off
DISABILITARE IL TOUCHPAD
Anche per quanto riguarda il touchpad il controllo è molto semplice, in questo caso useremo il comando synclient in questo modo:
synclient TouchpadOff=1per spegnerlo, mentre basterà sostituire 0 a 1 per riattivarlo;
vediamo uno script di esempio:
#!/bin/bash
touchpad=$(synclient -l | grep TouchpadOff | awk '{print $3}')
if [ "$touchpad" = "0" ]; then
synclient TouchpadOff=1
else
synclient TouchpadOff=0
fi
CAMBIARE RISOLUZIONE
Nel caso abbiate la necessità di switchare la risoluzione a 1024x768 Valantin nel primo commento ha postato un utile script per farlo.
#!/bin/bash
RESOLUTION=`xrandr | grep LVDS1 | awk '{print $3}'`
case "$RESOLUTION" in
'1024x600+0+0')
xrandr --output LVDS1 --panning 1024x768
/usr/bin/notify-send "LCD Panning" "1024x768" -t 5000 2>/dev/null
;;
'1024x768+0+0')
PANNING=`xrandr | grep LVDS1 | awk '{print $15}'`
if [ "$PANNING" = 'panning' ]; then
xrandr --output LVDS1 --scale 1x1.28 --panning 0x0
/usr/bin/notify-send "LCD Scaling" "1024x768" -t 5000 2>/dev/null
else
xrandr --output LVDS1 --scale 1x1
/usr/bin/notify-send "LCD Default" "1024x600" -t 5000 2>/dev/null
fi
;;
*)
/usr/bin/notify-send "Errore" "impossibile cambiare risoluzione" 2>/dev/null
;;
esac
VARIE ED EVENTUALI
Potremmo andare avanti all'infinito a fare script, comunque ritengo che già questi coprano quasi la totalità delle necessità di un comune essere umano.
Se avete bisogno di altro vi consiglio caldamente di fare qualche ricerca su internet in quanto sicuramente l'argomento sarà stato ampiamente trattato, inoltre siccome credo che si impari più dalla pratica che dalla teoria vi consiglio di dare un'occhiata agli script acpi delle maggiori distribuzioni Gnu/Linux, in particolare a quelli di Archlinux reperibili sul relativo sito di googlecode http://code.google.com/p/acpi-eeepc-generic/.
NOTIFICHE
Siamo quasi giunti a conclusione...
Vediamo ora come aggiungere le notifiche ai vostri script in modo che vi appaia un bel messaggio quando spegnete la webcam o quando cambiate il profilo dello SHE.
Ci sono vari programmi per mandare a schermo delle notifiche ma in genere il più gettonato (presente in tutte le distro maggiori e minori) è notify-send facente parte del pacchetto libnotify, vediamo qual'è la sintassi:
notify-send "Titolo notifica" "testo notifica" -t 3000 -i "icona"dove il numero dopo -t è il tempo espresso in millisecondi per il quale la notifica rimarrà a schermo, mentre l'ozione -i vi permette di aggiungere un'immagine alla notifica (naturalmente il parametro tempo e l'icona non sono indispensabili, possono anche essere omessi). Inoltre potete impostare anche l'urgenza della notifica, vi basterà aggiungere l'opzione -u seguita da un parametro a scelta tra low, normal e critical.
Per gli utenti di Kde c'è a disposizione anche un'altro comando, integrato nel DE:
kdialog --passivepopup "testo notifica" 10dove il numero finale stavolta rappresenta il tempo espresso in secondi.
Vediamo ora un esempio di come sarebbe il mio script per spegnere il touchpad postato in precedenza con l'aggiunta delle notifiche:
#!/bin/bashNotate che ho utilizzato la sintassi su utente -c 'comando' e ho anche messo export DISPLAY=:0
export DISPLAY=:0
touchpad=$(synclient -l | grep TouchpadOff | awk '{print $3}')
if [ "$touchpad" = "0" ]; then
synclient TouchpadOff=1
su melko -c 'notify-send "EeePc" "Touchpad disabilitato" -t 4000'
else
synclient TouchpadOff=0
su melko -c 'notify-send "EeePc" "Touchpad abilitato" -t 4000'
fi
COMPATTARE IL TUTTO
Come vi avevo promesso all'inizio ora vi mostrerò come compattare il tutto in un unico file.
Il procedimento non è difficile... basta dire al demone Acpid di indirizzare tutti gli eventi che intercetta in un unico file.
Per fare questo torniamo nella cartella /etc/acpi/events
e creiamo un file con il seguente contenuto:
event=hotkey.*in questo modo Acpid ogni qual volta intercetta un evento di tipo hotkey invoca lo script eeepc_script.sh (potete metterci quello che volete, l'importante è che vi ricordiate di rendere eseguibile lo script attraverso l'uso di chmod +x nomefile) passandogli quattro variabili che sono semplicemente le stesse che vi dava acpi_listen...
action=/etc/acpi/eeepc_script.sh %e
Riprendendo l'esempio iniziale con il tasto per spegnere lo schermo con acpi_listen ottenevamo:
hotkey ATKD 00000016 00000002quindi le quattro variabili sono:
$1 = hotkeyora se mi avete seguito fin qui saprete che l'unico dato che ci interessa è il codice del tasto che è rappresentato dal terzo gruppo di numeri, quindi l'unica variabile che vi interessa è $3.
$2 = ATKD
$3 = 00000016
$4 = 00000002
detto ciò basterà utilizzare il costrutto if-else oppure case
e far eseguire i comandi relativi al tasto premuto;
inoltre per facilitarvi le cose vi consiglio caldamente l'uso delle funzioni in modo da rendere più leggibile il codice.
Vediamo ora un piccolo esempio del file eeepc_script.sh (per brevità ho inserito solo il comando per spegnere lo schermo, ma potete inserire tutti gli altri che sono stati elencati sopra):
#!/bin/bash
toggle_display()
{
su melko -c 'xset dpms force off'
}
export DISPLAY=:0
case "$3" in
00000016) #questo è il codice relativo al tasto per spegnere il display
toggle_display
;;
00000037) #qui ci va il codice di un altro tasto
#e qui ci mettete l'azione che dove essere eseguita
;;
00000018) #cosi andate avanti finché non avete messo tutti i tasti
#con le relative azioni, ricordatevi la comodità delle funzioni
;;
esac
function resolution {
RispondiEliminaRESOLUTION=`xrandr | grep LVDS1 | awk '{print $3}'`
case "$RESOLUTION" in
'1024x600+0+0')
xrandr --output LVDS1 --panning 1024x768
/usr/bin/notify-send "LCD Panning" "1024x768" -u critical -t 5000 -i "/usr/share/icons/gnome/32x32/devices/video-display.png" 2>/dev/null
;;
'1024x768+0+0')
PANNING=`xrandr | grep LVDS1 | awk '{print $15}'`
if [ "$PANNING" = 'panning' ]; then
xrandr --output LVDS1 --scale 1x1.28 --panning 0x0
/usr/bin/notify-send "LCD Scaling" "1024x768" -u critical -t 5000 -i "/usr/share/icons/gnome/32x32/devices/video-display.png" 2>/dev/null
else
xrandr --output LVDS1 --scale 1x1
/usr/bin/notify-send "LCD Default" "1024x600" -u critical -t 5000 -i "/usr/share/icons/gnome/32x32/devices/video-display.png" 2>/dev/null
fi
;;
*)
/usr/bin/notify-send "Errore" "impossibile cambiare risoluzione" -u critical 2>/dev/null
;;
esac
}
function toogle_cardreader {
CARDR=`cat /sys/devices/platform/eeepc/cardr`
case $CARDR in
0)
echo 1 > /sys/devices/platform/eeepc/cardr
/usr/bin/notify-send "Cardreader" "Abilitato" -u critical -t 5000 -i "/usr/share/icons/gnome/32x32/devices/media-flash.png" 2>/dev/null
;;
1)
SECURE=`ls -l /dev/disk/by-id/ | grep -c Single_Flash_Reader`
if [ $SECURE -gt 1 ]; then
/usr/bin/notify-send "Cardreader" "Ancora in uso" -u critical -t 5000 -i "/usr/share/icons/gnome/32x32/devices/media-flash.png" 2>/dev/null
elif [ $SECURE -le 1 ]; then
echo 0 > /sys/devices/platform/eeepc/cardr
/usr/bin/notify-send "Cardreader" "Disabilitato" -u critical -t 5000 -i "/usr/share/icons/gnome/32x32/devices/media-flash.png" 2>/dev/null
fi
;;
*)
/usr/bin/notify-send "Errore" "Problemi Cardreader" -u critical 2>/dev/null
;;
esac
}
function toogle_bluetooth {
for i in /sys/class/rfkill/*; do
if [ -f "$i/name" ] && [ "$(cat "$i/name")" = "eeepc-bluetooth" ]; then
BT_STATE=`cat "$i/state"`
fi
done
case $BT_STATE in
0)
rfkill unblock bluetooth
/usr/bin/notify-send "Bluetooth" "Abilitato" -u critical -t 5000 2>/dev/null
;;
1)
rfkill block bluetooth
/usr/bin/notify-send "Bluetooth" "Disabilitato" -u critical -t 5000 2>/dev/null
;;
*)
/usr/bin/notify-send "Errore" "Problemi Blutooth" -u critical 2>/dev/null
;;
esac
}
in queste due funzioni c'è come cambiare risoluzione come avviene con il tasto sull'eeepc 1000h e come disattivare il cardreader controllando che non sia utilizzato :)
ottima guida ma arrivi in ritardo per essermi utile XD
il mio bel script è già scritto da tempo sul mio 1000h.
cmq per quanto riguarda la cosa del kernel e dei tasti funzione, penso che non sia così, dovrebbe essere udev a controllare i tasti e non direttamente il kernel.....
@Valantin
RispondiEliminacredo che uno come te non avrebbe avuto comunque bisogno di questo howto :D
anche io ce l'ho da tempo... è molto comodo, infatti avendo tutto in un file quando passo da una distro all'altra devo solo fare copia-incolla e sostituire il nome utente se diverso...
grazie per le funzioni per la risoluzione e bluetooth vedrò di integrare domani (oggi)
per quanto riguarda il cardreader a me ls -l /dev/disk/by-id/ | grep -c Single_Flash_Reader ritorna 2 avendo una SD nello slot nonostante non sia montata... quindi non lo disattiverebbe, però credo che la cosa possa dipendere anche da kde...
@Valantin
RispondiEliminaah per quanto riguarda i tastini e udev/kernel poi faccio una capatina su google e nel caso correggo
Utilissimo come al solito Melko, mi hai risparmiato una bel pò di ricerche sintetizzando il tutto in un' unica discussione!
RispondiEliminaGrazie anche a te Valantin relativamente all'implementazione dei comandi del cardreader e risoluzione display.
Ottimo davvero :)
wow davvero utilissimo! grazie e complimenti Melko!
RispondiEliminaottima guida grandissimo melko
RispondiEliminacuriostià così hai ancora problemi con le notifiche e per farle funzionare devi resettare acpid??
@Phoenix Fire
RispondiEliminanono ho risolto..
come ho scritto sopra se lancio un applicazione grafica con il comando
su melko -c 'comando' e avendo prima esportato la variabile DISPLAY=:0 partono bene anche le notifiche
@Valantin
RispondiEliminaSto dando un'occhiata alla funzione per la risoluzione, ma nel passaggio a 1024x768 dal bordo inferiore rimangono un paio di centimetri neri...
forse è dovuto a kde
@Melko
RispondiEliminaottimo allora, ma quel trucco del display non me lo consigliasti già a suo tempo e sulla mia config non funzionava o sbaglio??
@Phoenix Fire
RispondiEliminainfatti mi funziona solo se usato insieme al su -c ecc
@Phoenix Fire
RispondiEliminacomunque molto dipende anche dalla distro in questione...
con Sabayon non ho mai avuto nessun problema, posso lanciare le notifiche come mi pare e sono sempre apparse...
su Slackware invece il problema c'è ma basta esportare la variabile DISPLAY per farle funzionare;
su Frugalware invece non basta, addirittura li non funziona nemmeno se riavvio acpid, devo per forza metterci il comando per lanciarle da utente normale..
altre distro non le ho al momento quindi più di cosi non ti so dire
@Melkook hai saziato la mia sete di conoscenza :D
RispondiElimina@Melko è un problema tuo sicuramente.... su gnome ha sempre funzionato alla perfezione
RispondiEliminaciaoooo mi sono finalmente deciso a farmi i miei script ma ho un paio di problemi
RispondiElimina1) fatto il file in events e fatto il file in acpi; premendo il tasto collegato lo script non viene eseguito (faccio notificare una cosa tanto per vedere se va)
2) eseguendolo manualmente per vedere se funziona, mi viene chiesta la password, nonostante la inserisco mi viene dato "permission denied"
@Phoenix Fire
RispondiEliminase usi 'su' è normale che ti chieda la password (anche se lo fai su te stesso e non sull'utente root), strano invece che ti dia "permission denied", gli script li hai tutti in un file o hai un file per ogni script? nel secondo caso cosa fa lo script che stai provando?
per quanto riguarda il fatto che non faccia niente, hai riavviato acpid? il codice del tasto corrispondente è giusto? ( nota che il primo termine che in genere è ATKD non è uguale per tutti... ad esempio a me su Fedora diventa ASUS)
per vedere se funziona più che una notifica ti consiglio un echo su file cosi sei sicuro che non sia un problema di notifiche
visto che stavo imparando ho fatto uno script singolo per lo SHE per il discorso ATKD o ASUS, eccetera ho fatto acpi_listen e copincollato tutta la stringa (escluso of course la parte riguardante il numero di pressioni), ah poi altra cosa strana è che sto cercando di configurare i tasti argentati sul 901GO e un tasto (quello di ZOOM) produce due eventi acpid uno con asus e uno con ZOOM, come va gestita la cosa in questo caso?
RispondiElimina@Phoenix Fire
RispondiEliminaper quanto riguarda lo zoom si, alcuni tasti generano più di un evento... ad esempio anche quelli per regolare il volume... e in genere quando ciò accade significa che molto probabilmente non hai bisogno di usare acpid ma puoi benissimo impostare una shortcut direttamente dal tuo DE... comunque puoi anche usare l'evento acpi per fargli fare qualcosa (quello ASUS)...
per quanto riguarda il primo punto, se lo script per lo she è piu o meno simile a quello che ho messo io sopra allora è normale che eseguendolo ti dia un "permission denied", perché la password che lui ti chiede non è quella dell'utente root (i vari echo per cambiare lo stato dello she non sono preceduti dal 'su' perché acpid usa gli script direttamente da root) ma quella del tuo utente (sempre se hai usato la forma 'su -c ....' per far partire le notifiche)... quindi non riesce a cambiare lo stato dello she perché non ha i privilegi, ma comunque dovrebbe apparirti la notifica...
sul fatto invece che non ti funzioni quando usi il tasto è molto strano... se il nome dello script a cui l'evento punta è scritto correttamente e lo script è eseguibile allora deve funzionare...
lo script è uguale al tuo; ho anche provato a cambiare la variabile che usi sostituendo ad essa il percorso diretto con e senza virgolette per escludere eventuali problemi con le virgolette
RispondiEliminaper il discorso permessi le password per root e utente sono uguali (lo so che per questioni di sicurezza non è molto prudente ma almeno è comodo :D) quindi non vedo perchè nn dovrebbe andare :D
dimenticavo non so se centra qualcosa ma io ho un demone acpid e uno kacpid è normale? non fanno la stessa cosa tipo?
RispondiElimina@Phoenix Fire
RispondiEliminasisi riguardo kacpid è normale non preoccuparti...
per quanto riguarda la password mi sono spiegato male, acpid viene eseguito con i privilegi di root quindi non ha bisogno di nient'altro... il fatto che ti chieda la password se tu esegui lo script da terminale come utente è perché per evitare potenziali problemi, le applicazioni grafiche come notifiche e via dicendo ho consigliato di farle lanciare da utente normale e non da root.. e per fare questo uso il comando su utente -c comando... quando acpid va ad eseguire lo script, siccome ha privilegi elevati, non ha nessun problema a impersonare te, mentre se tu lo esegui a mano con privilegi bassi, anche se vuoi impersonare te stesso ti viene chiesta la password... ma "permission denied" non ti è dato su quest'ultima, ma sulle operazioni che vengono svolte prima, che presuppongono i privilegi di root (e non c'entra nulla il fatto che tu abbia impostato la password di root uguale a quella dell'utente, lo script in quel momento non ti sta chiedendo privilegi elevati per fare qualcosa, perché quelli presuppone di averli già)
comunque il modulo eeepc-laptop è caricato?
se si dovresti ritrovarti tutti i file riguardanti she, webcam ecc nella cartella /sys/devices/platform/eeepc o giù di li...
se ce li hai puoi provare anche a mettere temporaneamente qualche script "ufficiale", tipo quelli di arch, o anche jupiter (non eeecontrol perché funziona in modo diverso)... se non ti vanno nemmeno quelli il problema è a monte
ah ok ora ho capito il modulo è caricato tanto è vero che per gestire lo she ora sto facendo a mano con su-c 'echo bla bla bla'
RispondiEliminasono su fedora posso usare lo stesso quelli di arch? se si come?
mi sono autorisposto ricordando che tu ne consigliavi l'installazione su sabayon, sfruttando la tua guida ho installato gli script di arch funzionano però compare una notifica riguardante un problema
RispondiEliminaacpi-generic-handler: undefined group/action e poi una parte che dipende dal tasto/combinazione che premo sai cosa può essere?
@Phoenix Fire
RispondiEliminafunzionano in che senso? solo perché vedi la notifica o effettivamente riesci a cambiare lo she, ecc? perché a me quell'errore non fa pensare niente di buono...
prova a postare l'errore completo anche della parte riguardante il tasto... casomai postalo anche ripetendolo per tasti differenti
funziona effettivamente mi cambia lo she e mi attiva/disattiva la webcam; l'errore riguardante il tasto è roba del tipo button/wireless (che ricordo al volo) gli altri appena posso li posto
RispondiElimina@Phoenix Fire
RispondiEliminabene allora non c'è nessun problema, quindi non ci sono santi che tengano, lo script per lo she ti deve funzionare
casomai prova a indirizzare tutti gli eventi in un unico script e in questo mettici che ti stampa su file le quattro variabili date dalla riga di acpi_listen (la parte COMPATTIAMO IL TUTTO della guida)...
se te li prende allora puoi iniziare a modificare quel file scremandolo come ho specificato nella parte finale.
ok appena posso provo2 domande al volo come si stampa su file?? :D
RispondiEliminae per il messaggio di errore?
@Phoenix Fire
RispondiEliminaper il messaggio di errore sono andato a rileggermi gli script di arch, e è un messaggio che da quando non riconosce l'hotkey... ma se te lo dava solo per il wifi non c'è da preoccuparsi perché il wifi funziona gia senza bisogno di script.
Per stampare su file basta che reindirizzi l'output di echo... ad esempio per provare potresti fare:
echo $1 $2 $3 >> /home/phoenix/acpi_log
così ti stampa una riga corrispondente all'evento generato dalla pressione del tasto
me lo da per tutte le combinazioni di tasti funzione e per tutti i tasti argentati :D compresi wifi she volume luminosità camera cardreader per questo non mi sentirei di ignorarli :D
RispondiElimina@Phoenix Fire
RispondiEliminase te lo da allora sei a cavallo...
aggiungi un po di if-else a piacere come ho indicato nella guida e costruisciti anche tu i tuoi script...
e non dimenticare la colla vinilica :D
mi sa che mi hai frainteso intendevo l'errore me lo da con tutto non solo col wifi e lo da anche se faccio gestire l'evento al sistema e non agli script (lascio vuoto il comando corrispettivo)
RispondiEliminapensavo che dicendo che nn mi sentirei di ignorarlo si capisse
@Phoenix Fire
RispondiEliminaah ok allora ho frainteso alla grande
guardando il file acpi-eeepc-generic-handler.sh (che dovresti avere nella cartella /etc/acpi) questa è la sezione che ti riguarda:
case "$1" in
battery|processor)
.....
....
....
hotkey)
.....
.....
*)
msg="acpi-eeepc-generic-handler: undefined group/action ($1) event: $2 $3 $4"
eeepc_notify "$msg" keyboard
logger "$msg"
;;
esac
che non è altro che un costrutto condizionale sulla prima parola dell'output di acpi_listen (che per i tastini dovrebbe essere "hotkey")...
quindi il fatto che entri nell'ultimo caso e ti dia quel messaggio significa l'evento generato dalla pressione del tasto non è tra quelli conosciuti e quindi non sa che farci...
ora siccome hai detto che comunque a funzionare funzionano non riesco a capire come possa darti quel messaggio visto che non ci dovrebbe nemmeno entrare in quella parte di codice se funziona...
l'unica spiegazione che mi viene in mente è che, se come hai detto, acpi_listen alla pressione di un tasto ti genera più di un evento, allora può darsi che l'evento 'hotkey ATDK 00000* ecc" venga visto e venga quindi eseguita la corrispettiva azione, mentre l'altro no.. però questo dovrebbe accaderti solo per quei tasti che generano più di un evento e non per tutti...
comunque ti dicevo di ignorarli perché ti ho fatto mettere gli script di Arch solo per testare il corretto funzionamento di Acpid... l'importante è che l'evento ti venga catturato correttamente, perché è l'unica condizione necessaria e sufficiente.
Quindi poi prova a far stampare su file quella robba che ti ho detto sopra e agisci di conseguenza.
PS.
Scusa se ti rispondo un giorno si e l'altro no, ma la ventola del mio eeepc è andata a farsi benedire e non impreco solo perché fortunatamente è inverno.
ok grazie per l'aiuto fino a adesso ora appena finisco il reinstall (che devo modificare le partizioni del net) mi butto sugli script
RispondiEliminaper il tempo di risp nessun problema anzi grazie dell'impegno
MAGIA
RispondiEliminanon so cosa sbagliavo prima o in cosa stavo antipatico al net ma ora funzionano sia gli script che le notifiche
ottimo allora :D
RispondiEliminadomandina tecnica sulle notifiche, avrei l'esigenza di stampare a schermo dei numeri ottenuti con cat come faccio? leggendo gli script che scrisse a suo tempo lacunoso io avevo fatto una cosa del genere:
RispondiEliminaCARD_ST=`cat /sys/devices/platform/eeepc/cardr`
case "${CARD_ST}" in
0)
CARD=`echo Off`
;;
1)
CARD=`echo On`
;;
*)
CARD=`echo N/A`
;;
esac
su Giuseppe -c 'notify-send "EeePC Status" "Cardreader: ${CARD}" -t 2500 -i "/percorso/icona.png"'
lo script mostra la notifica ma non mostra niente al posto della variabile, immagino sia un problema derivante dal fatto che io piazzo tutto il comando all'interno del su 'comando' cosa che forse modifica la sostituzione delle variabili (visto che sullo script originale si usava un altro metodo per le notifiche) hai idea di come possa risolvere questo problema?
@Phoenix Fire
RispondiEliminasi naturalmente entrando in un ambiente differente non si porta dietro le variabili...
hai due modi
1)prima di stampare la notifica esportare la variabile
export CARD
2)passare la variabile al comando
CARD=$CARD su Giuseppe -c blablabla
a te la scelta...
PS.
se la variabile CARD assume solo valori fissi perché usi echo?
bastava un
CARD="on"
CARD="off"
e CARD="N/A"
quindi basta che a inizio script faccio
RispondiEliminaexport VAR per tutte le variabili e mettere nella stampa ${CARD}?
la seconda è stata fatta per ignoranza ho visto che lacunoso fece così è ho pensato fosse quello il modo giusto visto che all'inizio con le "" non fungeva ignorando che il problema fosse un altro :D
volendo puoi anche assegnare un valore alla variabile mentre la esporti:
RispondiEliminaexport CARD="off"
come vedi le vie dello scripting sono infinite :D
si però dovrei esportarla dentro l'if cosa che mi è scomoda visto che nello script io mi stampo lo stato di tutto il net (she, cardreader, cam eccetera)
RispondiElimina@Phoenix Fire
RispondiEliminase lo script serve a stampare solo lo status delle varie periferiche non ti conviene metterlo in un file separato nella cartella bin della tua home e poi richiamarlo dagli script acpi?
così lo puoi usare anche in altri contesti e ti risparmi anche di esportare variabili e di usare su -c ecc perché lo eseguiresti direttamente da root e non da utente ;)
spiegati meglio :D
RispondiEliminaio farei uno script che stampa lo status e lo metto in bin, e lo faccio stampare tramite notify-send ma senza il su prima? e l'export display?
ulima dopmanda da interrogatorio che cosa dovrei inserire nello script acpi?
su utente -c "./script.sh"?
fai uno script e lo metti nella tua home o dove preferisci (io ce l'ho nella cartella ~/bin che è aggiunta nel PATH cosi anche da terminale posso richiamarlo ovunque)
RispondiEliminalo script fa normalmente quello che deve fare, senza l'uso di export DISPLAY, su -c e robba varia perché quelli li metti soltanto negli script acpi
negli script acpi oltre a esportare la variabile DISPLAY dai un su -c '/home/utente/percorso/script.sh/' e il gioco è fatto
ok tra stasera e domani mi ci metto e faccio tutto
RispondiEliminaSalve a tutti, da qualche settimana mi trovo a frequentare questo blog, e mi sembra doveroso complimentarmi con tutti per l'ottimo lavoro svolto, e ringraziandovi per aver realizzato un portale italiano dedicato ai netbook in ambiente linux.
RispondiEliminaDetto questo, devo dire di aver riscontrato qualche problemino con il mio asus 1215n:
1)in /etc/acpi ho trovato i file per la gestione della luminosità e in events il file dove inserire il codice del tasto.
Dopo aver fatto casini, credo di aver rimesso tutto a posto ma sfortunatamente la luminosità non funziona più
posto i file in seguito:
asus-brn-down.sh
#!/bin/sh
test -f /usr/share/acpi-support/key-constants || exit 0
. /usr/share/acpi-support/key-constants
acpi_fakekey $KEY_BRIGHTNESSDOWN
e l'altro:
event=hotkey (ATKD|HOTK) 0000002
action=/etc/acpi/if-asus-not-eee.sh asus-brn-down.sh
il mio tasto è questo:
hotkey ASUS010:00 00000029
(quando lo premo lo schermo lampeggia)
(gli altri problemi riguardano il wireless e lo she ma è meglio affrontarli uno per volta)
ringrazio anticipatamente tutti quelli che si interesseranno al problema.
di norma la luminosità è l'unica cosa che funziona senza complicazioni...
RispondiEliminaricordo che sugli eeepc più moderni bisognava aggiungere acpi_backlight=vendor tra i parametri del kernel nel file di configurazione di grub.
Se non dovesse bastare prova a dare un'occhiata qua:
http://wiki.daviddarts.com/Ubuntu_Maverick_on_the_Asus_UL30VT#Screen_Brightness_.28Backlight.29