Создание графических приложений
Цилюрик О.И.
Настоящая статья является дополнением к книге «Инструменты 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).
Источник
12 лучших мозаичных оконных менеджеров для Linux
Как следует из названия «оконный менеджер», работа таких программ заключается в координации работы окон приложений, и они автоматически запускаются в фоновом режиме вашей ОС для управления внешним видом и размещением запущенных приложений.
Существует несколько оконных менеджеров, которые вы можете использовать в Linux, но, как и следовало ожидать, в этой статье перечислены 12 лучших на наш субъективный взгляд.
i3 — это бесплатный и полностью настраиваемый оконный менеджер с открытым исходным кодом, предназначенный для опытных пользователей Linux и BSD, а также разработчиков. Он имеет древовидную структуру данных, которая обеспечивает более гибкую компоновку, чем его альтернативы, и не требует использования Haskell или LUA.
i3 является одним из самых популярных приложений для управления окнами, благодаря своим обширным функциям, таким как настройки в виде простого текста, настраиваемые сочетания клавиш и изменения конфигурации на лету, без необходимости перезагружать базовую систему.
Пакет i3 предоставляется вашим дистрибутивом, просто воспользуйтесь менеджером пакетов как показано ниже.
2. bspwm
bspwm — это бесплатный и легкий фреймовый оконный менеджер Linux с открытым исходным кодом, известный тем, что он придерживается философии Linux, концентрируясь на выполнении одной вещи, но выполнении ее максимально качественно.
Он основан на разделении бинарного пространства, которое представляет окна как листья полного двоичного дерева, и обрабатывает привязку клавиш с помощью отдельной утилиты sxhkd, которая обеспечивает более плавную работу и поддержку других устройств ввода.
Возможности bspwm включают в себя поддержку нескольких окон, частичную поддержку EWMH, автоматический режим для установки положения плиток приложений, а также настройку и управление через сообщения, среди прочего.
Пакет bspwm предоставляется вашей операционной системой — используйте менеджер пакетов, чтобы установить его.
3. herbstluftwm
herbstluftwm — это бесплатный настраиваемый менеджер окон с открытыми исходными кодами для X11, использующий Glib и Xlib. По сути, он работает с использованием макета, основанного на разбиении кадров на подкадры, которые могут быть дополнительно разделены и заполнены окнами.
Основные функции herbstluftwm – это теги (т. е. рабочие пространства или виртуальные рабочие столы), сценария конфигурации, который запускается при запуске, ровно один тег на монитор и т. д. Вы можете узнать больше из нашей статьи о herbstluftwm здесь.
Пакет herbstluftwm легко установить, воспользовавшись менеджером пакетов, как показано ниже.
4. awesome
awesome — бесплатный менеджер нового поколения с открытым исходным кодом для X, созданный, чтобы быть быстрым и расширяемым, и предназначен для разработчиков, опытных пользователей, да и просто всех тех, кто хотел бы управлять своей графической средой.
Его функции включают в себя хорошо документированный исходный код и API, возможность работать на двух или более физических дисплеях как на одном «виртуальном» дисплее, поддержку D-Bus, поддержку расширений Lua, отсутствие плавающих или плиточных слоев и т. д.
Пакет awesome предоставляется вашим дистрибутивом. Инструкция по установке проста. Терминал, пакетный менеджер и соответствующая команда, смотри ниже.
5. Tilix
Tilix — это плиточный эмулятор и менеджер терминалов GTK3, использующий Gnome Human Interface Guidelines. (документ, содержащий рекомендации пользователей для разработчиков пользовательского интерфейса) Он настолько продвинутый, что позволяет организовывать окна приложений по горизонтали и вертикали с помощью перетаскивания.
Tilix предлагает множество функций, включая работу с пользовательскими заголовками и пользовательскими гиперссылками, поддержку прозрачных фоновых изображений, уведомлений в фоновом режиме, нескольких панелей и постоянных макетов.
Что бы установить Tilix, используйте пакетный менеджер вашего дистрибутива, как показано ниже.
6. XMonad
XMonad — это бесплатный оконный менеджер X11 с открытым исходным кодом, который существует для автоматизации поиска и выравнивания окон. И его можно прокачать с помощью собственной библиотеки расширений, которая предоставляет опции для строк состояния и оформления окон. Он также минимален, стабилен и прост в настройке.
Xmonad, как и предыдущие, предоставляется дистрибутивом, для установки используйте менеджер пакетов как в демонстрации ниже.
7. Sway
Sway — это бесплатный, легкий и удобный со всех сторон менеджер окон, совместимый с Wayland i3, который автоматически распределяет окна приложений так, чтобы логически использовать по максимуму пространство рабочего стола. По умолчанию он объединяет окна в сетку и поддерживает практически все команды, включенные в i3.
Его функции включают в себя поддержку сочетаний клавиш, использование Wayland вместо Xorg и пробелы. Узнайте больше о Sway в нашей статье здесь.
Sway доступен для установки из дефолтного репозитория многих дистрибутивов, но, если так вышло, что у вас не получается установить его с помощью пакетного менеджера, ознакомьтесь с этой вики-страницей, там вы найдете все необходимые инструкции.
8. tmux
tmux — это терминальный мультиплексор с открытым исходным кодом, который позволяет пользователям создавать несколько сеансов терминала, к которым они могут обращаться и управлять ими с одного экрана, что делает его идеальным для одновременного запуска нескольких программ командной строки.
tmux пускает в дело все доступное пространство, и его легко использовать благодаря поддержке комбинаций клавиш, с помощью которых можно разделять окна или создавать большее количество панелей. Также вы можете сохранить экземпляр оболочки для использования в других сессиях и расшарить его для разных пользователей.
Установка tmux задача не из сложных. Достаточно использовать пакетный менеджер вашего дистрибутива и подходящую команду из приведенных ниже.
9. spectrwm
spectrwm — это небольшой и динамичный мозаичный оконный менеджер, созданный на основе и в духе xmonad и dwm, разработанный для X11, она же X Window System, чтобы быть быстрым, компактным и лаконичным. Он был создан с целью решения некоторых внешних проблем xmonad и dwm.
Spectrwm использует файл конфигурации в виде простого текста, имеет значения по умолчанию, аналогичные тем, что указаны в xmonad и dwm, и имеет встроенные шорткаты. Другие его функции включают настраиваемые цвета и ширину границы, перетаскивание, меню быстрого запуска, настраиваемую строку состояния, динамическую поддержку RandR и так далее.
Spectrwm можно установить, воспользовавшись пакетным менеджером вашего дистрибутива. Вся необходимая информация под текстом.
10. JWM
JWM (Joe’s Window Manager, что по-нашему будет как «Окнный менеджер Джо») — это облегченный оконный менеджер с открытым исходным кодом на основе языка программирования C, предназначенный для оконной системы X11, оптимизированный для бесперебойной работы на старых, менее мощных компьютерных системах. Для работы требуется только библиотека Xlib, но она способна работать с множеством других библиотек, включая libXext для расширения формы, Cairo и libRSVG для значков и фонов, libjpeg и libpng для фонов и значков JPEG и PNG соответственно и т.д.
JWM входит в состав нескольких дистрибутивов Linux, таких как Damn Linux и Puppy Linux, большинство из них нашли применение на портативных ПК, таких как Raspberry Pi.
11. Qtile
Qtile — это небольшой, но полнофункциональный и полностью настраиваемый менеджер окон с открытым исходным кодом, разработанный на Python. Он разработан с упором на простоту, расширяемость и кастомность. (возможность настроить вообще ВСЁ!)
Qtile позволяет легко создавать собственные макеты, команды и виджеты. Он также может быть использован для удаленной настройки рабочих пространств, обновления виджетов строки состояния, управления окнами и тому подобного. Он содержит исчерпывающую документацию на случай, если вам понадобятся разъяснения по ходу пьесы.
В версиях Ubuntu от 17.04 и в гору, Debian от 10, и Fedora существуют пакеты Qtile, доступные для установки, демонстрация ниже вам в помощь.
12. Ratpoison
Ratpoison — это легкий оконный менеджер, разработанный для простого и не требующего красивой графики, оформления окон. Он создан по образцу экрана GNU, который очень популярен в сообществе виртуальных терминалов.
Основные функции Ratpoison включают возможность разбивать окна на неперекрывающиеся фреймы со всеми окнами, развернутыми в пределах этих фреймов. Правда, работает исключительно с помощью клавиатурных команд.
В сообществе существует гораздо больше оконных менеджеров, из которых вы можете выбирать, но не многие из них могут похвастаться таким полным набором функций, в отличии от вышеперечисленных.
Знаете ли вы какие-нибудь похвальные приложения, достойные упоминания? Или может быть у вас был опыт, который помог вам выбрать раз и на всегда? Не стесняйтесь поделиться своими мыслями с нами в разделе комментариев ниже.
Источник