- Bash-скрипты для графического интерфейса
- Программа 1: Команда notify-send
- Программа 2: команда tput
- Программа 3: Команда setleds
- Программа 4: Команда zenity
- Программа 5: Команда kdialog
- Программа 6: Dialog
- О других программах создания виджетов
- Программа 7: Команда logger
- Программа 8: Команда setterm
- Программа 9: smbclient: Отправка сообщений на рабочую станцию MS-Windows
- 10: создание сетевых сокетов Bash
- GUI скрипты и Cronjob
- Создание графических приложений
- Цилюрик О.И.
- Как запустить графическую оболочку Ubuntu
- Запуск графической оболочки Ubuntu
Bash-скрипты для графического интерфейса
Считается непреложным, что скрипты оболочки Bash предназначены для интерфейса командной строки. Но существует ряд программ, позволяющих создавать скрипты оболочки Bash, взаимодействующие с графическим интерфейсом пользователя (GUI). Такие скрипты можно использовать в самых различных виджетах, типа меню, всплывающих предупреждений, индикаторов и тому подобных. С их помощью можно контролировать вид и содержание, положение на экране, всевозможные эффекты и так далее.
Создавать графическое приложение долго и сложно. Другое дело программы для создания GUI скриптов. Предлагаемые 10 программ проверены на FreeBSD и на Linux и, несомненно, будут работать и на других Юниксовидных операционных системах.
Программа 1: Команда notify-send
Команда notify-send позволяет посылать на рабочий стол пользователя сообщения и предупреждения прямо из командной строки. Это позволяет информировать пользователя рабочей станции о каком-либо событии, либо выдавать на его рабочий стол любую информацию.
Для начала следует установить необходимый пакет:
Теперь, для примера, пошлем из командной строки простое предупреждение:
Вот что получится:
Вот пример другого кода с дополнительными опциями:
А вот что получится:
В приведенном примере кода:
- -t 5000: Указывает время в миллисекундах (5 000 миллисекунд = 5 секунд)
- -u low : Указывает уровень срочности (низкий=low, средний=normal, срочный=critical)
- -i gtk-dialog-info : Указывает имя файла картинки для вывода (можно указывать путь к готовой картинке как -i /path/to/your-icon.png)
Подробнее об использовании утилиты notify-send читайте в мане этой программы.
Программа 2: команда tput
При помощи команды tput можно контролировать свойства терминала:
- Передвигать курсор в любое место экрана
- Получать информацию о терминале
- Расцвечивать терминал (фон и передний план)
- Включать жирный текст
- Включать инверсию цвета (фон цвета текста, текст цветом фона)
- И многое другое
Вот пример кода скрипта:
Вот что получится:
Подробнее о команде tput расскажут маны:
Программа 3: Команда setleds
Команда setled позволяет регулировать включение светодиодов на клавиатуре, например:
включит огонек на клавише NumLock, а команда
Вот остальные опции:
- -caps : выключить CapsLock
- +caps : включить CapsLock
- -scroll : выключить ScrollLock
- +scroll : включить ScrollLock
В мане команды setleds имеются дополнительные подробности.
Программа 4: Команда zenity
Команда zenity выводит на рабочий стол интерактивные диалоговые окна, а также возвращает ввод пользователя. Это позволяет предоставлять пользователю информацию, запрашивать у него информацию при помощи любых скриптов Bash. Вот пример графического клиента для сервиса whois для определенного домена.
Вот как будет выглядеть получившийся клиент:
Дополнительная информация по команде zenity:
Программа 5: Команда kdialog
Команда kdialog напоминает предыдущую программу zenity, но для KDE и приложений qt. С ее помощью вы можете создавать диалоговые окна. Например, если ввести в командную строку:
То получите такое окно:
Для знакомства с командой kdialog читайте руководство «Shell Scripting with KDE Dialogs» .
Программа 6: Dialog
Dialog ≈ это приложение, которое включается в скрипты Bash и создает виджеты в текстовом интерфейсе. Использует библиотеки curses или ncurses. Вот пример кода:
Подробности в man dialog.
О других программах создания виджетов
- gmessage — GTK-клон программы xmessage;
- xmessage — выводит сообщение или запрос в окне (графический аналог команды /bin/echo);
- whiptail — создает диалоговые окна из скриптов;
- python-dialog — модуль на Python для создания несложных текстовых интерфейсов.
Программа 7: Команда logger
Команда logger записывает информацию в системные логи, такие как /var/log/messages. Это дает возможность видоизменять логи из командной строки, например:
Вот что получится:
Программа 8: Команда setterm
Команда setterm позволяет управлять окном терминала. Вот, например, как заставить терминал стать черным через 15 минут, а через 60 минут отключиться:
А в этом примере продемонстрирован подчеркнутый текст в окне терминала:
Есть возможность включать и отключать курсор:
Детали в мане setterm.
Программа 9: smbclient: Отправка сообщений на рабочую станцию MS-Windows
Команда smbclient умеет общаться с серверами SMB/CIFS. Она способна дать сообщение как отдельным, так и всем пользователям сразу:
10: создание сетевых сокетов Bash
В оболочке Bash предусмотрена возможность создания сокета для получения информации через него. Необязательно применять команды curl или lynx для получения данных с удаленного сервера. Есть два специальных файла устройств, которые можно использовать для создания сетевых сокетов. Выдержка из man bash:
- /dev/tcp/host/port — если host означает существующее имя хоста или адрес Интернет, а порт — целочисленный номер порта, или имя сервиса, то bash попытается установить связь по протоколу TCP с соответствующим сокетом.
Эту технологию можно использовать для определения, открыт ли нужный порт на локальном или удаленном сервере, не прибегая к nmap или другим сканерам портов.
Вы можете использовать скрипт:
Выводом будет что-то вроде:
Подробнее об этом здесь .
Также можно использовать скрипт как клиент HTTP:
Подробности в man bash.
GUI скрипты и Cronjob
Если для запуска скриптов вы используете cronjob , то должны согласовать локальный display/input сервис при помощи команды:
export DISPLAY=[user’s machine]:0
Например, для вызова каждый час скрипта /home/vivek/scripts/monitor.stock.sh, использующего команду zenity, введите:
@hourly DISPLAY=:0.0 /home/vivek/scripts/monitor.stock.sh
А у вас есть любимые GUI скрипты? Напишите нам в комментарии.
Источник
Создание графических приложений
Цилюрик О.И.
Настоящая статья является дополнением к книге «Инструменты Linux для Windows-программистов». Это не описание как делать GUI приложения в Linux, это описание того, как ПРИСТУПИТЬ к созданию графических приложений в Linux, и, хотелось бы надеяться что это прозвучит — чем принципиально программирование графики в Linux отличается от того же занятия в Windows. Главным требованием здесь была простота. Сделав простейший шаблон GUI прложения, дальше двигаться уже гораздо проще. Кроме того, все эти простейшие приёмы программирования показаны сравнительно: на основе основных графических технологий (библиотек), используемых в UNIX.
Все примеры к тексту вы можете скачать в виде общего архива.
Создание приложений, взаимодействующих с пользователем посредством графического интерфейса (GUI приложений), является частным классом задач, отдельной областью программирования. Из числа других подобных областей приложения можно было бы привести, как примеры:
- реализация алгоритмов цифровой обработки сигналов (DSP): быстрые спектральные преобразования (FFT и другие), вэйвлеты, авторегрессионные разложения. ;
- обработка аудио-потоков (пакеты: sox, ogg, speex и другие);
- задачи IP-телефонии, SIP протокола, реализация разнообразных программных SoftSwitch;
Это сравнительный ряд автономных областей развития приведен как пример таких частных классов, одним из которых является и разработка GUI приложений. И как частный класс, со своей спецификой инструментов и средств, он не заслуживал бы отдельного упоминания, если бы не одно обстоятельство — принципиально отличающееся, диаметрально противоположное отношение к GUI в операционных системах семейства Windows и в UNIX (и в Linux, как его частный вид):
- В Windows каждое приложение является принципиально GUI, неотъемлемым атрибутом любого приложения в Win32 API (низкого уровня) является главное окно приложения, уже само приложение «вяжется» вокруг его главного окна. Операционная система регистрирует классы окон и уже далее к ним соотносит конкретные приложения. Не может существовать приложения (взаимодействующего с пользователем, не системные службы) без окна, с этим были связаны и первоначальные сложности Windows в реализации консольных (терминальных) приложений.
- в UNIX картина принципиально обратная: первичным является приложение, которое, по умолчанию, является консольным, текстовым, вся графическая система не является составной частью операционной системы, а является надстройкой пользовательского уровня. Чаще всего такой графической надстройкой является X11 (в реализации Xorg или X11R5), но и это не обязательно: практиковались и другие графические системы, хороший пример тому графические системы Qwindow, а затем Photon в операционной системе QNX, сосуществующие там одновременно с X11.
- Показательно в этом смысле то, что вся оригинальная часть реализации X11 работает в пространстве пользователя, не в привилегированном режиме ядра (супервизора): работа с аппаратурой видеоадаптеров, устройствами ввода и другое. Отдельные реализации (видеосистемы NVIDIA или ATI Radeon) могут быть реализованы в режиме ядра (модули), но это а) сторонние относительно X11 разработки, и б) решение вопросов только производительности.
Из-за обозначенной специфики, разработка GUI приложений в UNIX (Linux) принципиально отличается:
- вся работа GUI приложений ведётся через промежуточные слои (библиотеки) пользовательского уровня;
- из-за того, что это ординарный пользовательский уровень, для разработчика предлагается широкий спектр альтернативных инструментов (библиотек), практически равнозначных, и конкурирующих друг с другом: Xlib, GTK+, Qt, wxWorks и многие другие.
- базовый API работы с X11 предоставляет Xlib, все другие используют уже её функционал, как это показано на рисунке.
- разработчик имеет возможность широкого выбора тех уровня и инструментов, которые он предполагает использовать, начиная от Xlib и выше (хотя уровень Xlib и слишком низок и работа с ним громоздкая).
Из-за названной специфики GUI приложений в Linux, все они, независимо от используемых средств создания, имеют абсолютно сходную структуру. Рассмотрим, для сравнения, код нескольких простейших GUI приложений, подготовленных с помощью различных инструментов. Важнейшей задачей такой экспозиции будут команды компиляции и сборки, чтобы, исходя из таких примеров, показать возможность начать создавать свои собственные GUI приложения.
Средства Xlib (архив Xlib.tgz ):
Средства GTK+ (архив GTK+.tgz ):
$ gcc gtk.c -o gtk `pkg-config —cflags —libs gtk+-2.0`
Средства Qt (архив Qt.tgz ):
Средства Qt предполагают написание приложений на языке С++, и имеют развитый инструментарий, в частности, построения сценария сборки приложения. Создадим в рабочем каталоге (изначально пустом) файл исходного кода приложения с произвольным именем:
Теперь проделываем последовательно:
Исходя из «подручных» файлов исходных кодов, у нас сгенерировался файл проекта и, далее, сценарий сборки ( Makefile ). Далее проделываем традиционную сборку, а заодно и посмотрим опции компиляции и сборки, которые нам сгенерировал проект:
g++ -c -pipe -Wall -W -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector —param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables
g++ -o Qt index.o -L/usr/lib/qt-3.3/lib -lqt-mt -lXext -lX11 -lm
index.cc index.o Makefile Qt Qt.pro
Средства wxWidgets (архив wxWidgets.tgz):
$ g++ simple.cc `wx-config —cxxflags` `wx-config —libs` -o simple
Средства GLUT (архив glut.tgz):
OpenGL Utility Toolkit, как и следует из названия, это средства использования технологии OpenGL в приложениях, которая требует определённой поддержки со стороны видео оборудования.
$ gcc glut.c -o glut -lX11 -lglut
То, что показано выше, это фактически не приложения, а скелеты приложений, но они позволяют: а) сравнить подобие всех GUI технологий в X11, и б) быть отправной точкой для сборки более содержательных GUI приложений. Показано только несколько GUI технологий, применяемых в X11 (большинство из них являются кросс-платформенными, и применимы в большинстве существующих операционных систем). Каждая из этих технологий, а названы только немногие из значительно большего числа, присутствующих в UNIX, могут быть полной альтернативой любой другой из этого же ряда, они взаимно заменимы, и даже взаимно дополняемые.
В данной статье были показаны образцы кода GUI приложений. Естественно, визуальные образы таких приложений строятся не путём непосредственного кодирования, а при использовании некоторых визуальных построителей, в составе тех или иных интегрированных средств разработки (IDE).
Источник
Как запустить графическую оболочку Ubuntu
Если вы запустили систему в текстовом режиме или вовсе это сервер и на нём надо работать только через терминал, но на нём уже есть установлено графическое окружение, есть несколько способов его запустить.
В этой статье мы постараемся разобраться как запустить графическую оболочку Ubuntu из терминала несколькими способами.
Запуск графической оболочки Ubuntu
Сначала можно посмотреть текущий уровень запуска в systemd. Для этого выполните:
systemctl list-units —type target | egrep «eme|res|gra|mul» | head -1
Если уровень запуска не graphical.target вы можете это исправить выполнив команду:
sudo systemd isolate graphical.target
После этого уровень запуска будет изменён на графический и графическая оболочка запуститься автоматически. Если вам нужно запустить менеджер входа вручную выполните такую команду:
sudo systemctl start display-manager
Эта команда запустит менеджер входа в систему, после этого вы сможете ввести логин и пароль, а затем запуститься графическая оболочка.
С более простыми графическими оболочками, вроде Openbox, Fluxbox, i3wm и даже XFCE может сработать ещё один метод, очень популярный ранее. Это команда startx. Однако чтобы она сработала в файле
/.xinitrc надо прописать оболочку, которую вы хотите запустить. Например:
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
[ -x «$f» ] && . «$f»
done
unset f
fi
feh —bg-fill
/Загрузки/52453-sklon_holm_cerkvushka_sneg.jpg &
lxpanel &
exec openbox-session
Блок if загружает все конфигурационные файлы из каталога /etc/X11/xinit*, сторчка, начинающаяся с feh добавляет фон рабочего стола, следующая — нижнюю панель, а последняя запускает сам openbox. Теперь запуск графической оболочки Ubuntu из консоли выполняется командой:
Или если, на первом экране уже что-то запущено, можно использовать любой другой доступный, например, второй:
Обратите внимание, что оболочку можно запустить только из консоли TTY, из терминала в графическом окружении это не сработает. Как видите, всё просто. Ваша оболочка запуститься в том же терминале, в котором вы выполнили startx.
Источник