Библиотека сайта rus-linux.net
Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
Исследуем ncurses - графический интерфейс для консоли Linux
Оригинал: Discovering ncurses, the GUI for the Linux ConsoleАвтор: Juliet Kemp
Дата публикации: 25 января 2010 года
Перевод: А. Кривошей
Дата перевода: сентябрь 2011 г.
Дискуссии о том, что лучше - командная строка или графический интерфейс, происходят постоянно, но правильным ответом на этот вопрос будет, вероятно, что преимущество одного из интерфейсов определяется задачей, которую необходимо выполнить. Вы можете большую часть своего времени работать в командной строке (будь то SSH или консоль) и решать все поставленные задачи, однако иногда бывает необходимо задействовать возможности графического режима, не запуская X-сервер. К примеру, не все серверы имеют установленный X-сервер, или вы не хотите пробрасывать X к удаленному терминалу, или ваше оборудование не позволяет работать с обычным графическим интерфейсом.
И здесь нам поможет ncurses. Это библиотека, позволяющая писать программы, обладающие функциональностью графических приложений, но при этом работающие в терминале. Вы почти наверняка уже сталкивались с приложениями, написанными с использованием ncurses, в число которых входят:
- screen, позволяющая разбивать окно терминала на несколько отдельных экранов.
- make menuconfig, утилита с интерфейсом в виде меню, предназначенная для конфигурирования ядра Linux перед его сборкой. Она значительно проще в использовании, чем более старая утилита, имевшая диалоговый интерфейс.
- почтовый клиент mutt;
- консольные веб-браузеры lynx и w3m;
- aptitude, представляющая собой интерфейс на базе меню для apt-get в системах Debian и Ubuntu;
- файловый менеджер GNU Midnight Commander;
- утилита системного администрирования yast в SuSe имеет консольный режим с интерфейсом на базе ncurses;
- различные консольные mp3-плейеры и IRC-клиенты, доступные на Sourceforge и других сайтах.
ncurses написана на C и предоставляет большой набор функций для отрисовки экрана, управления курсосром, мышью и т.д. Она распространяется не под GPL, а под собственной специфичной свободной лицензией, о которой более подробно можно прочитать в
FAQ.
Программист, использующий ncurses, может забыть о возне с огромным количеством кодов для множества существущих эмуляторов терминала, мало отличающихся друг от друга. Вместо этого он имеет дело с более абстрактной концепцией дисплея с несколькими окнами и ncurses будет обеспечивать трансляцию команд в управляющие коды того эмулятора терминала, под которым запущена программа. Она также позволяет обрабатывать события мыши, поэтому, если в вашей программе используется мышь (как в консоли, так и в X), вы можете использовать ссылки и кликабельные меню в консольном приложении.
Взаимодействие с ncurses можно организовать не только в C, но и во многих других языках (включая Python, Perl и C++), поэтому переход с одного языка на другой не вызывает особых проблем. Если вас заинтересовало программирование с использованием ncurses, прежде всего можно порекомендовать имеющееся в сети введение (технически устаревшее, но все еще представляющее интерес как отправная точка) и HOWTO.
Вполне возможно запускать программы на базе ncurses в терминале, работающем в X-окружении. Главное помнить при этом, что обработчик событий мыши ncurses переопределяет обработку мыши средствами X, если курсор находится в пределах окна, в котором запущено приложение на базе ncurses. Поэтому вы можете кликать по ссылкам и меню, но не сможете использовать обычные методы копирования/вставки, использующиеся в X (если только сама программа не поддерживает такой функциональности).
Если говорить о сравнении ncurses и X - как базы для создания графического интерфейса, естественно, что X обеспечивает больше возможностей для таких операций, как перемещение между терминалами и копирование/вставка текста из одного терминала в другой. В целом, X обеспечивает управление многочисленными окнами в графическом окружении, а ncurses нет. Например, screen, которая использует часть кода ncurses, может управлять несколькими терминалами в пределах одной сессии, поэтому вы можете копировать и вставлять текст из одного тераминала в другой. Но в ncurses не существует встроенного механизма, позволяющего копировать и вставлять текст между двумя отдельными экземплярами screen, или даже использовать X для копирования/вставки между двумя программами ncurses, запущенными в различных терминалах.
Кроме того, с точки зрения эстетичности, программы на базе ncurses выглядят менее привлекательно, чем X-приложения. Это связано с ограничениями на графические излишества, накладываемые консолью. Они выглядят более угловатыми и больше похожи на текстовые. Такие программы больше похожи на графические логикой работы, а не внешним видом, что не мешает им облегчать выполнение многих задач при работе в консоли. Возможность использовать мышь при веб-серфинге с w3m, или систему конфигурирования ядра на базе меню (с make menuconfig) значительно ускоряют работу (есть и графическая утилита конфигурирования ядра на базе X, но не всегда имеется возможность запустить его при пересборке ядра системы).
Даже в современных дистрибутивах далеко не все задачи требуют постоянно работающего графического окружения. В этом случае использование программ на базе ncurses во многих случаях позволит ускорить работу по сравнению с "голым" интерфейсом командной строки. Кроме того, приложения на базе ncurses намного менее требовательны к системным ресурсам и не требуют для своей работы постоянно запущенного X-сервера.
Если для вас важна красота рабочего стола, или необходима графическая среда для работы, то ваш выбор - X-сервер и графический интерфейс. Если же требуются простые в использовании и нетребовательные к ресурсам приложения без графических излишеств, или вы постоянно работаете в консоли, то программы на базе ncurses могут здорово облегчить вам жизнь.