Скрипты Linux · 5 min read · Jan 22, 2026
Добавление простого GUI к скриптам оболочки Linux с помощью kdialog
Скрипты оболочки — это невероятно полезные вещи. Они позволяют вам сделать что-то настолько простое, как создание легкой команды для замены более сложной с множеством флагов, до пакетирования множества сложных команд для выполнения из задания cron. Они отличны, потому что вы можете быстро запускать их в своем любимом терминале, но в некоторых случаях они требуют от вас запоминания конкретных комбинаций флагов или опций. Если вы оказались в этой ситуации, вы можете добавить несколько простых диалогов GUI, чтобы помочь вам ускорить выполнение текущей задачи.
Чтобы воспользоваться этим руководством, вам понадобятся следующие вещи:
- Доступ к оболочке, подобной Unix (это написано с учетом bash).
- macOS и *nix ОС (такие как Linux) должны поставляться с этим или чем-то подобным.
- На Windows вы можете установить среду CygWin или на последних версиях Windows 10 использовать “Подсистему Windows для Linux”.
- Базовые библиотеки для среды рабочего стола KDE. Вам не нужно все это, особенно если у вас уже установлена другая DE.
Установка kdialog должна быть необходима только в том случае, если вы начали с окружения рабочего стола другого типа, чем KDE, и у вас нет других приложений KDE на вашем компьютере. Это часть пакета kde-baseapps-bin на Ubuntu, что означает, что он установлен по умолчанию на Kubuntu. На других производных вы можете установить его с помощью следующей команды в терминале:
Установка kdialog из терминала.
sudo apt-get install kde-baseapps-binЭто, вероятно, приведет к значительной установке, так как другие библиотеки и пакеты KDE будут установлены вместе с ним. Но эй, место на жестком диске дешево, верно?
Поскольку скрипты (в общем) должны выполнять действия автоматически, нам нужно будет показать этот диалог только в следующих ситуациях:
- Если нам нужно захватить какой-либо ввод от пользователя, или;
- Если мы хотим показать пользователю какой-либо отзыв заметным образом (т.е. не просто текст, выведенный в командной строке).
Давайте возьмем пример использования команды [резервного копирования вашего сайта Drupal с помощью drush]. Конечно, поскольку вы начинающий интернет-предприниматель, у вас не просто один сайт Drupal — у вас их три. Вам бы не хотелось запускать отдельные команды, когда вы хотите сделать резервную копию всех ваших сайтов, но в то же время вы не хотите запоминать длинный путь, если хотите сделать снимок только одного. Мы можем использовать пару диалогов, чтобы помочь себе:
- Предложить пользователю список сайтов, которые мы можем сделать резервными копиями, и попросить его сделать выбор, и;
- Показать пользователю сообщение, подтверждающее результат, будь то успех или неудача.
kDialog работает, вызывая его в командной строке вместе с типом диалога, любыми параметрами, которые этот тип может требовать, и любыми другими опциями, такими как заголовок диалога.
Существует хороший выбор типов диалогов на выбор в зависимости от ваших потребностей, как показано ниже:
Типы kDialog
| Тип диалога | Пример изображения | Описание |
|---|---|---|
| Информационные окна сообщений | ![]() | Отображает окно с кнопкой “OK” для закрытия, предоставляя текстовое сообщение и либо “некритическую” информацию, предупреждение или значок ошибки. |
| Пассивное всплывающее окно | ![]() | Это отображает сообщение, которое исчезнет через несколько секунд, т.е. оно не требует от пользователя закрытия или отклонения. |
| Окно сообщений Да/Нет | ![]() | Как и “Информационные окна сообщений”, это отображает диалог с информационным/предупреждающим/ошибочным значком, который также предоставит выбор пользователя “Да” или “Нет”. |
| Окна ввода диалога | ![]() | Это предоставляет одно окно, в которое пользователь может ввести текст. |
| Окна отображения файлов | ![]() | Это отобразит содержимое (обычного текстового) файла в окне диалога. |
| Окна меню и выбора диалога | ![]() | Это предоставляет диалог со списком элементов, позволяя пользователю сделать один или несколько выборов: - Меню и радиосписки позволяют выбрать один вариант. - Диалог контрольного списка позволяет выбрать один, несколько или все варианты. - Диалог комбобокса позволяет выбрать один вариант с помощью выпадающего меню. |
| Окна выбора файлов | ![]() | Пользователь может выбрать часть файловой системы, включая: - Выбор существующих файлов с возможностью фильтрации по имени или типу файла - Ввод нового имени файла для сохранения/обновления - Каталоги |
| Диалоги прогресса | ![]() | Пользователь может объединить kDialog с командой dcop, чтобы создать диалог, который обновляет пользователя о ходе операции. |
Смотря на вышеуказанные варианты, два из них выделяются как имеющие потенциал:
- “Диалог контрольного списка” позволит нам выбрать один или все наши сайты для резервного копирования.
- “Информационное окно сообщения” можно использовать для отображения, удалось ли выполнить каждую из этих операций или нет.
Учитывая эти варианты, мы можем представить, что наш скрипт будет выглядеть примерно так:
SITE1 находится ЗДЕСЬ (сделайте эти полные пути, а не относительные пути)
SITE2 находится ТАМ
SITE3 находится В ДРУГОМ МЕСТЕ
display a kDialog with SITE1, SITE2, and SITE3 as options
and tell me which one(s) the user picks
for each one the user picked:
run +drush ard+ on that site, and
record whether it was successful or not.
display another +kDialog+ with each of those results.С учетом этого давайте погрузимся в детали.
Первое, что мы должны сделать, это собрать команду drush, которую мы хотим применить к каждому сайту, когда он будет выбран. Предположим, что все сайты находятся на одном веб-хосте в разных каталогах, но мы хотим хранить резервные копии в общем каталоге “backup”. Мы можем использовать следующее:
cd SITE
drush ard --destination=/home/user/backup/SITENAME.tar.gzИтак, используя ваши знания о настройке переменных и циклах for, мы можем сделать этот скрипт следующим образом:
#! /bin/bash
// Примечание: создайте переменные для хранения путей ко всем сайтам
PERSONALSITE='/home/www/mypersonalsite/'
BUSINESSSITE='/home/www/mybusinesssite/'
HOBBYSITE='/home/www/myhobbysite/'
// Примечание: создайте переменную для хранения пути к месту назначения
DESTINATION='/home/user/backup'
// Примечание: отобразите диалог, спрашивающий пользователя, какие сайты сделать резервными копиями
CHOICES=$(kdialog --checklist "Выберите сайты для резервного копирования:" 1 "Личный сайт" off 2 "Бизнес-сайт" off 3 "Сайт хобби" off)
// Примечание: запишите сообщение об успехе/неудаче для каждого из выборов, возвращенных из диалога
for each in $CHOICES
do
case {
1)
cd $PERSONALSITE
drush ard --destination=$DESTINATION/mypersonalsite.tar.gz
if [$?=="0"]
then
RESULTS += "Резервное копирование личного сайта: Успешно\n"
else
RESULTS += "Резервное копирование личного сайта: Не удалось\n"
fi
2)
cd $BUSINESSSITE
drush ard --destination=$DESTINATION/mybusinesssite.tar.gz
if [$?=="0"]
then
RESULTS += "Резервное копирование бизнес-сайта: Успешно\n"
else
RESULTS += "Резервное копирование бизнес-сайта: Не удалось\n"
fi
3)
cd $HOBBYSITE
drush ard --destination=$DESTINATION/myhobbysite.tar.gz
if [$?=="0"]
then
RESULTS += "Резервное копирование сайта хобби: Успешно\n"
else
RESULTS += "Резервное копирование сайта хобби: Не удалось\n"
fi
esac
// ПРИМЕЧАНИЕ: отобразите диалог с результатами всех операций резервного копирования.
kdialog --msgbox $RESULTSЕсли мы сохраним это и сделаем так, как описано в первой статье серии Bash, мы сможем запустить одну команду, получить удобный диалог для выбора нашего сайта, а затем увидеть красивое окно с отчетом о том, как все прошло.
Хотя этот скрипт определенно можно оптимизировать несколькими способами, он демонстрирует, как вы можете использовать kdialog для сбора ввода пользователя и отображения некоторых результатов, запуская одну программу в вашем скрипте.
Get new posts in your inbox
No spam. Unsubscribe anytime.







