2013-07-01 18 views
11

Io uso ALSA. Voglio impedire al PC di sospendere mentre viene riprodotto un suono. Io uso questo codice bash per eseguire un armadietto dello schermo e un sospendo comando:Come rilevare che l'audio è attualmente in esecuzione in Linux?

# Run a screen locker. 
#xautolock -time 5 -locker slimlock & 

# Run suspend 
#xautolock -time 6 -locker 'systemctl suspend' & 

voglio rilevare che il suono o il video viene riprodotto e prevenire PC di sospendere. Per esempio un pseudocodice:

if (video is not played) 
{ 
    run a screen locker 
} 

if (sound is not played and video is not played) 
{ 
    run suspend command 
} 

come rilevare che un suono o un video sta giocando con una linea di comando?

+0

Vedi http://unix.stackexchange.com/questions/61337/testing-from-a-script-if-audio-devices-are-in-silent – devnull

risposta

11

Verificare se il file /proc/asound/card*/pcm*/sub*/status contiene state: RUNNING.

+0

Grazie, funziona, ma come controllare che viene riprodotto un video? – mhd

+1

Nel caso generale, l'output video non può essere distinto da nessun altro output grafico. Prova a usare 'ps' per vedere se l'applicazione del tuo lettore video è in esecuzione. –

+1

Questo potrebbe non essere un commento utile, ma ho pensato di rilevare l'utilizzo del video per un po ', poi mi sono reso conto che generalmente c'è un output audio durante la riproduzione di un video, quindi non è necessario rilevare l'utilizzo del video. Questo è stato comunque utile per me –

5

Io uso questo:

pacmd list-sink-inputs 
+0

Non funziona con ALSA. –

1

Se si utilizza xscreensaver allora questo comando vi dirà se lo schermo viene oscurato:

xscreensaver-command -time | grep -q 'screen \(locked\|blanked\)' 

giocatori genere di video si fermerà lo screensaver da attivare, quindi se si è attivato quindi probabilmente significa che non c'è riproduzione di video.

Si può usare in questo modo:

if xscreensaver-command -time | grep -q 'screen \(locked\|blanked\)'; then 
    echo Screen is off (screensaver active) 
else 
    echo Screen is on, video might be playing 
fi 
0

Si potrebbe provare questo script (richiede xmacroplay installazione):

#!/bin/bash 
# Script to prevent screen blanking when audio is playing. 
command -v xmacroplay > /dev/null 2>&1 || { echo "ERROR: must install xmacroplay"; exit -1; } 
while true; do 
    sleep 50 
    if pacmd list-sink-inputs | grep -w state | grep -q RUNNING ; then 
     xmacroplay :0 >& /dev/null <<EOF 
MotionNotify 90 90 
MotionNotify 120 120 
EOF 
    fi 
done 
0

Mentre l'altro script funziona, esso continua a muoversi il mouse per un determinato Posizione. Questo tenta di spostarlo solo se non è cambiato e lo mantiene vicino alla posizione corrente.

#!/bin/bash 
# Script to prevent screen blanking when audio is playing. 
if [ -z DISPLAY ]; then 
    DISPLAY=:0 
fi 
while true; do 
    sleep 50 
    if pacmd list-sink-inputs | grep -w state | grep -q RUNNING ; then 
     xdotool mousemove_relative -- -1 -1 
     sleep 1 
     xdotool mousemove_relative -- 1 1 
    fi 
done