Ответ 1
Проверьте, содержит ли какой-либо файл /proc/asound/card*/pcm*/sub*/status
state: RUNNING
.
Я использую ALSA. Я хочу, чтобы ПК не приостанавливался во время воспроизведения звука. Я использую этот bash код для запуска блокировки экрана и команды suspend:
# Run a screen locker.
#xautolock -time 5 -locker slimlock &
# Run suspend
#xautolock -time 6 -locker 'systemctl suspend' &
Я хочу обнаружить, что звук или видео воспроизводятся, и не позволяйте ПК приостанавливаться. Например, псевдокод:
if (video is not played)
{
run a screen locker
}
if (sound is not played and video is not played)
{
run suspend command
}
Как определить, что звук или видео воспроизводится с помощью утилиты командной строки?
Проверьте, содержит ли какой-либо файл /proc/asound/card*/pcm*/sub*/status
state: RUNNING
.
Я использую это:
pacmd list-sink-inputs
Если вы используете xscreensaver
, тогда эта команда сообщит вам, выключен ли экран:
xscreensaver-command -time | grep -q 'screen \(locked\|blanked\)'
Обычно видеоплееры останавливают активацию экранной заставки, поэтому, если она активирована, это, вероятно, означает, что нет воспроизведения видео.
Вы можете использовать его следующим образом:
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
Вы можете попробовать этот script (требуется установка xmacroplay):
#!/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
Пока работает другой script, он перемещает мышь в фиксированное место. Он пытается переместить его только в том случае, если он не изменился и удерживает его рядом с текущим местоположением.
#!/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