Newsgroup: it.comp.os.linux.iniziare
Titolo: amixer: microfono on/off

Per le telefonate su Internet uso il client Voip "Linphone" su Debian
Testing con Gnome 3.8 .
Non ricevo molte telefonate perche` la maggior parte dei miei conoscenti
usa Skype e quindi preferisco tenere per la maggior parte del tempo il
microfono interno del mio notebook spento.
Quando pero` ricevo una telefonata noto sempre che la procedura per
accendere il microfono tramite pulseaudio e` un po' lunga. Mi e` cosi`
venuto in mente di scrivere qualcosa per mettere ON/OFF il microfono
rapidamente.
Mi piacerebbe fare una estensione con un'icona del microfono in rosso
quando e` spento; se ci clicco sopra il microfono si accende e l'icona
diventa verde; se ci riclicco sopra l'icona torna rossa e il microfono
si spegne.
A parole mi sembra pure facile ma se poi penso che devo fare
l'estensione in javascript ... :-/
 
Per ora credo sia meglio che inizi a farlo funzionare in uno script
bash.
 
Per mettere a ON e a OFF il microfono ho trovato:
 
$ amixer -q cset numid=2,iface=MIXER,name='Capture Switch' on
 
(oppure off) e fin qui funziona.
 
Per sapere se il microfono e` acceso o spento do il comando:
 
$ amixer cget numid=2,iface=MIXER,name='Capture Switch' \
numid=2,iface=MIXER,name='Capture Switch'
 
che restituisce:
 
numid=2,iface=MIXER,name='Capture Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
 
(oppure ': values=on' )
 
Ma come faccio ora ad ottenere una variabile solo con quel valore (on o
off)?
 
 

 Per sapere se il microfono e` acceso o spento do il comando:
 
  (amixer set Speaker unmute && rm mute) || (amixer set Speaker mute > mute)
 
con questo comando inelegante
attiva lo speaker e cancella mute, se non trova il file mute emette 
segnale di errore e:
spegne lo speaker e crea mute,
basta fare un'icona di un file .sh eseguibile cliccandoci sopra per 
avere una
accensione spegnimento, se la prima volta non funge, la seconda si 
allinea creando mute e spegnendo, dalla seconda volta funziona sempre 
finch� non lo rendi asincrono, andando a cambiare le funzioni con il 
terminale o con alsamixer.
 
� un meccanismo che funziona subito al costo di un file di log (mute):
 
cat mute
Simple mixer control 'Speaker',0
   Capabilities: pvolume pswitch
   Playback channels: Front Left - Front Right
   Limits: Playback 0 - 127
   Mono:
   Front Left: Playback 102 [80%] [-18.75dB] [off]
   Front Right: Playback 102 [80%] [-18.75dB] [off]
 
ma puoi anche renderlo + piccolo il file
invece di > mute puoi fare il comando && touch off > mute
nota che non conta quello che scrivi nel file, ma solo il file
se esiste o no.
 
Uso lo stesso meccanismo per esempio per associare l'orologio xclock ad 
accensione spegnimento:
sudo killall xclock || xclock
in questo modo lo spengo segando il lavoro per nome, se non lo trova lo 
accende.
Sono sicuro che i puristi inorridiranno. :D
 
ciao e buon linux

 invece di > mute puoi fare il comando && touch off > mute
ops ho confuso touch con echo
 
echo off > mute per esempio

 numid=2,iface=MIXER,name='Capture Switch'
 
a=`amixer cget numid=2,iface=MIXER,name='Capture Switch' 
numid=2,iface=MIXER,name='Capture Switch'`
echo $a
b="values=off"
echo $b
echo ------------------
 
if [[ "$a" == *"$b"* ]]; then
    echo $b trovato
    else echo $b non trovato
fi
 
bash
 
Dove in trovato non trovato metti amixer set Headphone mute o unmute
 
./var.sh
numid=2,iface=MIXER,name='Headphone Playback Switch' ; 
type=BOOLEAN,access=rw------,values=2 : values=on,on
values=off
------------------
values=off non trovato
 
Nota che potresti fare il comando: amixer set Speakers unmute o umute o 
farlo relativamente a Headphones
 
amixer sget Headphone
Simple mixer control 'Headphone',0
   Capabilities: pvolume pswitch
   Playback channels: Front Left - Front Right
   Limits: Playback 0 - 127
   Mono:
   Front Left: Playback 127 [100%] [0.00dB] [on]
   Front Right: Playback 127 [100%] [0.00dB] [on]
 
amixer sget Speaker
Simple mixer control 'Speaker',0
   Capabilities: pvolume pswitch
   Playback channels: Front Left - Front Right
   Limits: Playback 0 - 127
   Mono:
   Front Left: Playback 102 [80%] [-18.75dB] [on]
   Front Right: Playback 102 [80%] [-18.75dB] [on]
 
E invece di controllare on controlli
Front Left*on
Front Right*on
e se nel caso li attivi uno o entrambi li disattivi uno o entrambi
oppure testi solo on off
e fai
amixer set Headphone mute
amixer set Headphone unmute
 

 fi
 
Grazie 1000 :-) l'ho un po' modificato ma l'idea e` quella:
 
-----------------------------------------------------------
#!/bin/bash
## "MIC_ON-OFF" 
 
captureSwitchValues=`amixer cget name='Capture Switch'`
## echo "$captureSwitchValues"
 
if [ `echo $captureSwitchValues | grep -o "values=off"` ]
then
    echo "Il microfono e' spento quindi lo accendo"
    amixer -q cset name='Capture Switch' on
 
elif [ `echo $captureSwitchValues | grep -o "values=on"` ]
then
    echo "Il microfono e' acceso quindi lo spengo"
    amixer -q cset name='Capture Switch' off
 
else
    echo "error" 
fi
-----------------------------------------------------------
 
Si tratterebbe ora di cambiare l'icona del file a seconda se il
microfono e` acceso o spento.
 
Ho provato questo comando:
 
$ gvfs-set-attribute MIC_ON-OFF metadata::custom-icon \
file:///home/mm/Immagini/Icons/microphone-red.png
 
ma non accade nulla, o meglio l'icona cambia solo se dopo aver dato quel
comando modifico qualcosa di ininfluente nello scrip (come ad esempio
aggiungere uno spazio in un commento) e risalvo il file: allora ecco che
compare la nuova icona.
Ho trovato questo commento:
https://mail.gnome.org/archives/gvfs-list/2013-June/msg00001.html
 
 
C'e` qualcuno che ha gia` incontrato questo problema e puo` aiutarmi?
 
 
 
 

 ho "Il microfono e' spento quindi lo accendo"
 
Si mangia dei pezzi :-/ 
naturalmente e`:



se l'icona � un file .desktop cambia il nome del file.png in cui metti 
semaforoverde.pgn e semafororosso.pgn
 
^^ che orrore!

 ^^ che orrore!
 
Hai un'idea migliore?
 
 
 

 Si grazie lo so ma mi interessava il comando 'gvfs-set-attribute'.
 
Avevo notato che anche se il comando 'gvfs-set-attribute' sembrava al
momento non funzionare, se poi premevo il tasto funzione F5 ottenevo un
refresh del desktop e l'icona veniva aggiornata.
Ho installato allora xautomation e ho aggiunto alla fine dello script
xte 'sleep 2' 'key F5'
ma l'unico risultato che ottengo e` che mi stampa una tilde sul
terminale.
 


Risolto :)
 
#!/bin/bash
captureSwitchValues=`amixer cget name='Capture Switch'`
## echo "$captureSwitchValues"
if [ `echo $captureSwitchValues | grep -o "values=off"` ]
then
echo "Il microfono e' spento quindi lo accendo"
amixer -q cset name='Capture Switch' on
gvfs-set-attribute -t string MIC_ON-OFF metadata::custom-icon \ 
file:///home/mm/Immagini/Icons/microphone-red.png
elif [ `echo $captureSwitchValues | grep -o "values=on"` ]
then
echo "Il microfono e' acceso quindi lo spengo"
amixer -q cset name='Capture Switch' off
gvfs-set-attribute -t string MIC_ON-OFF metadata::custom-icon \ 
file:///home/mm/Immagini/Icons/microphone-green.png
else
echo "error" 
fi
sh -c "wmctrl -a Desktop && sleep 0.1 && xdotool key F5"
 

 Risolto :)
 
Risolto, un par ...
Ieri sera sembrava funzionare perfettamente ma questa mattina riprovando non 
sostituiva piu` l'icona. Alla fine ho capito il perche`: cosi` come l'avevo 
scritto funziona solo se c'e` Nautilus aperto sulla directory Desktop. :-O
 
Ora ho corretto e cosi` sembra funzioni bene.
Mi pare la cosa non interessi molto ma preferisco postare ancora la versione 
corretta per non lasciare del codice con errori e perche` magari in futuro a 
qualcuno potrebbero interessare come cambiare al volo l'icona di un file o 
simulare in uno script la pressione di un tasto funzione.
 
#!/bin/bash
 
<<NOTA
Salvare questo script nella directory ~/desktop .
Eseguendo questo script, se il microfono interno del notebook e' spento
lo si accende, se e' acceso lo si spegne. 
Lo script inoltre modifica la sua icona sul desktop  per notificare 
graficamente lo stato.ON/OFF del microfono.
NOTA
 
captureSwitchValues=`amixer cget name='Capture Switch'`
## echo "$captureSwitchValues"
 
if [ `echo $captureSwitchValues | grep -o "values=off"` ]
then
    # echo "Il microfono e' spento quindi lo accendo"
    amixer -q cset name='Capture Switch' on
 
    gvfs-set-attribute -t string MIC_ON-OFF metadata::custom-icon \
 file:///home/mm/Immagini/Icons/microphone-red.png
 
elif [ `echo $captureSwitchValues | grep -o "values=on"` ]
then
    # echo "Il microfono e' acceso quindi lo spengo"
    amixer -q cset name='Capture Switch' off
 
    gvfs-set-attribute -t string MIC_ON-OFF metadata::custom-icon \
 file:///home/mm/Immagini/Icons/microphone-green.png
 
else
    exit 1
fi
 
# Refresh del desktop
xdotool windowfocus $(xdotool search Desktop)
xdotool key F5
 
exit 0