Как стать автором
Обновить

Используем графический интерфейс в bash-скриптах

Время на прочтение 2 мин
Количество просмотров 6.8K
Многие пользователи Linux рано или поздно сталкиваются с bash-скриптами. До недавнего времени я не знал как можно использовать графический интерфейс в скриптах. Оказывается очень просто.

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

Мы будем использовать библиотеку zenity (ещё есть kdialog ). У меня она была уже установлена. Набираем в консоли zenity --help или man zenity.

Приведу основные ключи:
--calendar Отобразить диалог для выбора даты
--entry Отобразить диалог для ввода текста
--error Отобразить диалог для вывода ошибки
--info Отобразить диалог для вывода информации
--file-selection Отобразить диалог для выбора файла
--list Отобразить диалог со списком
--notification Отобразить диалог уведомления
--progress Отобразить диалог хода процесса
--question Отобразить диалог с вопросом
--warning Отобразить диалог с предупреждением
--scale Отобразить диалог масштаба
--text-info Отобразить диалог с текстовой информацией

Теперь как использовать. Рассмотрим сразу пример. Для примера я написал маленький скрипт выключения компьютера по таймеру.

#!/bin/bash
vTime=$(zenity --scale --title="Timer Shutdown" --text="Turn off computer after:" --step=5 --min-value=0 --max-value=120);

if [ "$?" = "1" ]; then
echo "Exit"; exit;
else
vNow=$(date +'%T');
sudo /sbin/shutdown -h $vTime &
zenity --notification --text="The system is going down in $vTime minutes. Start at $vNow!";
if [ "$?" = "0" ]; then sudo /sbin/shutdown -c;
fi
fi


Рассмотрим его подробнее.

vTime=$(zenity —scale --title=«Timer shutdown» --text=«Turn off computer after:» --step=5 --min-value=0 —max-value=120);

zenity --scale --text=«Turn off computer after:» --step=5 --min-value=0 —max-value=120


image

Эта строка отображает диалоговое окно с ползунком с минимальным значением равным 0, максимальным равным 120 (120 минут — 2 часа) и с шагом в 5 ( у меня почему то не работает).
Результат присваивается значению vTime.

if [ "$?" = «1» ]; then
echo «Exit»; exit;


Переменная $? содержит значение 0 если нажата кнопка ОК и 1 если — Cancel.

vNow=$(date +'%T');
В переменную vNow текущее время.

sudo /sbin/shutdown -h $vTime &
Собственно запускаем команду на выключение. Здесь нужно обратить внимание на &. Он нужен для того чтоб следующая задача выполнялась не дожидаясь завершения предыдущей.

zenity --notification --text=«The system is going down in $vTime minutes. Start at $vNow!»;

image

Отобразим в трее значок с соответствующей надписью.

if [ "$?" = «0» ]; then sudo /sbin/shutdown -c;
И сделаем возможность прервать выключение по нажатию мишкой по значку. Если щелкнуть мышкой по значку zenity вернет значение 0 в переменную $?..

Осталось создать ярлык на запуск скрипта. Естественно нужно чтоб пользователь имел права на запуск команд через sudo. Также нужно в /etc/sudoers закоментить строку Defaults requiretty а можно заменить sudo на kdesudo.

Здесь только ознакомление. Думаю кому будет интересно сами разберутся с остальными возможностями zenity. Удачи.
Теги:
Хабы:
+19
Комментарии 3
Комментарии Комментарии 3

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн