PermLUG |
Пермская группа пользователей Linux |
|
|
|
||
Вход в систему |
Создаём GUI к скриптам лёгким движением руки или GTK на bash
CORPSE, 08.12.2009 — 18:02
Доброго времени суток всем. Чистая консоль - это конечно же, очень хорошо и практически не требует вычислительных ресурсов, но часто мы жертвуем оными ради некоторой доли удобства. Чем я вчера и занялся. Поставил себе задачу частично автоматизировать и собрать в одну кучку средства решения некоторых задач, связанных с сетью, с которыми мне приходится сталкиваться на работе. В идеале это будет некая панель управления на GTK, работающая по принципу "нажми на кнопку - получишь результат". Начать решил со следующей задачи: периодически нужно сканировать подсети на предмет находждения свободных и занятых ip адресов, а у живых хостов проверять на открытость определённые порты, получать их мак и dns адреса и т.п.. Итак, нужен инструмент, быстро пингующий хосты сети по маске или диапазону и строящий наглядный список. Можно конечно, написать скрипт, но зачем изобретать велосипед, когда его уже изобрели. Я нашёл утилитку под названием "fping". Краткое описание из репозитория debian: Description-ru: отправляет на сетевые устройства пакеты ICMP ECHO_REQUEST fping -- это программа, похожая на ping, она использует echo-запрос протокола управляющих сообщений Internet (ICMP), чтобы определить -- отвечает ли целевое устройство. fping отличается от ping тем, что вы можете указать любое количество целей в командной строке, либо задать их через файл. Вместо того, чтобы отправлять запрос на одну цель, и дожидаться ответа или истечения времени, fping отправляет ping-пакет и переходит к следующей цели и так по кругу. Теперь нужно озадачиться созданием графического интерфейса. Лучше всего для этой цели подходит gtkdialog (http://linux.pte.hu/~pipas/gtkdialog/), хотя и содержит в себе изрядную долю досадных ошибок. Например, мне так и не удалось на лету добавлять элементы в таблицу. Я промучался два часа, пока не наткнулся на багрепорт: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=520707 Для реализации моих задач, я надеюсь, что хватит той версии, которая идёт в дистрибутиве debian-lenny. Сначала установим то, что нам понадобится: apt-get install gtkdialog fping Объясню в двух словах общий принцип работы gtkdialog. Сначала создаётся на языке xml описание формы, расположение и наименование компонент, вызов различных действий при работе с этими компонентами (например, нажатие кнопки), источники данных (наполнение таблиц, иконки пунктов и т.п..). Потом полученное описание скармливается интерпретатору - собственно, бинарному файлу gtkdialog, который уже создаёт формы, кнопки и прочие объекты соотвественно описанию. А реакцию на них уже обрабатывает скрипт. Возможности не очень широки, если честно. Например, я так и не смог понять, можно ли в качестве источника данных для editor использовать не файл, а переменную или другой скрипт, как это сделано с entry, можно ли сделать группу из radiobutton, если они не идут подряд, а расположены в разных местах на форме и т.п.. В общем, вопросов масса, а ответить на них некому и даже гугл меня не спас. В общем, работать пришлось большей частью по наитию. Не смотря на это, получилось даже что-то живое. Ниже я просто выложу ссылку на скрипт (ибо из-за куска на xml тут он просто отображается некорректно), думаю, с его восприятием проблем не возникнет. А если будут какие-то вопросы, я отвечу. http://shumilov.org/blog/wp-content/uploads/2009/12/fpinggui Полученный фронт энд позволяет быстро просканировать диапазон адресов и вывести их список в левой части окна. В правой я со временем добавлю кнопки, запускающие nmap например или host на выделенный в левой части ip адрес, но об этом в следующей нашей передаче. :) Кстати, только сегодня открыл для себя возможность при помощи sort корректно упорядочить ip адреса. Т.е. чтобы сначала шёл 192.168.1.9, а за ним 192.168.1.10, а не 192.168.1.1, 192.168.1.10 и т.п.. Т.е., не по алфавиту, а по числовому значению сегмента. Это довольно легко делается, если указать sort'у сортировать числовым методом, в качестве разделителя поставить точку, а потом указать по какому сегменту производить сортировку: sort -u -t "." -k 4 -n Итог: на чистом баше в несколько десятков строк мы получили почти что графическое приложение. :) P.S.: В аттаче скриншот в действии. |
Тэги в ТегиНовые записи в блогах
Активные обсуждения форума
Новости Linux
|
| Пермская группа пользователей Linux, 2003—2011 | ||
Для решения твоей проблемы смотри тут:
http://ru.wikipedia.org/wiki/Zeroconf
http://ru.wikipedia.org/wiki/Avahi
А по поводу написания диалогов, раскрывай тему и дальше. Познавательно
За наводку спасибо. :) avahi - действительно интересная вещь. Но мне она не совсем подходит. Скажем, искать от какого порта подключен человек, она не будет.
Я и предположить не мог, что консольное приложение можно так изящно обернуть в оконный интерфейс.
Очень познавательно :)
Спасибо! Я gtkdialog для себя открыл, когда делал свою сборку паппи. Там довольно много всего написано с его использованием, потому что критичен размер приложений. Сначала долго удивлялся - как это в дистрибутив размеров 125 мегабайт входит столько всего и куча визардов сверху, пока случайно не открыл текстовым редактором то, что считал бинарным файлом. Это было откровением. :) Потом я пару часов сидел на попе ровно и постигал дзен, вороша скрипты. :) Аналогов по оффтопик не видел.
Можно еще поглядеть в строну zenity. Тоже штука для создания диалоговых окошек на gtk+ из командной строки. Если не ошибаюсь, то с его применением написан один из gui для арчевского пакетного менеджера packman
Судя по примерам, функционал ограничивается выводом стандартных диалоговых окошек, да и синтаксис жуть какой неудобный. На gtkdialog уже можно делать более серьёзные вещи. Вплоть до обновления свойств компонента на форме на лету.
Вот пример:
http://useunix.ru/napisanie-scriptov-s-graficheskim-interfeisom-2/
Сделать тот же фронтэнд для fping на этом у меня бы не получилось. :)