Zenity: создание диалогов GTK+ в сценариях оболочки
Zenity — инструмент, позволяющий создавать графические диалоговые окна в Linux с помощью командной строки. Он использует GTK+, набор инструментов для создания графических пользовательских интерфейсов (GUI), упрощающий добавление визуальных элементов в ваши сценарии.
Zenity может быть чрезвычайно полезен для сценариев оболочки, поскольку он обеспечивает простой способ взаимодействия с пользователями посредством диалоговых окон, таких как информационные окна, средства выбора файлов, индикаторы выполнения и т. д.
В этой статье мы подробно рассмотрим, как работает Zenity, типы диалоговых окон, которые он может создавать, и как эффективно использовать его в сценариях оболочки.
Зачем использовать Zenity?
При написании сценариев оболочки взаимодействие с пользователем обычно осуществляется посредством ввода/вывода текста в терминале. Однако существуют сценарии, в которых вам может потребоваться обеспечить более удобный интерфейс, особенно если сценарий предназначен для людей, которым могут быть неудобны команды терминала.
Zenity помогает решить эту проблему, позволяя создавать графические диалоговые окна, которые легко понять и использовать.
Установка Zenity в Linux
Большинство современных дистрибутивов Linux поставляются с предустановленным Zenity, и вы можете проверить, доступен ли Zenity в вашей системе, введя следующую команду в терминале:
zenity --version
4.0.1
Если установлен Zenity, эта команда отобразит номер версии. Если он не установлен, вы можете установить его с помощью менеджера пакетов.
sudo apt install zenity [On Debian, Ubuntu and Mint]
sudo yum install zenity [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/zenity [On Gentoo Linux]
sudo apk add zenity [On Alpine Linux]
sudo pacman -S zenity [On Arch Linux]
sudo zypper install zenity [On OpenSUSE]
sudo pkg install zenity [On FreeBSD]
Базовое использование Zenity в Linux
Zenity очень прост в использовании, поскольку он вызывает различные типы диалоговых окон из командной строки с использованием различных параметров. Каждая опция соответствует определенному типу диалогового окна.
Пример 1: Отображение информационного диалогового окна
Одно из самых простых применений Zenity — отображение информационного диалога.
zenity --info --text="This is an information dialog"
Пример 2. Отображение диалогового окна с предупреждением
Вы также можете отобразить диалоговое окно с предупреждением, используя следующую команду:
zenity --warning --text="This is a warning message"
Пример 3: Отображение диалогового окна вопроса
Диалоговое окно вопросов можно использовать, чтобы задать пользователю вопрос типа «да/нет». Результат возвращается в виде кода выхода.
if zenity --question --text="Do you want to continue?"; then
echo "User selected Yes"
else
echo "User selected No"
fi
Пример 4. Отображение диалогового окна выбора файла
Zenity также можно использовать для открытия диалогового окна выбора файла, позволяющего пользователям выбрать файл из своей системы:
FILE=$(zenity --file-selection --title="Choose a file")
echo "You selected: $FILE"
Пример 5: Отображение диалогового окна ввода текста
Вы можете создать диалоговое окно, предлагающее пользователю ввести текст, который может быть полезен для получения пользовательского ввода.
USER_INPUT=$(zenity --entry --title="Input required" --text="Enter your name:")
echo "You entered: $USER_INPUT"
Пример 6: Отображение диалогового окна пароля
Если вы хотите запросить у пользователя пароль, вы можете использовать диалоговое окно пароля, но ввод будет скрыт от просмотра:
PASSWORD=$(zenity --password --title="Enter your password")
echo "Password entered: $PASSWORD"
Пример 7. Отображение диалогового окна индикатора выполнения
Zenity может отображать индикатор выполнения, что полезно, когда вы хотите указать, что задача выполняется.
(
for i in {1..100}; do
echo $i
sleep 0.1
done
) | zenity --progress --title="Task in progress" --text="Please wait..." --percentage=0
Пример 8: Отображение диалогового окна ошибки
Вы можете отобразить диалоговое окно ошибки, если в вашем скрипте что-то пойдет не так:
zenity --error --text="An error occurred!"
Пример 9: Отображение диалогового окна списка
Zenity может отображать список опций, из которых пользователь может выбрать:
zenity --list --title="Choose an option" --column="Options" "Option 1" "Option 2" "Option 3"
Использование Zenity в сценариях оболочки
Zenity можно легко интегрировать в сценарии оболочки, чтобы сделать работу более удобной для пользователя.
Вот полный пример простого скрипта, использующего различные диалоговые окна Zenity.
#!/bin/bash
Welcome message
zenity --info --text="Welcome to the user setup script"
Ask for user's name
USER_NAME=$(zenity --entry --title="User Information" --text="Please enter your name:")
Ask for confirmation
if zenity --question --text="Is your name $USER_NAME?"; then
zenity --info --text="Thank you, $USER_NAME"
else
zenity --error --text="Name mismatch. Exiting script."
exit 1
fi
File selection
FILE=$(zenity --file-selection --title="Select a file to process")
zenity --info --text="You selected: $FILE"
Display progress
(
for i in {1..100}; do
echo $i
sleep 0.1
done
) | zenity --progress --title="Processing file" --text="Please wait while we process the file..." --percentage=0
zenity --info --text="Process complete!"
Этот сценарий начинается с приветствия пользователя, затем запроса его имени, подтверждения имени, запроса на выбор файла и отображения индикатора выполнения во время обработки файла. Он демонстрирует, как Zenity можно использовать для добавления графического интерфейса к сценарию, который в противном случае был бы текстовым.
Обработка ошибок в Zenity
Zenity возвращает разные коды выхода в зависимости от действий пользователя. Понимание этих кодов помогает правильно обрабатывать ошибки или отмены действий пользователей в ваших сценариях.
- Код выхода 0: пользователь нажал «ОК» или выбрал вариант.
- Код выхода 1: пользователь нажал «Отмена» или закрыл диалоговое окно.
- Код выхода -1: произошла ошибка.
Вы можете использовать эти коды выхода для обработки различных ответов пользователя:
if zenity --question --text="Do you want to proceed?"; then
echo "Proceeding..."
else
echo "Action canceled by the user."
exit 1
fi
Заключение
Zenity — невероятно полезный инструмент для создания графических диалоговых окон в сценариях оболочки. Независимо от того, создаете ли вы простые средства выбора файлов, интерактивные диалоговые окна с вопросами или индикаторы выполнения, Zenity может улучшить ваши сценарии, предоставив удобный интерфейс.
Используя Zenity, вы можете сделать свои приложения командной строки и сценарии оболочки более доступными для нетехнических пользователей.