Newsgroup: it.comp.os.linux.sys
Titolo: Notifica evento

Ho bisogno di gestire a modo mio un evento che arriva tramite ACPI.
Mi sono fatto quindi un programma apposito e funziona perfettamente.
Come ultima 'finezza', vorrei notificare il completamento alla sessione
XFCE aperta.
Ho quindi usato il comando 'notify-send', ma senza raggiungere lo scopo.
Cioč, una esecuzione di notify-send dentro una finestra dentro XFCE, invia
regolarmente la segnalazione; mentre l'esecuzione a seguito di un evento
ACPI non ottiene nulla.
A intuito, immagino che nel secondo caso il comando sia eseguito a carico
del sistema e che quindi non sia in grado di scegliere la sessione grafica
destinataria (anche se ce n'č una sola).
Come posso fare a eseguire il comando come se fosse lanciato dall'unico
utente attivo, in modo che la notifica vada sull'unica console grafica
attiva ?
Alternative ?
 
-- 
Beppe


 
Ho qualche spezzone di script che avevo usato per alcune prove tempo 
fa... ma non ricordo esattamente l'esito di tali prove e non avevo 
approfondito il problema :-)
 
Non garantisco niente ma se vuoi curiosare/provare, questo script (forse 
incompleto) dovrebbe eseguire il resto della sua command line 
impersonando l'utente della sessione x attiva... Quindi qualcosa del tipo
pippo.sh notify-send ecc...
 
Perchč funzioni l'utente all'interno della sessione x deve "consentirlo" con
xhost +local:
 
Inoltre il formato di alcune variabili presumo dipenda dalla distro e 
dall'ambiente, quindi non credo sia "generalizzabile" piů di tanto :-(
 
Se ottieni qualcosa di utile, mi farebbe piacere che me lo facessi 
sapere cosě finisco questo vecchio script :-)
Ad esempio, come si potrebbe ricavare DISPLAY senza "imporlo" ?
 
 
 
LOGGED_IN_USER=`ls -trl /tmp/.ICE-unix/ | tail -n -1 | cut -d' ' -f3`
NUM_X_USERS=`echo $LOGGED_IN_USER | wc -l`
 
if [ $NUM_X_USERS -eq 1 ]; then
su -c "export HOST=`hostname` ;
export SESSION_ID=`ls -t /tmp/.ICE-unix/ | head -n1` ;
export DISPLAY=:0.0 ;
export 
SESSION_MANAGER=local/$HOST:@/tmp/.ICE-unix/$SESSION_ID,unix/$HOST:/tmp/.ICE-unix/$SESSION_ID 
;
export DBUS_SESSION_BUS_ADDRESS=`cat /proc/$(pidof xfce4-panel)/environ 
| tr '\0' '\n' | grep DBUS_SESSION_BUS_ADDRESS | cut -d '=' -f2-` ;
$*" $LOGGED_IN_USER
	fi

 | tr '\0' '\n' | grep DBUS_SESSION_BUS_ADDRESS | cut -d '=' -f2-` ;
 
ops, avevo il cervello disconnesso e non mi sono accorto che DISPLAY si 
può trovare nello stesso modo di DBUS_SESSION_BUS_ADDRESS :-)

 fa... 
 
KO.
Usando il tuo esempio ho fatto un piccolo script dedicato esclusivamente ad
inviare un messaggio di prova.
Per buona misura, ho anche tracciato l'esecuzione con 'set -x' ed ho
aggiunto un 'echo ... > /dev/tty1'.
Le variabili sono tutte assegnate correttamente; se si esegue
esplicitamente dentro una console della sessione X il messaggio arriva, ma
se si fa eseguire a seguito di un evento ACPI resta muto.
Comunque non mi arrendo: mi hai dato uno spunto molto interessante e molte
chiavi di ricerca.
 
-- 
Beppe

 se si fa eseguire a seguito di un evento ACPI resta muto.
 
Quando avevo fatto quello script su opensuse, ricordo di avere avuto 
anche io problemi relativi agli eventi acpi, nel senso che gli eventi 
stessi non venivano rilevati, oppure gli script relativi non venivano 
proprio eseguiti...
 
Penso che sicuramente avrai già provato, comunque nel dubbio te lo 
chiedo: se lo script invece di mostrare una notifica si limita a loggare 
qualcosa in un file (senza tirare in ballo l'ambiente grafico), questo 
avviene?

 avviene?
 
Sě.
Ho inserito un 'echo ... > /dev/tty1' immediatamente prima di notify-send.
A seguito dell'evento ACPI, il primo arriva (quindi lo script viene
sicuramente eseguito), il secondo no. 
 
-- 
Beppe


 
Verificato che non sia legato a xhost ?
Dall'utente di X devi eseguire xhost +local:
 
Scusa se mi ripeto, ma ero stato un po' confuso nel primo mio post ...

 Dall'utente di X devi eseguire xhost +local:
...
 
L'ho fatto.
Perň devo confessare che ho fatto tutto un po' frettolosamente e quindi ci
sta che abbia commesso qualche errore.
Appena possibile ripeto tutto dall'inizio e con piů calma.
Poi torno a riferire.
 
-- 
Beppe