Журнал Системный Администратор, Сентябрь 2004

Журнал Системный Администратор

Сентябрь 2004

Цена: $4.5 US

  Подписаться

Зарегистриванные пользователи, пожалуйста следуйте этой ссылке

Версия для печати Вернуться к оглавлению

Взаимодействие shell-скриптов с пользователем посредством Zenity

Андрей Уваров

В данной статье речь пойдёт о том, каким образом можно без особых усилий сделать графический интерфейс к shell-скриптам.

Если вы хотите сделать взаимодействие ваших программ с пользователем более простым, то эта статья для вас, и не важно, какой язык вы используете, будь то bash, perl, python и т. п.

Итак, Zenity является утилитой отображения диалогов. Программа имеется в составе большинства распостранённых дистрибутивов Linux, хотя ее можно скомпилировать или найти уже в бинарном виде практически для любой *nix-системы.

Взаимодействие с X-сервером производится с помощью библиотеки GTK+.

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

1. Calendar – календарь (date-picker).

2. Entry – однострочное текстовое поле ввода.

3. Text-info – диалог отображения многострочной текстовой информации, который может применяться и как поле ввода. Хотя, по всей видимости, это не является его основным назначением.

4. Error – сообщение об ошибке.

5. Info – сообщение общего характера.

6. Warning – предупреждение.

7. Question – вопросительное сообщение с возможностью ввода утвердительного или отрицательного ответа.

8. File-selection – выбор файла.

9. List – список с возможностью выбора и редактирования его элементов.

10. Progress – Progress bar dialog. Отображает статус выполнения текущей операции.

Заставить утилиту делать то, что мы пожелаем, можно посредством запуска программы с соответствующими параметрами. Имя любого из параметров состоит более чем из одного символа и, следовательно, имеет префикс «--» – «два минуса». При завершении выполнения будут выведены результирующие данные в stdout или же код будет просто возвращён в stderr. Например, чтобы отобразить сообщение об ошибке, достаточно выполнить следующее:

# zenity --error

В результате мы увидим сообщение об ошибке:

Все диалоги имеют некоторые свойства, значения которых также определяются параметрами запуска. Общие для всех диалогов свойства, то есть те, которыми обладают все диалоги, такие: title, window-icon, width, height. Очевидно, что title определяет заголовок окна, window-icon – пиктограмму, а width и height – ширину и высоту окна соответственно.

Теперь можно поговорить о каждом из диалогов подробнее.

Info, question, warning и error

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

 

Calendar

n  Text – сообщение, выводимое над полем выбора даты.

n  Day, month и year – день, месяц и год, которые будут установлены по умолчанию.

n  Date-format – строка, определяющая формат возвращаемой даты. Формат строки эквивалентен формату вызова функции strftime.

Попробуем написать простое приложение, запрашивающее дату рождения пользователя.

Файл birthdate.pl:

#! /usr/local/bin/perl

 

do

    print `zenity --info --text "You may not enter real birth date" --title=birthday`;

while(!($birthdate = `zenity --calendar --date-format=%d.%m.%y`));

`zenity --info --text "Your birth date is $birthdate" --title "Your Bitrh Date"`;

Entry

n  Text – сообщение, выводимое над полем ввода.

n  Entry-text – текст, которым автоматически заполняется поле ввода.

n  Hide-text – если присутствует, то вводимые символы отображаются «звёздочками».

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

Файл command.sh:

#! /bin/sh

```zenity --entry --title "Run command" --text "Command:```

List

n  Column – заголовок столбца.

n  Check-list – использование check box для первого столбца.

n  Radio-list – использование radio buttons для первого столбца.

n  Separator – разделитель, использующийся при выводе информации. По умолчанию это символ «|».

n  Editable – присутствие данного параметра означает, что пользователь может редактировать элементы списка.

Text-info

n  File-name – имя файла, содержимое которого будет отображено.

n  Editable – использование данного параметра аналогично List.

File-selection

n  File-name – имя файла, устанавливаемое по умолчанию.

n  Multiple – возможность выбора сразу нескольких файлов.

n  Separator – использование данного параметра аналогично List.

Progress

n  Text – сообщение над progress bar.

n  Percentage – начальное состояние, указываемое в процентах.

n  Auto-close – автоматическое закрытие диалога после достижения 100%.

n  Pulsate – определяет отображение «пульсирующего» прогресса.

 

Кроме того, Zenity имеет ещё несколько менее важных дополнительных опций.

n  --gdk-debug=FLAGS – установка флагов отладки Gdk;

n  --gdk-no-debug=FLAGS – отмена флагов отладки Gdk;

n  --display=DISPLAY;

n  --sync – использование синхронных X-вызовов;

n  --name=NAME – имя программы, используемое оконным менеджером;

n  --class=CLASS – класс программы, используемый оконным менеджером;

n  --gxid-host=HOST;

n  --gxid-port=PORT;

n  --gtk-debug=FLAGS – установка флагов отладки Gtk+;

n  --gtk-no-debug=FLAGS – отмена флагов отладки Gtk+;

n  --g-fatal-warnings – все предупреждения приводят к завершению выполнения;

n  --gtk-module=MODULE – загрузить дополнительный модуль Gtk.

Кроме Zenity, есть ещё такие средства, как xdialog, dialog, kdialog, xmessage. Рассмотрим вкратце некоторые из них.

Dialog – программа, использующая Ncurses для вывода диалогов. Вследствие этого является достаточно универсальной, так как не все и не всегда пользуются X-Window. Вот список параметров dialog:

n  --yesno <text> <height> <width>

n  --msgbox <text> <height> <width>

n  --prgbox «<command line>» <height> <width>

n  --infobox <text> <height> <width>

n  --inputbox <text> <height> <width> [<init string>]

n  --textbox <file> <height> <width>

n  --menu <text> <height> <width> <menu height> <tag1> <item1>...

n  --checklist <text> <height> <width> <list height> <tag1> <item1> <status1>...

n  --radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>...

n  --ftree <file> <FS> <text> <height> <width> <menu height>

n  --tree <FS> <text> <height> <width> <menu height> <item1>...

Kdialog поставляется в составе KDE. Имеет сходный интерфейс с dialog и xdialog. Но, на мой взгляд, kdialog более избыточен и менее функционален, нежели Zenity. Xmessage предназначается исключительно для вывода сообщений, но внешний вид, думаю, редкого пользователя может порадовать.

Необходимо учесть, что пользователь может и не иметь установленной Zenity. И не стоит забывать о том, что есть средства, такие как xdialog, dialog, kdialog, kmessage, и другие. Может быть, в вашем случае они подойдут больше.




Все права зарезервированы. Этот материал принадлежит или лицензирован компании PLARANA INC. Только для частного использования. Любое распространение запрещено без письменного разрешения PLARANA INC
Версия для печати Вернуться к оглавлению