LINUX.ORG.RU

Избранные сообщения pki_gost

Visual Tcl. Разработка графического интерфейса на базе Tcl/tk для утилит командной строки

Форум — Development

Тестируя облачный криптографический токен PKCS#11 на различных платформах, меня не покидала мысль о некой несправедливости: почему утилиты конфигурирования токенов PKCS#11 на платформе MS Windows имеют графический интерфейс, а для других платформ его нет.

Выходом могло бы быть написание на языке C/C++ GUI (графической оболочки) для этих утилиты, например, с использованием библиотеки Qt. Но тут в памяти всплыло, что есть скриптовый язык высокого яровня Tcl (Tool Command Language), который в связке с графической библиотекой Tk (Tool Kit) и позволяет быстро создавать графические интерфейсы для консольных программ или утилит командной строки.

Впервые я познакомился с пакетом Tk/Tcl в далеком 1997 году, когда планировалось на нем написать графический интерфейс для системы контроля доступа (СКД). Тогда графические возможности пакета произвели сильное впечатление и, в частности, tetris.

Одной из причин, по которой отказались от использования Tk/Tcl, было отсутствие для него в то время конструктора (дизайнера) аналогичного сегодняшнему, скажем, QT-designer. Освежив в памяти возможности Tk/Tcl, а нас интересовало, помимо графических возможностей, организация взаимодействия с утилитами командной строки, и убедившись, что мы стоим на правильном пути, мы принялись за поиск конструктора. После проведенного анализа имеющихся конструкторов выбор пал на дизайнер tkBuilder и Visual Tcl.

Что касается утилиты tkBuilder, то здесь не обошлось без ложки дегтя. Первое, она поддерживает только tcl/tk версии 8.4.Ну и вторая ложка дегтя классическая. Дизайнер tkBuilder отказывается работать с русскими буквами. Подчеркиваю, это касается только дизайнера и не касается Tcl/Tk, для которого русский язык как дом родной.

Что касается второго конструктора, то он оказался лишенным этих недостатков. Текущая поддерживаемая версия это версия 8.6:

bash-4.3$ cd ../vtcl.vtcl-8.6-master
bash-4.3$ ./configure 
Using /bin/wish8.6
bash-4.3$

И никаких проблем с «великим, могучим, правдивым и свободным русским языком!» (И.С. Тургенев).

После предварительного ознакомления было решено использовать его в деле, а именно разработать графическую оболочку для утилиты командной строки ls11cloud_config, с помощью которой можно получить доступ к облачному криптографическому токену PKCS#11:

bash-4.3$ /usr/local/bin64/ls11cloud_config
LS11CLOUD User Utility 
usage:  /usr/local/bin64/ls11cloud_config <command> [-p <password>] [-n <new password>]    
Commands:
   register <host> <port> <id> - register new user on the server 
        duplicate <host> <port> <id> - duplicate user account on other computer 
        change_pswd - change SESPAKE authentication password 
        status      - display current configuration data 
        log         - display server log file 
        recreate    - re-create token to initial empty state 
        unregister  - remove all user files from the server 
NB: Don't use non-latin letters to avoid encoding problems! 
Copyright(C) 2017 
bash-4.3$

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

Но осмотревшись оказалось что пару окон (новостную ленту – Visual Tcl News и знаете ли вы это – Did you know)можно закрывать без всякого ущерба для работы. И оказывается, что окон уже и не так много и, при необходимости, их можно периодически скрывать.

Приятной неожиданностью стало наличие своего мольберта] для каждого виджета класса toplevel.

В нашем проекте потребовалось три виджета класса toplevel и, соответственно, в нашем распоряжении было три мольберта:

1. Виджет GUICloudConfig, основное окно с функциями утилиты ls11cloudconfig (см. выше);

2. Виджет Password, который так или иначе задействован во всех функциях утилиты для ввода пароля для доступа к облаку токена;

3. Виджет CloudToken, который задействуется в функциях Регистрации и Дублирования облачного криптографического токена.

Проект в понимании Visual Tcl сохраняется как файл Tcl/Tk (*.tcl) и его в любой момент можно выполнять самостоятельно без дополнительных преобразований. Обратное не верно, далеко не каждый файл Tcl/Tk конструктор Visual Tcl будет рассматривать как свой проект.

На еще одну очень полезную вещь навел проект Visual Tcl – возможность сохранения проекта в бинарном коде. Для этой цели задействуется утилита freewrap, которая превращает скрипты Tcl / Tk в однофайловые исполняемые программы. Так и мы оба скрипта, реализующих графический интерфейс для утилит p11conf и ls11cloudconfig, преобразовали в исполняемые программы:

bash-4.3$ ls 
GUITKP11Conf.tcl  LS11CLOUD_CONFIG.tcl 
bash-4.3$
bash-4.3$ freewrap GUITKP11Conf.tcl
bash-4.3$ freewrap LS11CLOUD_CONFIG.tcl
bash-4.3$ ls 
GUITKP11Conf      LS11CLOUD_CONFIG      
GUITKP11Conf.tcl  LS11CLOUD_CONFIG.tcl 
bash-4.3$

Теперь осталось только все (проекты, tcl-скрипты и исполняемые программы) упаковать в архив и выложить для учебных целей. Скачать архив можно здесь.

 , , , ,

vip513 ()