2013-07-01 28 views
11

ALSA kullanıyorum. Bir ses çalınırken PC'nin askıya alınmasını önlemek istiyorum. Bir ekran dolabı çalıştırmak için bu bash kodu kullanabilirsiniz ve bir askıya komut:Sesin şu anda Linux'ta çalınıyor nasıl algılanır?

Bu sesi veya video oynanır algılayıp askıya PC'yi engellemek isteyen
# Run a screen locker. 
#xautolock -time 5 -locker slimlock & 

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

. Mesela bir yalancı kod:

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

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

Nasıl bir ses ya da video bir komut satırı yardımcı programı ile oynuyor algılamak için?

+0

görün http://unix.stackexchange.com/questions/61337/testing-from-a-script-if-audio-devices-are-in-silent – devnull

cevap

11

/proc/asound/card*/pcm*/sub*/status dosyasının state: RUNNING içerip içermediğini kontrol edin.

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

Tipik video oynatıcılar eğer öyleyse, aktive gelen ekran koruyucu duracaktır: o zaman bu komut Ekran kararır olmadığını söyleyecektir xscreensaver kullanırsanız

pacmd list-sink-inputs 
+0

sen, çalışıyor ederiz ama nasıl kontrol etmek Bir video oynatılıyor mu? – mhd

+1

Genel durumda, video çıkışı başka bir grafik çıktısından ayırt edilemez. Video oynatıcı uygulamanızın çalışıp çalışmadığını görmek için 'ps' kullanmayı deneyin. –

+1

Bu yararlı bir yorum olmayabilir, ancak bir süredir video kullanımını tespit etmeyi düşündüm, bir video oynatıldığında genellikle ses çıkışı olduğunu fark ettim, bu yüzden video kullanımını gerçekten algılamaya gerek yok. Bu zaten benim için yararlı oldu –

5

Bunu kullanabilirim o zaman aktive edildi, muhtemelen video oynatmanın olmadığı anlamına gelir.

Böyle kullanabilirsiniz:

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

ALSA ile çalışmıyor. –

0

Bu senaryoyu deneyebilirsiniz (yükleyerek xmacroplay gerektirir):

#!/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

diğer komut çalışsa da, sabit bir fareyi hareket ediyor yer. Bu, yalnızca değişmemişse onu hareket ettirmeye çalışır ve mevcut konumun yakınında tutar.

#!/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