Как работает скрипт
Скрипт использует несколько важных механизмов:
- AppleScript для связи с VLC: macOS позволяет использовать AppleScript для взаимодействия с приложениями. Через эти команды скрипт может узнать, играет ли сейчас фильм и сколько времени осталось до его окончания.
- Проверка состояния воспроизведения: Скрипт постоянно (каждую секунду) проверяет, продолжает ли VLC воспроизведение. Как только воспроизведение останавливается, запускается процедура выключения.
- Отложенное выключение: После завершения фильма скрипт не выключает компьютер немедленно, а устанавливает таймер на 5 минут. Это даёт вам возможность отменить выключение, если вы решите посмотреть ещё что-то.
- Информирование пользователя: Скрипт показывает системное уведомление о предстоящем выключении и выводит в терминал информацию о том, как отменить выключение.
Как использовать скрипт
- Сохраните код в файл, например
vlc_shutdown.sh
- Сделайте файл исполняемым:
chmod +x vlc_shutdown.sh
- Запустите VLC и начните воспроизведение фильма
- Запустите скрипт:
./vlc_shutdown.sh
Какие проблемы решает этот подход
Этот скрипт имеет несколько преимуществ перед простым таймером выключения:
- Адаптивность: Скрипт автоматически определяет, сколько времени осталось до конца фильма, вместо того чтобы полагаться на фиксированное время.
- Интеллектуальное поведение: Если вы остановите фильм или закроете VLC, скрипт все равно сработает и выключит компьютер.
- Безопасность: Задержка в 5 минут перед выключением даёт вам время отменить выключение, если вы передумали.
#!/bin/bash
# Скрипт для выключения Mac по завершению воспроизведения в VLC
# Принцип работы: скрипт периодически проверяет, активно ли воспроизведение в VLC
# Когда воспроизведение останавливается, компьютер выключается после небольшой задержки
# Функция для проверки, запущен ли VLC
is_vlc_running() {
pgrep -x VLC >/dev/null
return $?
}
# Функция для проверки, воспроизводится ли что-то в VLC
is_vlc_playing() {
# Используем AppleScript для проверки статуса воспроизведения
playing=$(osascript -e 'tell application "VLC" to get playing')
if [ "$playing" = "true" ]; then
return 0 # Воспроизведение активно
else
return 1 # Воспроизведение не активно
fi
}
# Функция для получения оставшегося времени фильма
get_remaining_time() {
# Получаем оставшееся время в секундах
remaining=$(osascript -e 'tell application "VLC" to get ((duration - time) as integer)')
echo $remaining
}
# Проверяем, запущен ли VLC
if ! is_vlc_running; then
echo "VLC не запущен. Запустите VLC и начните воспроизведение фильма, затем выполните скрипт снова."
exit 1
fi
# Проверяем, воспроизводится ли что-то
if ! is_vlc_playing; then
echo "В VLC ничего не воспроизводится. Начните воспроизведение фильма, затем выполните скрипт снова."
exit 1
fi
# Получаем оставшееся время фильма и название файла
remaining_seconds=$(get_remaining_time)
current_file=$(osascript -e 'tell application "VLC" to get name of current item')
# Выводим информацию
echo "Обнаружен воспроизводимый файл: $current_file"
echo "Оставшееся время: $(($remaining_seconds / 60)) минут и $(($remaining_seconds % 60)) секунд"
echo "Компьютер будет выключен после завершения воспроизведения."
# Добавляем небольшую задержку перед выключением (5 минут)
shutdown_delay=5
echo "После завершения воспроизведения компьютер выключится через $shutdown_delay минут."
echo "Для отмены этого скрипта нажмите Ctrl+C."
# Цикл ожидания завершения воспроизведения
while true; do
if ! is_vlc_running; then
echo "VLC был закрыт. Начинаем процедуру выключения..."
break
fi
if ! is_vlc_playing; then
echo "Воспроизведение завершено. Начинаем процедуру выключения..."
break
fi
# Обновляем оставшееся время каждые 30 секунд
if (( $(date +%s) % 30 == 0 )); then
remaining_seconds=$(get_remaining_time)
echo "Оставшееся время: $(($remaining_seconds / 60)) минут и $(($remaining_seconds % 60)) секунд"
fi
# Пауза в 1 секунду между проверками
sleep 1
done
# Показываем уведомление о предстоящем выключении
osascript -e "display notification \"Компьютер будет выключен через $shutdown_delay минут\" with title \"Автоматическое выключение\""
# Запускаем таймер выключения
sudo shutdown -h +$shutdown_delay
echo "Компьютер будет выключен через $shutdown_delay минут."
echo "Чтобы отменить выключение, выполните команду: sudo shutdown -c"
Добавить комментарий