Gui для консоли linux

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. Вот пример кода:

Читайте также:  Linux directory and file permissions

Подробности в 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 с соответствующим сокетом.

  • /dev/udp/host/port — если host означает существующее имя хоста или адрес Интернет, а порт — целочисленный номер порта, или имя сервиса, то bash попытается установить связь по протоколу UDP с соответствующим сокетом.
  • Эту технологию можно использовать для определения, открыт ли нужный порт на локальном или удаленном сервере, не прибегая к 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;
    Читайте также:  Гугл аутентификатор для windows

    Это сравнительный ряд автономных областей развития приведен как пример таких частных классов, одним из которых является и разработка 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 ). Далее проделываем традиционную сборку, а заодно и посмотрим опции компиляции и сборки, которые нам сгенерировал проект:

    Читайте также:  Windows system configuration startup

    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.

    Источник

    Оцените статью