Таймер для выключения комьютера в ubuntu
Так уж получилось, что люблю спать при просмотре фильмов или ТВ. Перейдя на Ubuntu был огорчен отсутствием таймера на выключение, которым можно было бы управлять с самодельного пульта +Lirc.
Решение вышло похожим на стандартный таймер AverTV.
Для работы скриптов нужно сделать возможным запуск /sbin/shutdown от лица нашего пользователя без ввода пароля. И установить пакет aosd_cat, если он у вас не стоит.
Таймер будет составлять из двух модулей:
Первый — демон, следит за состоянием таймера и в нужно время выключает компьютер. Когда до выключения компьютера остается менее трех минут в правом углу экрана появляется сообщение. Когда до выключения сообщения остается менее минуты сообщение перемещается на середину экрана и меняет свой цвет.
Так как функции таймера показалось мало для постоянно запущенного процесса, в него была добавлена функция отображения на экран произвольного текста, но об этом позже.
Листинг osd_demon.sh
CONFIGPATH="$HOME/scripts/power" ## сохраняем Pid скрипта в файл lastpid=$(cat $CONFIGPATH/.osd_demon.pid) echo $$ >$CONFIGPATH/.osd_demon.pid ## если на экране отображается текст, то убиваем его if ps ax | grep -v grep | grep $lastpid > /dev/null then kill -9 $lastpid fi while true do if pidof aosd_cat > /dev/null then sleep 0.2 else sleeptime=$(cat $CONFIGPATH/.tmp_poweroff_press_time) nowtime=$(date +%s) timediff=$(($sleeptime-$nowtime)) if (($timediff>0)); then min=$(($timediff/60)) if (($min=1)); then sec=$(($timediff-$min*60)) echo -n "Выключение через $min:$sec" | aosd_cat -n "Arial Black 24" -R green -p 1 -x 350 -y 30 -u 20000 -o 0 -f 0 & fi if (($min-1)); then l_procn=$(pidof osd_cat) read -r -a l_words ] do kill -9 $ l_i=$((l_i+1)) done sec=$(($timediff-$min*60)) echo -n "Выключение через $sec секунд" | aosd_cat -n "Arial Black 24" -R red -p 3 -x 350 -y 30 -u 700 -o 0 -f 0 & if ((sec <10)); then sudo /sbin/shutdown -h now fi fi fi show=$(cat $CONFIGPATH/.tmp_showmsg) ms=$<#show>if ((ms>0)) ; then echo -n "$show" | aosd_cat $msg -n "Arial Black 36" -R green -p 1 -x 350 -y 30 -u 10000 & echo > $CONFIGPATH/.tmp_showmsg fi fi sleep 2 done
Второй — скрипт, запустив который несколько раз можно выставить таймер.
Листинг my_power.sh
#! /bin/bash CONFIGPATH="$HOME/scripts/power" lastpid=$(cat $CONFIGPATH/.my_power.pid) echo $$ >$CONFIGPATH/.my_power.pid if ps ax | grep -v grep | grep $lastpid > /dev/null then kill -9 $lastpid >/dev/null fi l_procn=$(pidof aosd_cat) read -r -a l_words ] do kill -9 $ l_i=$((l_i+1)) done lasttime=$(cat $CONFIGPATH/.tmp_poweroff_press_time) nowtime=$(date +%s) timediff=$(($lasttime-$nowtime)) runttime=$(cat $CONFIGPATH/.tmp_poweroff_run_time) diff=$(($nowtime-$runttime)) echo $nowtime > $CONFIGPATH/.tmp_poweroff_run_time if (($diff <10)); then min=$((($timediff+15)/60)) if (($min<30)); then echo $((nowtime+30*60)) >$CONFIGPATH/.tmp_poweroff_press_time echo $nowtime > $CONFIGPATH/.tmp_poweroff_run_time echo -n "Выключение через 30 минут" | aosd_cat -n 'Arial Black 24' -R green -p 1 -x 350 -y 30 & fi if (($min>=30 && $min <60)); then echo $((nowtime+60*60)) >$CONFIGPATH/.tmp_poweroff_press_time echo $nowtime > $CONFIGPATH/.tmp_poweroff_run_time echo -n "Выключение через 60 минут" | aosd_cat -n 'Arial Black 24' -R green -p 1 -x 350 -y 30 & fi if (($min>=60 && $min <90)); then echo $((nowtime+90*60)) >$CONFIGPATH/.tmp_poweroff_press_time echo $nowtime > $CONFIGPATH/.tmp_poweroff_run_time echo -n "Выключение через 90 минут" | aosd_cat -n 'Arial Black 24' -R green -p 1 -x 350 -y 30 & fi if (($min>=90 && $min <120)); then echo $((nowtime+120*60)) >$CONFIGPATH/.tmp_poweroff_press_time echo $nowtime > $CONFIGPATH/.tmp_poweroff_run_time echo -n "Выключение через 120 минут" | aosd_cat -n 'Arial Black 24' -R green -p 1 -x 350 -y 30 & fi if (($min>=120)); then echo $((nowtime-100)) > $CONFIGPATH/.tmp_poweroff_press_time echo $((nowtime-100)) > $CONFIGPATH/.tmp_poweroff_run_time echo -n "Отменить выключение" | aosd_cat -n 'Arial Black 24' -R green -p 1 -x 350 -y 30 & fi else if (($timediff>0)); then min=$(($timediff/60)) if (($min>0)); then echo -n "Выключение через $min минут" | aosd_cat -n 'Arial Black 24' -R green -p 1 -x 350 -y 30 & fi else echo -n "Выключение не установлено" | aosd_cat -n 'Arial Black 24' -R green -p 1 -x 350 -y 30 & fi fi exit 0
Как видно из скрипта, запустив первый раз вы получите сообщение «Выключение не установлено», повторный запуск даст установку таймера на 30 минут и сообщение «Выключение через 30 минут” и т далее…
Были проблемы с автозагрузкой демона, поэтому пришлось сделать скрипт для его загрузки
листинг start_dem.sh
bash /home/%username%/scripts/power/osd_demon.sh & disown %1
все скрипты делаем исполняемыми.
start_dem.sh добавляем в автозагрузку.
Далее добавляем в .lircrc:
begin
prog = irexec
button = Power
config = home/%username%/scripts/power/my_power.sh &
end
Теперь при нажатии на кнопку ‘Power’ на пульте можно выставить таймер на выключения.
Чуть не забыл, демон может отображать любой текст, для этого надо добавить его в файлик
.tmp_showmsg, лежащий в одной с демоном папке.
Например:
echo date +%T > /home/%username%/scripts/power/.tmp_showmsg
покажет на экране текущее время.
Кстати, скрипт можно использовать и без пульта, например, задав ему любую клавишу на клавиатуре.
Выключение компьютера таймер linux
Завершение работы компьютера с ОС Linux по таймеру
Как всем давно известно, компьютер, работающий под управлением Linux, может работать круглосуточно годами. Но большинство пользователей предпочитают выключать свой компьютер или ноутбук после завершения работы или после того, как будет выполнена автоматическая работа, которая не требует вмешательства человека. Для достижения данной цели можно воспользоваться командой shutdown .
Внимание! Команда shutdown может быть выполнена только от имени суперпользователя (root). Чтобы выполнять команды от имени суперпользователя, нужно перед выполнением команды написать sudo . Также можно воспользоваться командой su и после этого вводить команды в терминал без написания sudo .
Shutdown — консольная команда Linux, служащая для для выключения или перезагрузки машины.
Из основных параметров (options) следует отметить два:
- -r — перезагрузить систему;
- -h — полная остановка системы (с таким параметром компьютер будет выключен).
Параметром TIME можно задать время, когда будет выполнена команда. Указание этого параметра необязательно — если вы не укажите время, то команда выполнится немедленно. Можно указать время, через которое выполнится команда: +20 (через 20 минут); или явно указать время, когда следует выполнить команду: 15:20 (в 15 часов 20 минут).
Например, чтобы выключить компьютер через 20 минут, следует выполнить:
Для того, чтобы выключить в 15:20:
Для перезагрузки системы сейчас:
Хотя перезагрузиться проще так:
У вас недостаточно прав для того чтобы тут гадить.
Отключить компьютер в заданное время
Я хочу, чтоб моя Ubuntu автоматически отключалась каждый день в определенное время. Как этого можно добиться?
2 ответа 2
На помощь нам придет юниксный демон по имени cron .
Для того, чтобы поставить задачу в расписание, мы добавим ее в файл /etc/crontab .
Открываем терминал — Ctrl Alt T .
Файл можно редактировать такой командой:
Для отключения компьютера каждый день в 23:03 добавим в файл такую строчку:
03 23 * * * root shutdown -h now
Последняя строчка файла должна быть пустая.
Эта часть была написана по мотивам askubuntu.
Объяснение подробнее.
В самом этом файле /etc/crontab объясняется формат таблицы задач:
# m h dom mon dow user command
Первые два поля — минута и час запуска задачи,
3-е поле (dom) — день месяца (Day of Month),
затем месяц,
5-е поле (dow) — день недели,
затем пользователь, от чьего имени будет запускаться команда,
и, собственно, команда.
Время запуска
Все условия (времени запуска) проверяются по «логическому И», кроме условий «день недели» и «день месяца» — указанные совместно, они обрабатываются по «логическому ИЛИ», то есть «по любому из дней», что отражено в документации (Ubuntu, Debian, FreeBSD). (См. Википедия, man 5 crontab ). Если вы хотите проверять их по «логическому И», делайте это в самой команде.
Например, перезагрузка в пятницу, 13-го:
0 0 13 * * root [ "$(date '+\%u')" -eq 5 ] && shutdown -r now
Crontab пользователя.
Кроме общей таблицы crontab, каждый пользователь имеет свою. Свою личную таблицу можно редактировать командой
Таблицу другого пользователя, например, ‘root’-а, можно редактировать командой
В первоначальном вопросе правильнее, я думаю, было бы использовать именно этот вариант.
Если в системе есть всего один пользователь, то можно отключать компьютер и через него, и через ‘root’, без разницы.
Спасибо господам 0andriy и Sergey, который привлекли мое внимание к такой возможности.
Обратите внимание, что в таблице конкретного пользователя формат задачи немного другой, там не нужно указывать пользователя. Вместо
03 23 * * * root shutdown -h now
Переменные окружения
Популярная причина проблем с работой crontab — другое определение переменных окружения при работе демона cron , особенно переменной $PATH .
Вы можете узнать переменные окружения cron -а, вставив в crontab строчку
После того, как файл /tmp/env.output создан, эту строчку можно убрать.
Оказывается, в Ubuntu cron запускается с PATH=/usr/bin:/bin . Для корректной работы нужно определить правильный $PATH в самом файле crontab .
Обратите внимание, что значение переменных не подставляется, то есть
не сработает.
Альтернативный способ решения этой проблемы — использовать полные пути для запуска команд. Но он хуже, если вы хотите проверить свою команду в терминале или перенести в другую систему.
Если вы запускаете программы с GUI, вам также надо определить $DISPLAY:
Да, и не забывайте в конце crontab -а вставлять пустую строчку.
Вторая часть ответа была написана по мотивам вопроса о проблемах работы с crontab -ом на askubuntu.
Спасибо всем комментаторам за плодотворную дискуссию.
compizomania
Shutdown Timer (Таймер выключения) является полезным расширением оболочки GNOME Shell, которое позволяет легко планировать автоматическое выключение компьютера из меню в системном трее.
Это расширение добавляет подменю в системный трей, в котором существует своё меню настроек, где вы можете изменить следующее:
— Максимальное значение таймера;
— Положение ползунка;
— Root mode. (Использует команду «pkexec shutdown» вместо диалогового окна завершения GNOME и ввод пароля администратора).
Установка таймера выключения в оболочку Gnome Shell (Ubuntu, Manjaro и Fedora)
1. Перейдите на страницу с расширением:
2. И установите его, как показано на снимке:
3. По окончании установки расширения, вы сразу можете пользоваться
Таймером выключения из системного трея.