View previous topic :: View next topic |
Author |
Message |
fbcyborg Advocate
Joined: 16 Oct 2005 Posts: 3056 Location: ROMA
|
Posted: Sun Feb 26, 2012 5:48 pm Post subject: [RISOLTO]ACPID è razzista:esegue solo i comandi che gli pare |
|
|
Scusate il titolo un po' a modalità sfogo, ma è la realtà.
In rete ho trovato uno script che fa la seguente cosa: attiva il touchpad se è disattivato e viceversa.
È semplicissimo e funziona alla grande:
Code: | if [ $(synclient -l | grep TouchpadOff | awk '{print $3}') = "2" ]; then synclient TouchpadOff=1; elif [ $(synclient -l | grep TouchpadOff | awk '{print $3}') == "1" ]; then synclient TouchpadOff=2; else synclient TouchpadOff=2; fi |
Funziona da root e da utente. Una favola.
Ebbene, sul mio laptop ho un tasto (F1) che su winsozz premuto in combinazione con Fn abilita e disabilita il touchpad. Vorrei fare la stessa cosa su Linux, quindi avendo trovato quello script, che funziona, vorrei bindarlo all'evento ACPI che viene catturato tramite la pressione di quella combinazione di tasti: Fn+F1.
Ecco cosa ho fatto:
Code: | tail -0f /var/log/messages |
Ho scoperto che l'evento da catturare è questo:
Code: | button/fnf1 FNF1 00000080 00000000 |
Quindi ho creato un file con il seguente contenuto:
/etc/acpi/events/fn_f1: | event=button/fnf1 FNF1 00000080 00000000
action=/etc/acpi/actions/toggle_touchpad.sh |
Il file toggle_touchpad.sh contiene appunto lo script sopra riportato.
Ebbene, riavvio acpid, e provo: niente. Il touchpad non viene disattivato.
Se invece provo a scrivere "wall hello world" (senza le virgolette) dopo "action=", funziona.
Mi viene notificata la scritta "hello world". Quindi l'evento viene catturato.
Ma allora perché lo scriptino che ho messo io non funziona?
Da solo funziona, in acpid no. Perché? _________________ [HOWTO] Come criptare la /home usando cryptsetup e luks
[HOWTO] Abilitare il supporto al dom0 XEN su kernel 3.X
Help answer the unanswered
Last edited by fbcyborg on Tue Feb 28, 2012 9:28 am; edited 1 time in total |
|
Back to top |
|
|
MajinJoko l33t
Joined: 20 Sep 2005 Posts: 639 Location: Bergamo / Verona
|
Posted: Sun Feb 26, 2012 6:57 pm Post subject: |
|
|
perdona la stupidità.
è eseguibile? (permessi di esecuzione, partizione in noexec)
tutto qui _________________ [(.. watashi wa Urumi Kanzaki ga suki da ..)] |
|
Back to top |
|
|
fbcyborg Advocate
Joined: 16 Oct 2005 Posts: 3056 Location: ROMA
|
|
Back to top |
|
|
xdarma l33t
Joined: 08 Dec 2003 Posts: 719 Location: tra veneto e friuli (italy)
|
Posted: Sun Feb 26, 2012 8:21 pm Post subject: Re: ACPID è razzista: esegue solo i comandi che gli pare |
|
|
/etc/acpi/events/fn_f1: | event=button/fnf1 FNF1 00000080 00000000
action=/etc/acpi/actions/toggle_touchpad.sh |
Prova ad aggiungere "%e" in coda ad "action=..." _________________ proud user of faKeDE-4.7.3 -> back to windowmaker -> moved to LXQt |
|
Back to top |
|
|
fbcyborg Advocate
Joined: 16 Oct 2005 Posts: 3056 Location: ROMA
|
|
Back to top |
|
|
Zizo Apprentice
Joined: 04 Feb 2010 Posts: 200 Location: Padova, Italy
|
Posted: Mon Feb 27, 2012 7:08 am Post subject: |
|
|
Aggiungerei qualche echo/wall di debug che chiarisca se lo script viene eseguito ma non fa nulla o non viene eseguito proprio (cosa che dovresti già capire da messages). Per sicurezza proverei ad utilizzare i percorsi completi. |
|
Back to top |
|
|
fbcyborg Advocate
Joined: 16 Oct 2005 Posts: 3056 Location: ROMA
|
Posted: Mon Feb 27, 2012 8:11 am Post subject: |
|
|
Zizo wrote: | Aggiungerei qualche echo/wall di debug che chiarisca se lo script viene eseguito ma non fa nulla o non viene eseguito proprio (cosa che dovresti già capire da messages). Per sicurezza proverei ad utilizzare i percorsi completi. |
Allora, i percorsi, anzi il percorso che uso è completo, infatti:
Code: | action=/etc/acpi/actions/toggle_touchpad.sh |
Come ho scritto nel primo post, se provo con un "wall" funziona, infatti il popup del messaggio compare.
In pratica quello script (qualsiasi script "più complesso" e non un semplice comando) viene ignorato.
Infatti, anche se inserisco la seguente linea in "action=" senza richiamare script esterni non funziona lo stesso:
Code: | if [ $(synclient -l | grep TouchpadOff | awk '{print $3}') = "2" ]; then synclient TouchpadOff=1; elif [ $(synclient -l | grep TouchpadOff | awk '{print $3}') == "1" ]; then synclient TouchpadOff=2; else synclient TouchpadOff=2; fi |
Se metto "action=wall hello" funziona.
È come se non volesse eseguire istruzioni complesse. Fra l'altro questa è una cosa che un tempo facevo senza problemi, seguendo una vecchia guida riportata qui.
Al momento della pressione di Fn+F1 il log riporta quanto segue:
Code: | acpid: received input layer event "button/fnf1 FNF1 00000080 00000000"
acpid: rule from /etc/acpi/events/fn_f1 matched
acpid: executing action "/etc/acpi/actions/toggle_touchpad.sh"
acpid: action exited with status 1
acpid: rule from /etc/acpi/events/default matched
acpid: executing action "/etc/acpi/default.sh button/fnf1 FNF1 00000080 00000000"
nobody: ACPI event unhandled: button/fnf1 FNF1 00000080 00000000
acpid: action exited with status 0
acpid: 2 total rules matched
acpid: completed input layer event "button/fnf1 FNF1 00000080 00000000"
acpid: received netlink event "sony/hotkey SNY5001:00 00000001 0000000c"
acpid: rule from /etc/acpi/events/default matched
acpid: executing action "/etc/acpi/default.sh sony/hotkey SNY5001:00 00000001 0000000c"
nobody: ACPI event unhandled: sony/hotkey SNY5001:00 00000001 0000000c
acpid: action exited with status 0
acpid: 1 total rule matched
acpid: completed netlink event "sony/hotkey SNY5001:00 00000001 0000000c"
acpid: received netlink event "sony/hotkey SNY5001:00 00000001 0000003b"
acpid: rule from /etc/acpi/events/default matched
acpid: executing action "/etc/acpi/default.sh sony/hotkey SNY5001:00 00000001 0000003b"
nobody: ACPI event unhandled: sony/hotkey SNY5001:00 00000001 0000003b
acpid: action exited with status 0
acpid: 1 total rule matched
acpid: completed netlink event "sony/hotkey SNY5001:00 00000001 0000003b" |
Sinceramente non capisco. Prima esce con stato 1 e poi con stato 0. Inoltre è come se la pressione del tasto fosse multipla, mentre invece io premo una volta sola.
In ogni caso rispondo subito alla domanda "ma se è così allora il touchpad viene disattivato e riattivato subito?": no perché ho provato anche uno script diverso che lo disattiva e basta tramite xinput, e il problema rimane. _________________ [HOWTO] Come criptare la /home usando cryptsetup e luks
[HOWTO] Abilitare il supporto al dom0 XEN su kernel 3.X
Help answer the unanswered |
|
Back to top |
|
|
Zizo Apprentice
Joined: 04 Feb 2010 Posts: 200 Location: Padova, Italy
|
Posted: Mon Feb 27, 2012 10:13 am Post subject: |
|
|
Stando al log riportato la pressione del tasto genera tre eventi:
Code: | - Pressione: button/fnf1 FNF1 00000080 00000000
sony/hotkey SNY5001:00 00000001 0000000c
- Rilascio: sony/hotkey SNY5001:00 00000001 0000003b |
Hai deciso di utilizzare l'evento "button/fnf1 FNF1 00000080 00000000" e alla sua occorrenza eseguire lo script "/etc/acpi/actions/toggle_touchpad.sh".
Acpid ubbidisce all'ordine ma lo script fallisce ed esce con un errore:
Code: | acpid: received input layer event "button/fnf1 FNF1 00000080 00000000"
acpid: rule from /etc/acpi/events/fn_f1 matched
acpid: executing action "/etc/acpi/actions/toggle_touchpad.sh"
acpid: action exited with status 1 |
Questo permette di circoscrivere il problema allo script.
Per "utilizzare i percorsi completi" intendo infatti all'interno di quest'ultimo, usando per esempio (ipotizzo) "/usr/bin/synclient" anzichè solo "synclient", questo nel caso acpid non utilizzi un ambiente completo e uno dei comandi dello script non sia presente nel PATH usato.
Inoltre quando riporti lo script noto l'assenza della riga di shebang "#!/bin/sh". |
|
Back to top |
|
|
fbcyborg Advocate
Joined: 16 Oct 2005 Posts: 3056 Location: ROMA
|
Posted: Mon Feb 27, 2012 11:44 am Post subject: |
|
|
A parte il fatto che non capisco perché lo script non funzioni quando è la prima volta che lo lancio da riga di comando, comunque il motivo per cui non funziona è sicuramente un altro.
Anche posizionandolo in /usr/bin/toggle_touchpad.sh non cambia nulla.
Zizo wrote: | Stando al log riportato la pressione del tasto genera tre eventi:
Code: | - Pressione: button/fnf1 FNF1 00000080 00000000
sony/hotkey SNY5001:00 00000001 0000000c
- Rilascio: sony/hotkey SNY5001:00 00000001 0000003b |
Hai deciso di utilizzare l'evento "button/fnf1 FNF1 00000080 00000000" e alla sua occorrenza eseguire lo script "/etc/acpi/actions/toggle_touchpad.sh".
Acpid ubbidisce all'ordine ma lo script fallisce ed esce con un errore:
Code: | acpid: received input layer event "button/fnf1 FNF1 00000080 00000000"
acpid: rule from /etc/acpi/events/fn_f1 matched
acpid: executing action "/etc/acpi/actions/toggle_touchpad.sh"
acpid: action exited with status 1 |
Questo permette di circoscrivere il problema allo script. |
OK, e questo ci sta, ma il valore di ritorno 1 ci dice poco.
Zizo wrote: |
Per "utilizzare i percorsi completi" intendo infatti all'interno di quest'ultimo, usando per esempio (ipotizzo) "/usr/bin/synclient" anzichè solo "synclient", questo nel caso acpid non utilizzi un ambiente completo e uno dei comandi dello script non sia presente nel PATH usato. |
Hai ragione, non avevo capito.
Comunque ci ho provato ma non funziona lo stesso.
Zizo wrote: |
Inoltre quando riporti lo script noto l'assenza della riga di shebang "#!/bin/sh". |
Quello è colpa mia. Ho riportato lo script ma senza il #!/bin/sh, in realtà c'è.
Ecco lo script completo (funzionante se lanciato da riga di comando), con i percorsi completi:
Code: | #!/bin/bash
if [ $(/usr/bin/synclient -l | grep TouchpadOff | awk '{print $3}') = "2" ]; then /usr/bin/synclient TouchpadOff=1; elif [ $(/usr/bin/synclient -l | grep TouchpadOff | awk '{print $3}') == "1" ]; then /usr/bin/synclient TouchpadOff=2; else /usr/bin/synclient TouchpadOff=2; fi |
EDIT:
Comunque ecco cosa rileva acpi_listen alla pressione di Fn+F1:
Code: | button/fnf1 FNF1 00000080 00000000
sony/hotkey SNY5001:00 00000001 0000000c
sony/hotkey SNY5001:00 00000001 0000003b |
Forse catturo l'evento sbagliato?
EDIT: No... anche impostando "sony/hotkey SNY5001:00 00000001 0000003b" come event, non cambia nulla. _________________ [HOWTO] Come criptare la /home usando cryptsetup e luks
[HOWTO] Abilitare il supporto al dom0 XEN su kernel 3.X
Help answer the unanswered |
|
Back to top |
|
|
djinnZ Advocate
Joined: 02 Nov 2006 Posts: 4831 Location: somewhere in L.O.S.
|
Posted: Mon Feb 27, 2012 1:22 pm Post subject: |
|
|
fbcyborg wrote: | #!/bin/sh
if [ $(/usr/bin/synclient -l | grep TouchpadOff | awk '{print $3}') = "2" ]; then /usr/bin/synclient TouchpadOff=1; elif [ $(/usr/bin/synclient -l | grep TouchpadOff | awk '{print $3}') == "1" ]; then /usr/bin/synclient TouchpadOff=2; else /usr/bin/synclient TouchpadOff=2; fi | Poi ti lamenti che ti tratto male... (perché escogiti sempre modi per far venire il mal di testa al prossimo, una sintassi del genere la si usa per le azioni in linea singola)
Sprecarti ad usare la corretta indentazione è male?
Correggi lo script (così è una ciofeca da windozziani o da utonti ubuntu, quanto meno dovrebbe gestire gli stati di uscita di synclient e generarne di propri) e prova se Code: | source /etc/profile | o Code: | action=/bin/sh -c /etc/[i]vattelappesca[/i] | sono d'aiuto.
In questi ambiti si deve essere sempre minimalisti, inverosimilmente minimalisti... e rigorosamente posix ... e si usano le funzioni builtin della shell ... ma capisco che è un modo troppo antiquato di pensare ... _________________ scita et risus abundant in ore stultorum sed etiam semper severi insani sunt
mala tempora currunt...mater stultorum semper pregna est
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist |
|
Back to top |
|
|
fbcyborg Advocate
Joined: 16 Oct 2005 Posts: 3056 Location: ROMA
|
Posted: Mon Feb 27, 2012 1:39 pm Post subject: |
|
|
Grazie djinnZ.
Dunque, gli errori che ho commesso, sono semplicemente frutto del fatto che di bash non ne capisco assolutamente niente. Sebbene abbia esperienza con altri linguaggi di programmazione, bash è ancora una barriera che spero di oltrepassare presto.
Non mi vergogno di ripetere che quello script l'ho trovato su Internet e che è quasi del tutto arabo per me... più che altro la sintassi.
Ovviamente capisco la logica ecc.. ma non sarei mai stato in grado di scriverlo in bash.
Sull'indentazione sono d'accordo. Hai perfettamente ragione. Sono solito usarla fra l'altro.
Di sicuro lo script va migliorato. Magari provo a fare qualcosa, per quel poco che ne capisco.
Di sicuro così è più leggibile:
/etc/acpi/actions/toggle_touchpad.sh: | #!/bin/bash
if [ $(/usr/bin/synclient -l | grep TouchpadOff | awk '{print $3}') = "2" ]; then
/usr/bin/synclient TouchpadOff=1;
elif [ $(/usr/bin/synclient -l | grep TouchpadOff | awk '{print $3}') == "1" ]; then
/usr/bin/synclient TouchpadOff=2;
else
/usr/bin/synclient TouchpadOff=2;
fi |
/etc/acpi/events/fn_f1: | event=button/fnf1 FNF1 00000080 00000000
action=/bin/sh -c /etc/acpi/actions/toggle_touchpad.sh |
Di fatto però non cambia nulla:
tail -0f /var/log/messages: |
acpid: received input layer event "button/fnf1 FNF1 00000080 00000000"
acpid: rule from /etc/acpi/events/fn_f1 matched
acpid: executing action "/bin/sh -c /etc/acpi/actions/toggle_touchpad.sh"
acpid: action exited with status 1
acpid: rule from /etc/acpi/events/default matched
acpid: executing action "/etc/acpi/default.sh button/fnf1 FNF1 00000080 00000000"
nobody: ACPI event unhandled: button/fnf1 FNF1 00000080 00000000
acpid: action exited with status 0
acpid: 2 total rules matched
acpid: completed input layer event "button/fnf1 FNF1 00000080 00000000"
acpid: received netlink event "sony/hotkey SNY5001:00 00000001 0000000c"
acpid: rule from /etc/acpi/events/default matched
acpid: executing action "/etc/acpi/default.sh sony/hotkey SNY5001:00 00000001 0000000c"
nobody: ACPI event unhandled: sony/hotkey SNY5001:00 00000001 0000000c
acpid: action exited with status 0
acpid: 1 total rule matched
acpid: completed netlink event "sony/hotkey SNY5001:00 00000001 0000000c"
acpid: received netlink event "sony/hotkey SNY5001:00 00000001 0000003b"
acpid: rule from /etc/acpi/events/default matched
acpid: executing action "/etc/acpi/default.sh sony/hotkey SNY5001:00 00000001 0000003b"
nobody: ACPI event unhandled: sony/hotkey SNY5001:00 00000001 0000003b
acpid: action exited with status 0
acpid: 1 total rule matched
acpid: completed netlink event "sony/hotkey SNY5001:00 00000001 0000003b" |
Ho fatto anche il source /etc/profile come consigliato ovviamente. _________________ [HOWTO] Come criptare la /home usando cryptsetup e luks
[HOWTO] Abilitare il supporto al dom0 XEN su kernel 3.X
Help answer the unanswered |
|
Back to top |
|
|
armaoin Tux's lil' helper
Joined: 02 Apr 2006 Posts: 110
|
Posted: Mon Feb 27, 2012 5:45 pm Post subject: |
|
|
Non funziona perchè synclient lanciato da quell'ambiente non riesce a connettersi al server X ed esce con errore.
Per rendertene conto ti basta aggiungere la riga:
Code: | synclient -l 2> /tmp/log |
in testa allo script.
Andando ad esaminare il log vedrai:
/tmp/log: |
Failed to connect to X Server.
|
|
|
Back to top |
|
|
fbcyborg Advocate
Joined: 16 Oct 2005 Posts: 3056 Location: ROMA
|
|
Back to top |
|
|
armaoin Tux's lil' helper
Joined: 02 Apr 2006 Posts: 110
|
Posted: Mon Feb 27, 2012 7:33 pm Post subject: |
|
|
Strano. A me dava quell'errore per cui ho pensato che fosse uguale per il tuo sistema. Il fatto che il file venga creato ma è vuoto indica che lo script viene eseguito ma che synclient non da errori (2> redirige lo stderr).
A questo punto vedi cosa succede con:
Code: | #!/bin/sh
/usr/bin/synclient -l > /tmp/log1 2> /tmp/log2 |
In log1 troverai lo standard output del comando mentre in log2 gli errori; affinché il tuo script possa funzionare in log1 ci dovrebbero essere tutti i vari valori restituiti da synclient, ma probabilmente sarà vuoto. |
|
Back to top |
|
|
fbcyborg Advocate
Joined: 16 Oct 2005 Posts: 3056 Location: ROMA
|
Posted: Mon Feb 27, 2012 8:04 pm Post subject: |
|
|
armaoin wrote: | Strano. A me dava quell'errore per cui ho pensato che fosse uguale per il tuo sistema. |
Non lo so... può anche darsi che io stia sbagliando qualcosa, ma mi pare di aver fatto bene.
armaoin wrote: | Il fatto che il file venga creato ma è vuoto indica che lo script viene eseguito ma che synclient non da errori (2> redirige lo stderr). |
In realtà quel comando, da l'errore "Failed to connect to X Server." solo se lo lancio via SSH da remoto, e ci sta che succeda quella cosa.
Invece, quando lo lancio dal PC in questione, l'output è questo (notare riga 1).
armaoin wrote: |
A questo punto vedi cosa succede con:
Code: | #!/bin/sh
/usr/bin/synclient -l > /tmp/log1 2> /tmp/log2 |
In log1 troverai lo standard output del comando mentre in log2 gli errori; affinché il tuo script possa funzionare in log1 ci dovrebbero essere tutti i vari valori restituiti da synclient, ma probabilmente sarà vuoto. |
log1 è vuoto, mentre log2 sputa fuori il famoso "Failed to connect to X Server".
Non ci sto capendo più nulla. _________________ [HOWTO] Come criptare la /home usando cryptsetup e luks
[HOWTO] Abilitare il supporto al dom0 XEN su kernel 3.X
Help answer the unanswered |
|
Back to top |
|
|
armaoin Tux's lil' helper
Joined: 02 Apr 2006 Posts: 110
|
Posted: Mon Feb 27, 2012 8:13 pm Post subject: |
|
|
Abbiamo quindi appurato che il problema è che synclient lanciato in quell'ambiente non funziona in quanto non riesce a trovare X. Probabilmente bisogna impostare qualche variabile d'ambiente per far si che synclient possa connettersi al server (mi viene in mente DISPLAY ad esempio), ma purtroppo dovrai aspettare qualcuno che ne capisce più di me per risolvere il problema. |
|
Back to top |
|
|
fbcyborg Advocate
Joined: 16 Oct 2005 Posts: 3056 Location: ROMA
|
|
Back to top |
|
|
armaoin Tux's lil' helper
Joined: 02 Apr 2006 Posts: 110
|
Posted: Mon Feb 27, 2012 8:36 pm Post subject: |
|
|
fbcyborg wrote: | OK.
Prima di iniziare questo thread, stavo pensando ad una cosa: si potrebbe usare sudo per lanciare lo script dall'utente correntemente loggato invece che da root?
Poi magari non funziona... |
Scusa ma non ho capito perchè dovresti lanciarlo da root. Se vuoi lanciare lo script manualmente lo puoi usare benissimo da utente normale (non c'è bisogno di essere root per impostare il touchpad con synclient).
Personalmente non passarei da acpi e proverei a creare una scorciatoia di tastiera che esegue lo script ogni volta che che premi Fn+F1 (o se magari questa combinazione non viene riconosciuta dall'ambiente desktop binderei lo script a un'altra combinazione di tasti CTRL+ALT+F1 o quello che ti pare); il metodo per farlo ovviamente cambia a seconda dell'ambiente desktop che usi. |
|
Back to top |
|
|
fbcyborg Advocate
Joined: 16 Oct 2005 Posts: 3056 Location: ROMA
|
Posted: Mon Feb 27, 2012 8:45 pm Post subject: |
|
|
Allora, il punto cruciale è che io vorrei abilitare/disabilitare il touchpad premendo Fn+F1.
Questo posso farlo se catturo l'evento acpi collegato alla pressione di quella combinazione ti tasti.
Fin qui, penso sia chiaro.
Questo acpi, se non sbaglio funziona da root.
Da qui le varie prove nel lanciare lo script da utente o da root.
Per la scorciatoia da tastiera, ci ho pensato, ma in KDE systemsettings non c'è la possibilità (almeno che io sappia) di catturare l'evento di pressione Fn+F1, alrimenti avrei già risolto.
Io vorrei impostare Fn+F1, e non trovare alternative tipo CTRL+ALT+F1. _________________ [HOWTO] Come criptare la /home usando cryptsetup e luks
[HOWTO] Abilitare il supporto al dom0 XEN su kernel 3.X
Help answer the unanswered |
|
Back to top |
|
|
armaoin Tux's lil' helper
Joined: 02 Apr 2006 Posts: 110
|
Posted: Tue Feb 28, 2012 12:06 am Post subject: |
|
|
Mi sono documentato un po e ho tirato fuori questo script per acpid che funziona:
/etc/acpi/events/touch: |
event=IL CODICE DI Fn+F1
action=/etc/acpi/actions/touch.sh
|
/etc/acpi/actions/touch.sh: |
#!/bin/sh
AUTH=/var/run/slim.auth
DISPLAY=:0
cp $AUTH /root/.Xauthority
export DISPLAY
if [ $(/usr/bin/synclient -l | grep TouchpadOff | awk '{print $3}') = "2" ]; then
/usr/bin/synclient TouchpadOff=1;
elif [ $(/usr/bin/synclient -l | grep TouchpadOff | awk '{print $3}') = "1" ]; then
/usr/bin/synclient TouchpadOff=2;
else
/usr/bin/synclient TouchpadOff=2;
fi
rm /root/.Xauthority
unset DISPLAY
|
Ovviamente devi modificare DISPLAY e AUTH per il tuo sistema: se usi un solo server X allora DISPLAY va bene in quel modo; per il file di XAUTH cambia a seconda di come avvii il server grafico (come avrai capito io uso slim); per capire quale è il file fai:
Code: |
$ ps aux | grep /usr/bin/X
root 16108 3.5 0.8 124488 35320 tty7 Ss+ 00:24 1:08 /usr/bin/X -nolisten tcp -br -deferglyphs 16 -auth /var/run/slim.auth vt07
|
Nel caso di kdm dovrebbe essere /var/run/xauth (ma non lo posso verificare non avendo kdm).
Cosi il tutto funziona ma non so se ci potrebbero essere problemi di qualche tipo (trovo un pò brutale il modo in cui forzo l'accesso a X ma non so se ci sono altri metodi) e sicuramente lo script può essere migliorato dato che io di bash ne so veramente poco. Cosi a prima vista direi che ci potrebbero essere problemi in caso accedi all'ambiente grafico come root (ma in genere non si dovrebbe fare) dato che alla fine lo script cancella .Xauthority. |
|
Back to top |
|
|
fbcyborg Advocate
Joined: 16 Oct 2005 Posts: 3056 Location: ROMA
|
|
Back to top |
|
|
armaoin Tux's lil' helper
Joined: 02 Apr 2006 Posts: 110
|
Posted: Tue Feb 28, 2012 9:56 am Post subject: |
|
|
fbcyborg wrote: |
Ora resta da capire perché la prima volta che tale script viene lanciato non funziona, ma questo è un altro discorso.
Metto il tag risolto. Di fatto, se trovassi in giro uno script migliore non dovrei avere grossi problemi per farlo funzionare, questa volta, una volta scoperto il motivo. |
Te la butto li:
La prima volta il valore di TouchpadOff è 0 per cui lo script lo imposta a 2.
La seconda volta il valore è 2 per cui correttamente lo imposta a 1.
Soluzione:
Impostare TouchpadOff a 2 appena avvii il DE.
Soluzione2:
Modfica il codice if per far si che il codice venga eseguito sia per Touchpadoff == 2 che per Touchpadoff == 0
EDIT:
oppure meglio ancora:
Code: |
#!/bin/sh
AUTH=/var/run/slim.auth
DISPLAY=:0
cp $AUTH /root/.Xauthority
export DISPLAY
if [ $(/usr/bin/synclient -l | grep TouchpadOff | awk '{print $3}') != "1" ]; then
/usr/bin/synclient TouchpadOff=1;
else
/usr/bin/synclient TouchpadOff=0;
fi
rm /root/.Xauthority
unset DISPLAY
|
Vedi se cosi funziona.
Last edited by armaoin on Tue Feb 28, 2012 10:07 am; edited 3 times in total |
|
Back to top |
|
|
fbcyborg Advocate
Joined: 16 Oct 2005 Posts: 3056 Location: ROMA
|
Posted: Tue Feb 28, 2012 10:00 am Post subject: |
|
|
Allora, ho appena modificato lo script, e mi hai risposto contemporaneamente...
L'ho modificato così (banalmente direi):
Code: | #!/bin/bash
AUTH=/var/run/xauth/A:0-xBgkWa
DISPLAY=:0
cp $AUTH /root/.Xauthority
export DISPLAY
if [ $(/usr/bin/synclient -l | grep TouchpadOff | awk '{print $3}') = "0" ]; then
/usr/bin/synclient TouchpadOff=1;
elif [ $(/usr/bin/synclient -l | grep TouchpadOff | awk '{print $3}') == "1" ]; then
/usr/bin/synclient TouchpadOff=0;
fi
rm /root/.Xauthority
unset DISPLAY |
Fra l'altro, non da più neanche un altro problema (click on tap non funzionava al ripristino).
Fin'ora problemi non ne da... e non capisco a cosa serva settarlo al valore 2. _________________ [HOWTO] Come criptare la /home usando cryptsetup e luks
[HOWTO] Abilitare il supporto al dom0 XEN su kernel 3.X
Help answer the unanswered |
|
Back to top |
|
|
armaoin Tux's lil' helper
Joined: 02 Apr 2006 Posts: 110
|
Posted: Tue Feb 28, 2012 10:03 am Post subject: |
|
|
Guarda il mio edit.
TouchpadOff=0 touchpad + tap attivato
TouchpadOff=1 touchpad disattivato
TouchpadOff=2 disabilita solo il tapping
Se vuoi quindi il tap abilitato metti Touchpad = 0 al posto di 2 (ho modificato lo script precedente per averlo con il tap attivo). |
|
Back to top |
|
|
fbcyborg Advocate
Joined: 16 Oct 2005 Posts: 3056 Location: ROMA
|
|
Back to top |
|
|
|