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
, чтобы создать индикатор выполнения. Чтобы создать индикатор выполнения, вы должны понимать, как он работает. С вашей стороны должны быть предоставлены два входа.
- Строка, содержащая только число с командой
echo
, будет считаться процентом прогресса. - Строка, начинающаяся с символа
#
в команде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 для начинающих