Bash - замечательная штука! В подавляющем большинстве случаев намного удобнее произвести настройки системы в командной строке, чем тыкать по кнопочкам и путешествовать по множеству окон, а самое приятное то, что любые настройки можно автоматизировать написав скрипт. Но иногда возникают такие ситуации, что к вашим замечательным скриптам необходимо дать доступ людям, которые не имеют навыков использования командной строки. В таком случае возникает необходимость создания простого примитивного подобия графического интерфейса, причем обычно достаточно функционала диалоговых окон.
В KDE можно легко создавать диалоговые окна в bash-скриптах, используя программу Kdialog. Причем окна могут быть самые разнообразные от обычных yes-no-cancel, до диалогов открытия/сохранения файла и отображения полосы прогресса. Использование продемонстрирую на своем реальном примере.
У меня на домашнем компьютере возможны две конфигурации сети: первая - это настройка по умолчанию на использование Интернета от провайдера и вторая - виртуальное соединение vtund с работой и использование рабочего Интернет-соединения. Между этими конфигурациями мне периодически надо переключаться. Для всего этого у меня, конечно же, есть различные скрипты. На эти скрипты я и навесил немного гуйчика.
Итак, у меня есть 5 скриптов:
Первые две строки понятны - это переход в каталог со скриптами, а вот последняя строка выводит диалоговое окно для ввода пароля root и в случае правильного пароля выполняет команду, указанную после параметра "-c" с правами суперпользователя, которые необходимы для выполнения команд содержащихся в других скриптах.
Скрипт net_conf_choise.sh:
В скрипте net_conf_choise.sh показан пример использования окна выбора. В переменную CHOISE будет сохранен символ "a", если будет выбран пункт "vtund" и "b", если выбран "default". В зависимости от выбора будет запущен соответствующий скрипт настройки сети.
При выборе в окне пункта default будет запущен скрипт network_default.sh:
В этом скрипте показано использование окна с полосой прогресса. Сначала запускается сама программа kdialog, которая отображает окно. Для взаимодействия скрипта с программой kdialog используется программа qdbus. qdbus - это консольная программа, которая позволяет "общаться" с приложениями через систему D-Bus.
Другие два скрипта я описывать не буду, потому что в vtund.run программа kdialog используется таким же образом, как и в network_default.sh, а set_local_routes.sh вообще не содержит вызовов окон.
Приведенные примеры демонстрируют, как можно украсить или сделать более доступными ваши скрипты, не прибегая по сути к настоящему программированию. Больше примеров использования kdialog можно посмотреть тут, а здесь есть примеры использования других графических программ в bash-скриптах. Маленькие интересные примеры использования qdbus можно глянуть тут.
Замечание! В KDE3 вместо qdbus надо использовать dcop.
Если у вас не работает kdesu в KDE 4, то посмотрите мое сообщение о баге, на который я наткнулся в openSUSE 11.4, вдруг поможет.
В KDE можно легко создавать диалоговые окна в bash-скриптах, используя программу Kdialog. Причем окна могут быть самые разнообразные от обычных yes-no-cancel, до диалогов открытия/сохранения файла и отображения полосы прогресса. Использование продемонстрирую на своем реальном примере.
У меня на домашнем компьютере возможны две конфигурации сети: первая - это настройка по умолчанию на использование Интернета от провайдера и вторая - виртуальное соединение vtund с работой и использование рабочего Интернет-соединения. Между этими конфигурациями мне периодически надо переключаться. Для всего этого у меня, конечно же, есть различные скрипты. На эти скрипты я и навесил немного гуйчика.
Итак, у меня есть 5 скриптов:
- enetconf - служит для запуска net_conf_choise.sh с правами пользователя root
- net_conf_choise.sh - скрипт отвечающий за выбор конфигурации
- network_default.sh - настраивает сеть по умолчанию
- vtund.run - поднимает vtund-соединение и запускает set_local_routes.sh
- set_local_routes.sh - устанавливает прямые маршруты для локальных сетей провайдера, чтобы не ходить на эти ресурсы через рабочее Интернет-соединение.
#!/bin/bash NET_CONF_DIR="/opt/scripts/enetconf" cd $NET_CONF_DIR kdesu -t -c "bash ./net_conf_choise.sh"
Первые две строки понятны - это переход в каталог со скриптами, а вот последняя строка выводит диалоговое окно для ввода пароля root и в случае правильного пароля выполняет команду, указанную после параметра "-c" с правами суперпользователя, которые необходимы для выполнения команд содержащихся в других скриптах.
Скрипт net_conf_choise.sh:
#!/bin/bash CHOISE=`kdialog --menu "Выбор конфигурации сети:" a "vtund" b "default"` # если нажата кнопка OK if [ $? == 0 ] then case $CHOISE in a) ./vtund.run ;; b) ./network_default.sh ;; esac fi
В скрипте net_conf_choise.sh показан пример использования окна выбора. В переменную CHOISE будет сохранен символ "a", если будет выбран пункт "vtund" и "b", если выбран "default". В зависимости от выбора будет запущен соответствующий скрипт настройки сети.
При выборе в окне пункта default будет запущен скрипт network_default.sh:
#!/bin/bash IFACE=wlan0 # запускаем программу kdialog, отображающую полосу прогресса, # полоса прогресса состоит из 3-х пунктов # сохраняем ссылку на kdialog в переменной для использования в qdbus # (если можно так выразиться:)) dbusRef=`kdialog --progressbar "Подготовка" 3` # устанавливаем положение полосы на первый пункт qdbus $dbusRef Set "" value 1 # устанавливаем отображаемое сообщение qdbus $dbusRef setLabelText "Уничтожение vtund..." # убиваем vtund если есть killall vtund sleep 1 qdbus $dbusRef Set "" value 2 qdbus $dbusRef setLabelText "Удаление маршрутов..." ip route flush all sleep 1 qdbus $dbusRef Set "" value 3 qdbus $dbusRef setLabelText "Установка стандартных маршрутов..." ip route add 192.168.1.0/24 dev $IFACE ip route add default via 192.168.1.1 # закрываем диалог qdbus $dbusRef close
В этом скрипте показано использование окна с полосой прогресса. Сначала запускается сама программа kdialog, которая отображает окно. Для взаимодействия скрипта с программой kdialog используется программа qdbus. qdbus - это консольная программа, которая позволяет "общаться" с приложениями через систему D-Bus.
Другие два скрипта я описывать не буду, потому что в vtund.run программа kdialog используется таким же образом, как и в network_default.sh, а set_local_routes.sh вообще не содержит вызовов окон.
Приведенные примеры демонстрируют, как можно украсить или сделать более доступными ваши скрипты, не прибегая по сути к настоящему программированию. Больше примеров использования kdialog можно посмотреть тут, а здесь есть примеры использования других графических программ в bash-скриптах. Маленькие интересные примеры использования qdbus можно глянуть тут.
Замечание! В KDE3 вместо qdbus надо использовать dcop.
Если у вас не работает kdesu в KDE 4, то посмотрите мое сообщение о баге, на который я наткнулся в openSUSE 11.4, вдруг поможет.
Присмотрись на меню в zsh, например https://www.youtube.com/watch?v=E2WXc3qAg8A
ОтветитьУдалить