пятница, 15 марта 2024 г.

Запланировать выключение компьютера через графическую форму

Запланировать выключение компьютера в сеансе пользователя осуществляется через команду shutdown, которая вводится в терминале с указанием параметров. Но ввод команды можно сделать более удобным, если использовать графическую форму выбора, при использовании которой в терминал вводить ничего не требуется. Ниже приводится пример такой формы.


Указанное на рисунке выше третье значение +155 является результатом сложения чисел 60, 60, 35. То есть, оно является указанием значения в минутах ( для тех, кто не понял 😊 ).

Понятно, что после ввода в строку значения и последующего нажатия кнопки OK будет запланировано выключение компьютера "в" или "через". Если ничего не вводить и нажать ОК или нажать Отмена (пользователь передумал), или просто закрыть окно формы, то компьютер выключится через 1 минуту, так как будет выполнена команда shutdown без указания параметров. Но этого можно избежать, если после завершения работы формы будет произведена проверка на наличие введённого значения, то есть, чтобы файл не был пустым, например:


Собственно сам скрипт (исполняемый файл):

#!/bin/bash
zenity --width=220 --title "Когда выключить" --text="Ввод в формате xx:yy или + x\nПримеры ввода:\n23:59  = в 23 часа 59 минут.\n+15      = через 15 минут.\n+155   = через 2 часа 35 минут." --entry > /tmp/down.txt
if [[ ! -z $(cat /tmp/down.txt) ]] ; then
    shutdown $(cat /tmp/down.txt) &
  else
    zenity --width=150 --height=50 --info --timeout=5 --title="Уведомление" --text="Не указано время\nвыключения.\nЗадание не назначено."
fi
exit

Пробелы перед знаком = подбирались так, чтобы этот знак на каждой последующей строке находился примерно под таким же знаком в предыдущей.

--width= и --height= определяют ширину и высоту форм.

--timeout=5 указывает на интервал в 5 секунд, после которого форма уведомления автоматически будет закрыта. Если это не востребовано, то используйте:

#!/bin/bash
zenity --width=220 --title "Когда выключить" --text="Ввод в формате xx:yy или + x\nПримеры ввода:\n23:59  = в 23 часа 59 минут.\n+15      = через 15 минут.\n+155   = через 2 часа 35 минут." --entry > /tmp/down.txt
if [ -s /tmp/down.txt ]; then
    shutdown $(cat /tmp/down.txt) &
  else
    :
fi
exit

или так:

#!/bin/bash
zenity --width=220 --title "Когда выключить" --text="Ввод в формате xx:yy или + x\nПримеры ввода:\n23:59  = в 23 часа 59 минут.\n+15      = через 15 минут.\n+155   = через 2 часа 35 минут." --entry > /tmp/down.txt
if [[ ! -z $(cat /tmp/down.txt) ]] ; then
    shutdown $(cat /tmp/down.txt) &
fi
exit

Вы можете подобрать свои значения, если указанные в примере скрипта вас не устраивают.

✅    Добавление подтверждающих сообщений

Результат ввода значений можно отобразить информационным сообщением. Примеры:



Чтобы отображалось нужное сообщение, поскольку ввод может быть как в формате ЧЧ:ММ (часов минут), так и в формате +М (минут), то в скрипт вводится проверка введённого значения на наличие символа двоеточия (или +, но тогда следует поменять местами порядок выполнения по условию).

var=`cat /tmp/down.txt`
if [[ $var =~ ":" ]]; then
    zenity --width=150 --height=50 --info --timeout=7 --title="Подтверждение" --text="Компьютер будет\nвыключен в $(cat /tmp/down.txt)"
  else
    zenity --width=150 --height=50 --info --timeout=7 --title="Подтверждение" --text="Компьютер будет\nвыключен\n через $(cut -c2- <<< $(cat /tmp/down.txt)) мин."
fi

Если в считанном значении будет найден символ двоеточия, то результатом будет вывод сообщения о выключении ЧЧ:ММ. В ином случае будет выводиться сообщение о выключении через М минут. При выводе второго сообщения не отображается символ +, что обеспечивается инструкцией $(cut -c2- <<< $(cat /tmp/down.txt)). --timeout=7 указывает, что после 7 секунд выводимое сообщение автоматически исчезнет. Таким образом, листинг скрипта с информационными сообщениями имеет вид: 

#!/bin/bash
zenity --width=220 --title "Когда выключить" --text="Ввод в формате xx:yy или + x\nПримеры ввода:\n23:59  = в 23 часа 59 минут.\n+15      = через 15 минут.\n+155   = через 2 часа 35 минут." --entry > /tmp/down.txt
if [[ ! -z $(cat /tmp/down.txt) ]] ; then
    shutdown $(cat /tmp/down.txt) &
      var=`cat /tmp/down.txt`
      if [[ $var =~ ":" ]]; then
            zenity --width=150 --height=50 --info --timeout=7 --title="Уведомление" --text="Компьютер будет\nвыключен в $(cat /tmp/down.txt)"
         else
           zenity --width=150 --height=50 --info --timeout=7 --title="Уведомление" --text="Компьютер будет\nвыключен\n через $(cut -c2- <<< $(cat /tmp/down.txt)) мин."
      fi
  else
    zenity --width=150 --height=50 --info --timeout=5 --title="Уведомление" --text="Не указано время\nвыключения.\nЗадание не назначено."
fi
exit

✅   Чтобы сделать кнопку вызова созданного скрипта в главном меню создайте файл .desktop, например, Shutdown-at.dеsktop, который должен располагаться в скрытой папке вашего домашнего каталога (папки) ~/.local/share/applications и впишите в него:

[Desktop Entry]
Name=Shutdown-at
Exec=полный путь к файлу sh
Comment=Назначить время выключения
Terminal=false
PrefersNonDefaultGPU=false
Icon=укажите значок для кнопки, например, application-exit или system-shutdown
Type=Application
Categories=GTK;Development;

Если нужно, чтобы кнопка отображалась по-русски, то добавьте строку Name[ru]= , в которой укажите свой текст.

Строка Categries= не является обязательной. В данном случае она будет указывать на то, что кнопка будет отображаться в меню "Программирование" (Cinnamon) или "Разработка" (xfce).

Демонстрационный ролик (ниже или на Google Drive):

Комментариев нет:

Отправить комментарий