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

    Многие пользователи 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
    • 1,3k
    • 3
    Поделиться публикацией

    Похожие публикации

    Комментарии 3

      0
      s/текучее/текущее/

      А вообще спасибо тебе человек.
        0
        Мне ещё pynotify понравились, получше выглядят немного чем такие уведомления.
          0
          kdialog это прекрасно, но иногда нужно получить от пользователя более одного значения, например, три таких окна — по-моему это перебор… Кроме как писать свой диалог мне в голову ничего больше не приходит

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

          Самое читаемое