Мир консоли. Linux. Часть I
[I]. Введение
Что же такое современная консоль для пользователя linux? Да, правильней было бы сказать GNU/linux, т.к. linux - ядро, но оставим эту тему холивара для кого-нибудь ещё. Для новичка, получившего, скажем ubuntu "прямо из коробки" как есть – ничего... ведь это одна из самых дружелюбных систем сегодня, которая весьма неплохо пытается всё перевести на GUI(не будем все заслуги приписывать разработчикам дистрибутива, в конце концов - это заслуга производителей самого ПО, которое собрано в гигантские репозитории, на которых оные дистры и держатся). Более того, такой тип систем совсем не располагает к какому-то изучению внутренней структуры ОС. В качестве быстро-настраиваемой рабочей “лошадки” может подойти, но что мы всё чаще наблюдаем – так это некую “попсовость” linux. Как правило такие юзеры просто подгоняют linux под винду, не меняют привычек и отношения, и в общем целом работают с линухом точно так же, как до знакомства с ним. Что весьма печально. Нельзя разумеется не заметить, чем больший % пересядет на *nix – тем лучше, плюсы очевидны – больший спрос на ПО, большая заинтересованность и развитие данной платформы. Минусы, а куда без них, в захламлённости форумов никсовой тематики вопросами, ответы на которые даны любом мане и переход на гуи всех дистрибутивов. Сегодня большое разнообразие в дистрах, ещё присутствуют “необлагороженные” aka gentoo, но будет ли так всегда?
Пользователь поопытней - уже не переставляет дистрибутив после краха Х-ов, прогресс на лицо -) Ну есть ещё доля т.н. "гуру" - действительно народ, обладающий познаниями в целой прорве инфы - до них многим, да и мне - пока далеко, их ничтожно мало - не надо путать авторитетов на форумах и м.б. приятных в общении людей с ними. Промежуточная часть между предпоследними категориями - и есть мы - т.е. обычные, начинающие пользователи linux. Так для чего же нам консоль? Ну, если стоит десктоп, то 1-2 окошка с терминалом всегда открыто потому что удобно - не так ли? - но не более. В один очередной раз подвисания гуи(ну как это обычно и бывает на 1-3с и более в зависимости от железа) мне это просто надоело. Не долго думая, я принялся искать альтернативу...
Всё заразительно. Консоль, как и десктоп - не исключение, но что у кого перевесит - решать придётся, как обычно, самому ;-) Замечу лишь, что на первый взгляд, казалось бы, ну что такого в этой самой консоли, ведь в десктопе - то и красивей и работать быстрей(быстрей ли? - возможно, но для всё того же искушённого), я скажу что: представьте свою работу без задержек на чтобы то ни было, кроме вашей мысли, которая посылается через пальцы рук на клавиатуру. В иксах тоже так – скажете вы, да нет – время отклика существенно разнятся. Нет, конечно в консоли тоже есть ожидания, программы "думают" - но человек тем и отличается от машины, что он "многогранен" в широком смысле этого слова, непредсказуем и ему в каждую секунду необходимо решение множества задач, и консоль получает эти задачи с минимальным запаздыванием, грань между реализацией задач и тем, что вы хотите – стирается. Возможно подобные высказывания - преувеличение не спорю, но для огромного ряда задач - это так. В конце концов никто не запрещает использовать всё и сразу)) - для каких-то задач десктоп, для каких-то - консоль. Не стоит также забывать о том, что работа в терминале - лучше сказывается на здоровье наших глаз и в ряде случаев менее утомляема, нежели нагромождённое графическое оформление.
[II]. Что же мы имеем? Или краткий обзор возможностей
Немало ПО уже было разработано и продолжает разрабатываться многими девелоперами для работы в терминале. Масса проигрывателей практически всех, существующих на сегодняшний день аудио/видео форматов, возьмите тот же mplayer - ага, вы аналог то сможете найти?) Средства мгновенного обмена сообщений по всевозможным протоколам, поддержка современных средств шифрования к примеру - gpg, инет-качалки, богатые средства разработки, браузеры, сильно-навороченные редакторы и по проще, почтовые клиенты - в общем всё то, чем каждодневно пользуются практически большинство из нас. Правда в слегка другом варианте ;-) Конечно, существуют вещи которые консоли пока не под силу - да в ней не поработаешь с чем-то подобным под "окошки" типа 3ds max, photoshop-а - ну вы понимаете меня, но к счастью большинству из нас этого не требуется и потом, кто не может обойтись без подобного и да, не забываем про игрушки, - обычно ставит детище MS(в GUI linux пока тоже не всё есть) на отдельную машину или как минимум раздел.
Благодаря таким вещам, как
framebuffer (далее
фб),
fbsplash(
фбсп) и
fbcondecor(
фбк) в консоли стали возможны буквально обои, как на десктопе(ну бывает хочется, чтоб было красиво), просмотр видео, обычных изображений и картинок, pdf - что не маловажно, правда хочу немного огорчить - с некоторыми ограничениями, и всё это в большом разрешении, как на десктопе, но обо всём по порядку. В итоге получается весьма неплохая "рабочая лошадка".
[III]. Сборка ядра
1. Фб, фбсп, фбк.
Сразу извиняюсь, что может быть непонятным - почему сразу установка и т.п., но в процессе я думаю вы всё поймёте, не забывайте проходить по ссылям и мельком прочитывать - знать о чём речь -) Если кому-то(совсем новичку) будет слишком мало инфы о простых вещах - не стесняйтесь гугла. Просто я решил не переносить сюда того, чего в инете полно. Неважно какой у вас дистр, неважно почему - ядро у всех одинаковое(если быть точным - конечно с некоторым различным набором патчей, но разве это проблема, они открыты и доступны, как и всё открытое ПО). Гг канешн - это лукавство, говоря что совсем неважно, на самом деле очень даже - в генте мной было замечено наименьшее кол-во граблей - поэтому ей пользуюсь, на ней и примеры, и её постоянно прокачивают в данном вопросе, если это так можно назвать - в отличии от остальных. Впрочем рекламировать ничего я не собираюсь, слака мне тож по душе, правда намудохался я там с фичами о которых расскажу будь здоров, а всё почему? - потому что эти вопросы там не раскачивают, неговоря об их поддержке в самом дистре ;-) Ну да ладно, не будем отвлекаться. В последних версиях ядер штатно имеется фб, фбк же, который для любителей обой на консольке ;-) обычно в ядрах нет, дефолтно им патчатся при сборке ядра генту, но ничего не мешает при отсутствии таковой поддержки в ядре - поставить патч отдельно. Для замута с бэкграундом на консольку, а также мб проигрыванием заставки при загрузке – ставим пакет
splashutils . Зачем этот пакет? – Всё просто, он содержит, как понятно из названия, набор утилит для управления изображениями на фб во время загрузки. Фбк от него нужна лишь тулза
fbcondecor_helper, ну и соответственно стартовые скрипты. Без этой тулзы фбк работать не будет, ставьте её сразу до установки вообще каких-либо патчей. Кстати проверить есть уже или нет фбк в ядре можно так - гляньте доки ядра, а конкретно в ../Documentation/fb - если найдёте fbcondecor.txt - значит всё ок, если нет - скачиваем
отсюда последнюю версию в директорию с ядром и патчим дефолтно командой
Код:
patch -p1 < имя_патча.patch
потом собираем конфиг. Итак важно разделить два понятия –
фбсп – заставка при загрузке не требует никакого патча для ядра, ничего – только пакет splashutils и соответствующая запись в загрузчике. А вот декорации – т.е. например обои во время работы на консольке – требуют уже
патча фбк. Надеюсь на вики вы поняли смысл фб... это некая абстракция нашей видеокарты, позволяющая получить к ней доступ нужному ПО. Это открывает гигантские возможности по управлению вывода чего-угодно на экран. В частности для нас, что важно, возможность высоких разрешений и прочих вкусностей.
Итак: включите в ядре необходимые вам опции касательно вашего железа, для включения же фб необходимы следующие(не модульно!):
Код:
1) Device Drivers -> Graphics support ->
<*>Support for frame buffer devices
Код:
2) Device Drivers -> Graphics support -> Console display driver support ->
<*>Framebuffer Console support
Для желающих включить возможность обоев в терминале(фбк):
Код:
Device Drivers -> Graphics support -> Console display driver support ->
<*>Support for the Framebuffer Console Decorations
Внимание: этой опции вообще не будет даже на выбор в конфиге, если включена будет эта:
Код:
Device Drivers -> Graphics support -> support for frame buffer devices ->
<*>Enable Tile Blitting Support
Ну есть ещё опция, которая обязательно должна быть задействована -
CONFIG_HAS_IOMEM, можете её глянуть в файле конфига, но сейчас она дефолтно везде и всегда включена.
2. Реализация фб
С этим разобрались, а как же всё это общается с видюхой - ну как всегда с помощью дров. Кому не нужна улучшенная поддержка nvidia или radeon или у кого будет ещё десктоп nvidia или radeon(а их драйверы не совместимы с их же консольными - ну от так от) – выбирают штатный драйвер
vesa . ИМХО – практический универсальный и самый простой в настройке вариант, даже при наличии карточек указанных выше производителей – можно смело врубать и каких либо тормозов вы не заметите. НО... в чём подвох? Он в том, что веса не поддерживает частоту моника выше 60 Гц, т.е. норм вариант для ноутов LCD – там часто 60 и конечно для целой прорвы старья)) - т.к. драйвер очень старый - работает на чём хош. Для остальных же этот вариант естественно не катит. Для устранения этого недостатка был разработан
vesa-tng, но и у него не всё гладко – он поддерживает лишь 32-битные системы. Из плюсов vesa-tng можно выделить - поддержку частот выше 60 Гц, смену разрешений во время работы, а не только при начальной загрузке, более интуитивно понятную настройку в загрузчике разрешения и обновления. Затем vesa-tng эволюционировал в
uvesafb. Этот драйвер фб - наиболее удачный, он содержит все плюсы vesa-tng-шного и самое главное поддержка не только 32-х битных систем. В принципе uvesafb - лучший выбор независимо от карточки, но решать это только вам, минус один - грабли в самой установке, но всё решаемо с ним -) Не собирайте дрова в виде модулей - это медленней и может привести к неработоспособности(впроч м есть исключения – о них позже в пункте загрузчика). Итак я думаю вы решили с которого начать ;-)
1) Выбор обычного vesa
Тут всё просто:
Код:
Device Drivers -> Graphics support -> Support for frame buffer devices ->
<*>VESA VGA Graphics Support
2) Выбор uvesafb
Теперь уже во всех новых ядрах драйвер штатно присутствует, если у вас по каким-то его нет - качаем патч
uvesafb и собственно патчим)
Для функционирования uvesafb нужно включить дополнительную фичу:
Код:
Device Drivers ->
<*>Connector - unified userspace kernelspace linker
И сам драйвер:
Код:
Device Drivers -> Graphics support -> Support for frame buffer devices ->
<*>Userspace VESA VGA Graphics Support
3) Выбор nvidia или radeon
Интуитивно понятно, что включаются опции
Nvidia framebuffer или
ATI radeon в разделе поддержки фб дров ядра - соответственно. Что хотелось бы заметить - советую вообще отключить любую весу, иногда из-за этого эти дрова работают криво или вовсе не пускаются. Nvidia крайне капризная - для неё было разработано оба драйвера фб - rivafb и nvidiafb. rivafb - для старых видюх, nvidiafb - для новых, улучшенная версия rivafb. Однако, к примеру, когда я ставил на ноут nvidiafb - тот при загрузке мне сообщил благоприятнейшее известие: "Unknown NV_ARCH", причём тихо так - как всегда в dmesg-е. Мол карточку мою он понять то не может, хоть и нвидиа - вот такая поддержка родных дров фб этого производителя. Впрочем сгладим этот минус тем, что карточка GeForce-M, так что мобильные пропустили - с настольниками дела получше надеюсь). fb от radeon ставил давно - на старой видюхе заводился, на новой - нет, даже не сообщал ничего, вообще ничего aka меня тут нет.
Собираем и ставим ядро.