Поиск по сайту:

Zenity — создание диалоговых окон графического интерфейса в сценариях Bash

Учебное пособие по Zenity | Используйте графические виджеты в сценариях bash с помощью Zenity

Когда дело доходит до сценариев bash, все сценарии в основном ориентированы на работу в командной строке. Независимо от того, нужен ли вам ввод данных от пользователя или отображение некоторых сообщений, все делается через терминал. Большинство людей, пишущих сценарии с использованием Bash, понятия не имеют, что существует набор инструментов с графическим интерфейсом. В этой статье мы рассмотрим один такой инструмент под названием Zenity — простую программу, которая позволяет создавать графические (GTK+) диалоговые окна в командной строке и оболочке. сценарии.

Что такое Зенити?

Zenity — это переработанная версия gdialog, порта диалога GNOME, который позволяет создавать набор виджетов для различных операций, где пользователи могут графически взаимодействовать со сценарием. Виджеты основаны на наборе инструментов GTK.

Zenity — это программа с открытым исходным кодом, написанная на языке программирования C. Он поддерживает Linux, BSD и Windows.

Без лишних слов давайте посмотрим, как отображать графические диалоговые окна GTK+ из командной строки и сценариев оболочки с помощью Zenity.

Как установить Zenity в Linux

Сначала проверьте, установлен ли zenity и доступен ли он для использования, выполнив следующие команды:

$ which zenity
/usr/bin/zenity
$ zenity --version
3.32.0
zenity --about

О Зенити

Если zenity не установлен в вашем дистрибутиве, выполните следующие команды в зависимости от вашего дистрибутива, чтобы установить его.

Альпийский Linux:

sudo apk add zenity

Arch Linux:

sudo pacman -S zenity

Fedora, RHEL, CentOS, Alma Linux и Rocky Linux:

sudo dnf install zenity

Debian, Ubuntu, Linux Mint, Pop OS:

sudo apt install zenity

openSUSE:

sudo zypper install zenity

1. Справка Zenity и общие параметры

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

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

zenity --help

Есть несколько общих опций, которые можно использовать вместе с любым виджетом. Это не обязательные параметры, но если вы их используете, вы сможете изменить поведение виджета.

Чтобы получить список общих параметров, выполните следующую команду.

zenity --help-general

Общие параметры Zenity

Мы увидим, как эти параметры работают в следующих разделах.

2. Диалоговое окно сообщения.

В диалоговом окне сообщения отобразится диалоговое окно с ошибкой, предупреждением, информацией и вопросом. В зависимости от ситуации вам придется использовать соответствующее диалоговое окно в скрипте.

2.1. Диалоговое окно ошибки

Чтобы получить доступ к списку поддерживаемых параметров диалогового окна ошибки, выполните следующую команду:

zenity --help-error

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

zenity --error \
       --title "Error Message" \
       --width 500 \
       --height 100 \
       --text "Permission denied. Run with sudo or as root user."

Диалоговое окно ошибки

На изображении выше вы также можете видеть, что некоторые общие параметры, такие как --width, --height, используются для управления геометрией диалогового окна. Флаг --title используется для печати диалоговой панели с заголовком.

2.2. Диалоговое окно с предупреждением

Чтобы получить доступ к списку поддерживаемых параметров диалогового окна предупреждения, выполните следующую команду:

zenity --help-warning

Используйте флаг --warning в скрипте для отображения окна предупреждения и флаг --text для отображения предупреждающего сообщения.

zenity --warning \
       --title "Warning Message" \
       --width 500 \
       --height 100 \
       --text "Disk space exceeded the threshold limit. Check ASAP."

Диалоговое окно с предупреждением

2.3. Диалоговое окно «Информация»

Чтобы получить доступ к списку поддерживаемых параметров диалогового окна информации, выполните следующую команду:

zenity --help-info

Используйте флаг --info в скрипте для отображения информационного окна и флаг --text для отображения информационного сообщения.

zenity --info \
       --title "Info Message" \
       --width 500 \
       --height 100 \
       --text "Installation completed successfully."

Диалоговое окно «Информация»

2.4. Диалоговое окно вопроса

Чтобы получить доступ к списку поддерживаемых параметров диалогового окна вопроса, выполните следующую команду:

zenity --help-question

В диалоговом окне вопроса появится сообщение с вариантами Да или Нет. Если вы нажмете "Да", код возврата будет "ноль", а для "Нет" код возврата будет " один". Вам придется использовать коды завершения для написания дальнейшей логики в ваших сценариях.

zenity --info \
       --title "Info Message" \
       --width 500 \
       --height 100 \
       --text "Installation completed successfully."

Диалоговое окно вопроса

3. Диалоговое окно ввода текста

Чтобы получить доступ к списку поддерживаемых параметров диалогового окна ввода текста, выполните следующую команду:

zenity --help-entry

Диалоговое окно ввода текста предлагает пользователю ввести данные. Флаг --entry будет использоваться для создания диалогового окна ввода. Чтобы отобразить текст в диалоговом окне, используйте флаг --text. Значение, введенное в текстовое поле, будет напечатано в терминале, как только вы нажмете ОК. Вам необходимо сохранить вывод в переменной, если вы хотите далее обрабатывать ввод из текстового поля, как я сделал ниже.

USR=$(zenity --entry \
       --width 500 \
       --title "check user" \
       --text "Enter the user name"); echo $USR

Диалоговое окно ввода текста

Если вы не хотите, чтобы вводимый текст был виден при вводе, используйте флаг --hide-text.

USR=$(zenity --entry \
       --width 500 \
       --title "check user" \
       --text "Enter the user name" \
       --hide-text); echo $USR

Скрыть вводимый текст

Вы также можете установить значение по умолчанию внутри поля ввода, используя флаг --entry-text. Вам необходимо удалить значение и ввести свои данные, иначе существующее значение будет принято по умолчанию.

USR=$(zenity --entry \
       --width 500 \
       --title "check user" \
       --text "Enter the user name" \
       --entry-text $USER); echo $USR

Текстовое значение записи по умолчанию

4. Диалоговое окно пароля.

Чтобы получить доступ к списку поддерживаемых параметров диалогового окна пароля, выполните следующую команду:

zenity --help-password

Диалоговое окно пароля будет принимать имя пользователя и пароль с использованием флагов --username и --password. Вывод будет отображаться как (Имя пользователя | Пароль). Вам необходимо присвоить вывод команды переменной и извлечь имя пользователя и пароль для дальнейшей обработки.

zenity --password --username

Диалоговое окно пароля

5. Диалоговое окно текстовой информации.

Чтобы получить доступ к списку поддерживаемых параметров диалогового окна текстовой информации, выполните следующую команду:

zenity --help-text-info

Диалоговое окно текстовой информации распечатает любой текст из файла или откроет URL-адрес в диалоговом окне. Например, чтобы прочитать файл и отобразить текст, используйте флаг --filename. В приведенном ниже примере я читаю файл /etc/hosts.

zenity --text-info \
--title "Hostname Information" \
--filename "/etc/hosts"

Чтение из файла

Флаг --checkbox можно использовать для получения ввода от пользователя. Хорошим примером будет «Принятие лицензионного соглашения». Если вы не установите флажок, кнопка ОК будет неактивна.

zenity --text-info \
--title "Hostname Information" \
--filename "/etc/hosts" \
--checkbox "This is a checkbox"

Использование флажка

6. Диалоговое окно «Календарь».

Чтобы получить доступ к списку поддерживаемых параметров диалогового окна календаря, выполните следующую команду:

zenity --help-calendar

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

zenity --calendar \
       --title="Select a Date" \
       --text="Select Date to pull the employee record."

Диалоговое окно «Календарь»

По умолчанию выбирается сегодняшняя дата, но мы также можем выбрать произвольную дату, используя --day, --month и --year. флаги.

zenity --calendar \
       --title="Select a Date" \
       --text="Select Date to pull the employee record." \
       --year 2015 \
       --month 7 \
       --day 15

Пользовательская дата, месяц, год

Формат вывода по умолчанию: ДД\ММ\ГГ. Также возможно создать собственный вывод даты, используя флаг --date-format.

zenity --calendar \
       --title="Select a Date" \
       --text="Select Date to pull the employee record." \
       --date-format %m-%d-%y

Пользовательское форматирование вывода

7. Диалоговое окно выбора цвета.

Чтобы получить доступ к списку поддерживаемых параметров диалогового окна выбора цвета, выполните следующую команду:

zenity --help-color-selection

В диалоговом окне выбора цвета отобразится палитра, позволяющая выбрать цвет, а на выходе будет значение RGB. Используйте флаг --color-selection вместе с флагом --show-palette.

COLOR_RGB=$(zenity --color-selection --show-palette)
echo $COLOR_RGB

Диалог выбора цвета

8. Диалоговое окно выбора файла.

Чтобы получить доступ к списку поддерживаемых параметров диалогового окна выбора файла, выполните следующую команду:

zenity --help-file-selection

Диалоговое окно выбора файла позволит вам выбрать файлы или каталоги, а путь отобразится в качестве вывода. Следует использовать флаг --file-selection. Есть несколько флагов, которые можно использовать в диалоге выбора файла.

  • --filename => Путь к файлу/каталогу по умолчанию
  • --directory => Выбирать нужно только каталоги
  • --multiple => Позволяет выбрать несколько имен файлов.
  • --save => Установить режим сохранения
zenity --file-selection \
       --title "Select Files" \
       --filename "/home/${USER}/" \
       --multiple

Выбрать файлы

В случае выбора нескольких вариантов путь к файлу будет разделен символом "|".

Выходной разделитель

Можно установить собственный разделитель, используя флаг --separator. В приведенном ниже примере я использую двоеточие (:) в качестве разделителя.

zenity --file-selection \
       --title "Select Files" \
       --filename "/home/${USER}/" \
       --multiple \
       --separator :

Пользовательский разделитель

9. Диалоговое окно «Формы»

Чтобы получить доступ к списку поддерживаемых параметров диалогового окна форм, выполните следующую команду:

zenity --help-forms

Диалог форм позволяет создавать формы. Хорошим примером является новая форма регистрации пользователя. Используйте флаг --forms для создания диалогового окна формы. Есть несколько дополнительных флагов, которые можно использовать вместе с флагом --forms.

  • --add-entry => Добавьте новую запись в диалоговое окно формы, чтобы пользователь мог ввести данные.
  • --text => Текст, который будет отображаться в диалоговом окне.
  • --add-password => Принимает пароль, но не отображает его значение на экране.
  • --calendar => Откройте календарь и выберите в нем дату.

Ниже приведен простой пример формы регистрации пользователя с использованием диалогового окна форм.

zenity --forms \
       --text "Welcome to signup wizard" \
       --add-entry "Enter the first name" \
       --add-entry "Enter the last name" \
       --add-entry "Enter login name" \
       --add-password "Enter password"

Диалоговое окно «Формы» — регистрация пользователя

Разделителем по умолчанию для входных значений является символ "|". Вы также можете настроить разделитель, используя флаг --separator.

Разделитель по умолчанию

10. Диалоговое окно «Прогресс»

Чтобы получить доступ к списку поддерживаемых параметров диалогового окна индикатора выполнения, выполните следующую команду:

zenity --help-progress

Используйте флаг --progress, чтобы создать индикатор выполнения. Чтобы создать индикатор выполнения, вы должны понимать, как он работает. С вашей стороны должны быть предоставлены два входа.

  1. Строка, содержащая только число с командой echo, будет считаться процентом прогресса.
  2. Строка, начинающаяся с символа # в команде echo, будет напечатана как сообщение о ходе выполнения.
(
  echo 10
  echo "# Updating repository Index"
  sleep 5

  echo 15
  echo "# Reading input files"
  sleep 5

  echo 70
  echo "# Installing packages..."
  sleep 5

  echo 100
  echo "# Package Installation completed!"
) | zenity --title "Package Installation Progress Bar" --progress --auto-close

Диалоговое окно индикатора выполнения

Как только индикатор выполнения будет завершен, вы можете создать диалоговое окно, которое будет автоматически закрываться, используя флаг --auto-close.

11. Диалоговое окно «Список»

Чтобы получить доступ к списку поддерживаемых параметров диалогового окна списка, выполните следующую команду:

zenity --help-list

Диалоговое окно списка позволяет создать список строк и столбцов. Используйте флаг --list для создания диалогового окна списка и флаг --column для добавления столбцов.

zenity --list \
      --column "Player" \
      --column "Club" \
      --column "Country" \
      Messi PSG Argentina \
      Neymar PSG Brazil \
      Ronaldo Manu Portugal

Список

Взгляните на приведенный выше пример. Используя флаг --column, я создал три столбца. После создания столбцов вы можете ввести значение в следующих строках, которые будут отображаться для каждой строки, как я это сделал на изображении выше.

В первом столбце можно создать флажок или переключатели. Чтобы создать переключатель, используйте флаг --radiolist, а для создания флажка используйте флаг --checklist. При создании списка радио обязательно добавьте ключевые слова TRUE или FALSE в качестве первого значения для вашей строки. True выберет радиосписок или флажок, а false оставит поле невыбранным.

zenity --list \
      --checklist \
      --column "checkbox" \
      --column "Player" \
      --column "Club" \
      --column "Country" \
      FALSE Messi PSG Argentina \
      FALSE Neymar PSG Brazil \
      FALSE Ronaldo Manu Portugal

Контрольный список

Когда вы выберете строку и нажмете «ОК», значение будет выведено на терминал с (|) в качестве разделителя. По умолчанию на терминал выводится только первый столбец. Чтобы напечатать всю строку, передайте --print-column ALL.

Заключение

Мы подошли к концу статьи. Я кратко объяснил, что такое zenity и какие виджеты можно использовать. Возможно, вам не всегда нужны утилиты с графическим интерфейсом. Однако, если вам нужны графические виджеты GTK+ для сценариев bash, Zenity окажется полезным среди других инструментов с графическим интерфейсом.

Ресурс:

  • Руководство по Zenity

Руководства по написанию сценариев Bash:

  • Сценарии Bash – утверждение случая
  • Сценарии Bash – условные операторы
  • Скрипты Bash: манипулирование строками
  • Сценарии Bash: команда Printf с примерами
  • Скрипты Bash: индексированные массивы с примерами
  • Скрипты Bash: объяснение ассоциативных массивов на примерах
  • Скрипты Bash: цикл For с примерами
  • Скрипты Bash: циклы while и Until с примерами
  • Перенаправление Bash, объясненное примерами
  • Скрипты Bash: переменные, поясняемые примерами
  • Скрипты Bash: функции, поясняемые примерами
  • Команда Bash Echo с примерами для Linux
  • Руководство по Bash Heredoc для начинающих

Статьи по данной тематике