Итак, в один прекрасный момент ты понял, что окружающий мир угнетает тебя обилием ярких красок и дружественностью предоставляемых интерфейсов. Тебе захотелось чего-то брутального, монохромного и нетривиального. Поздравляем — ты вступил на путь воена красноглазия!

На следующее после прозрения утро ты проснулся среди разбросанного по квартире хлама и пустых бутылок из-под «Буратино». Еще не совсем разлепив веки, пошел на кухню готовить традиционную яичницу, и тут тебя атаковал голос из головы: «Откажись от иксов». «Что за?..» — хотел было ты возразить, но дверной косяк сурово прервал ваш диалог. Голос подытожил: «Только консоль, только хардкор!»

Ну что ж, коли дело приняло столь серьезный оборот, ты решил действовать. Но с чего же начать? Спокойствие! Мы дадим тебе несколько советов.

Введение

Дабы сохранить на первых порах хоть какую-то связь с внешним миром, в консоли тебе понадобятся аналоги тех программ, к которым ты привык во времена своей беззаботной GUI-шной молодости.

Будем отталкиваться от следующего типичного для большинства людей списка действий:

  • серфинг в браузере;
  • взаимодействие с почтой;
  • общение по джабберу/аське;
  • прослушивание аутентичных аудиокомпозиций с бокалом «Шато Берно» 1789 года;
  • просмотр классики кинематографа;
  • просмотр картинок/PDF/DJVU.

Перед тем как перейти к описанию нужного для выполнения всех этих действий ПО, заострим свое внимание на подготовке видеоплацдарма. Другими словами, добавим в нашу систему поддержку фреймбуфера. Для осуществления задуманного нам необходимо будет установить и настроить uvesafb.

Uvesafb представляет собой framebuffer-драйвер для консоли, привнесенный в ядро начиная с версии 2.6.24. От стандартного vesafb его отличает поддержка большего количества функций и более высокая карма, чем в системах на базе видеокарт NVIDIA с установленным проприетарным видеодрайвером. При этом требования к поддержке оборудования остались такими же, как и для vesafb.

Особенность драйвера, о котором идет речь, в том, что для своей пристойной работы он требует демон виртуализации v86d, работающий в третьем кольце. Предназначение такого костыля — обеспечить совместимость с архитектурами, отличными от архитектуры x86. Понеслись!

Устанавливаем v86d (здесь и далее я буду действовать на примере Arch Linux):

# pacman -S v86d

WARNING

В процессе тестирования на подпольных машинах у нас вылезла ошибочка при загрузке uvesafb:

[15.063336] uvesafb: NVIDIA Corporation, G96 Board * 07880500, Chip Rev   , OEM: NVIDIA, VBE v3.0
[15.198285] uvesafb: VBIOS/hardware doesn't support DDC transfers
[15.198288] uvesafb: no monitor limits have been set, default refresh rate will be used
[15.198770] uvesafb: scrolling: redraw
[15.198775] uvesafb: request region 0x3c0-0x3e0 failed
[15.199764] uvesafb: probe of uvesafb.0 failed with error -5

Исправили ее путем модификации /etc/default/grub строчки

GRUB_CMDLINE_LINUX="video=vesa:off vga=normal"

Не забываем после этого пересобирать конфиг командой

# grub-mkconfig -o /boot/grub/grub.cfg

Стремительно переходим к настройке uvesafb… Для начала удаляем любые параметры ядра, относящиеся к работе фреймбуфера:

  • vga=xxx принудительно загружает старый vesafb;
  • video=xxx не использует uvesafb, если последний скомпилирован в качестве модуля (как в стандартном ядре Arch Linux).

Затем отключаем KMS, дабы во время загрузки не пытаться постигнуть Дао Красноглазия, которое явится в виде абсолютно черного экрана (помни: твоя психика еще не настолько окрепла, чтобы выдержать подобные испытания). Если мы счастливые обладатели видеокарточек от Intel — добавляем в конфиг GRUB’а строчки i915.modeset=0.

Комментируем строку GRUBGFXPAYLOADLINUX=keep в конфиге /etc/default/grub. Пересобираем grub.cfg:

# grub-mkconfig -o /boot/grub/grub.cfg

Добавляем v86d в секцию HOOKS конфига /etc/mkinitcpio.conf:

HOOKS="base udev v86d ..."

Все параметры для драйвера uvesafb задаются в его конфигурационном файле /usr/lib/modprobe.d/uvesafb.conf:

# This file sets the parameters for uvesafb module.
# The following format should be used:
# options uvesafb mode_option=<xres>x<yres>[-<bpp>][@<refresh>] scroll=<ywrap|ypan|redraw> ...
#
# For more details see:
# http://www.kernel.org/doc/Documentation/fb/uvesafb.txt
#
options uvesafb mode_option=1280x800-32 scroll=ywrap

Документация по установке режимов при помощи опции mode_option может быть найдена в Git-репозиториях твоего ядра по пути tree/Documentation/fb/modedb.txt. Чтобы обезопасить настройки от перезаписи в процессе обновления пакета v86d, скопируй эти самые настройки от греха подальше в /etc/modprobe.d/uvesafb.conf и затем добавь запись, указывающую на твои настройки, в секцию FILES конфига /etc/mkinitcpio.conf:

FILES="/etc/modprobe.d/uvesafb.conf"

Теперь нам необходимо пересобрать образ initramfs для ядра:

# mkinitcpio -p linux

Перегружаем систему и наблюдаем за изменениями…

Список возможных разрешений может быть получен командой

$ cat /sys/bus/platform/drivers/uvesafb/uvesafb.0/vbe_modes

Собственно, потом эти разрешения можно попробовать подставить в конфиг /etc/modprobe.d/uvesafb.conf. После того как ядрышко загрузилось, при помощи следующей команды (или использовать fbset -i) можно проверить, не обманули ли нас с разрешением:

$ cat /sys/class/graphics/fb0/virtual_size

Теперь можно и заняться непосредственно улучшением своих аскетичных условий существования в консоли. Начнем с выбора браузера…

Браузер

Выбор наш пал на links, да только не простой, а с поддержкой вывода через фреймбуфер. Чтобы заполучить это чудо природы, необходимо сначала скачать его с AUR-репозитория.

# wget -c https://aur.archlinux.org/packages/li/links-g-directfb/links-g-directfb.tar.gz

Разархивируем:

# tar xzvf links-g-directfb.tar.gz
# cd links-g-directfb
# makepkg
# pacman -U links-g-directfb-2.8-1-x86_64.pkg.tar.xz

Пользуемся на здоровье:

$ links -g google.ru
Просматриваем сайт при помощи links
Просматриваем сайт при помощи links

Почта

В роли почтового клиента будем использовать mutt, для получения почты воспользуемся getmail, для отправки — msmtp. Начнем с получения почты. Устанавливаем getmail:

# pacman -S getmail
$ mkdir ~/.getmail
$ chmod 700 ~/.getmail

Создаем файл настроек ~/.getmail/getmailrc и пихаем туда следующий текст:

[retriever]
type = SimpleIMAPRetriever
server = imap.server.ru
port = 143
username = user@server.ru
password = password
[destination]
type = Maildir
path = ~/.mail/
[options]
delete = true
message_log = ~/.getmail/getmail-log

В зависимости от настроек сервера в качестве type для секции retriever можно использовать следующие фразы:

  • SimplePOP3Retriever;
  • BrokenUIDLPOP3Retriever;
  • SimpleIMAPRetriever;
  • SimplePOP3SSLRetriever;
  • BrokenUIDLPOP3SSLRetriever;
  • SimpleIMAPSSLRetriever;
  • MultidropPOP3Retriever;
  • MultidropPOP3SSLRetriever;
  • MultidropSDPSRetriever;
  • MultidropIMAPRetriever;
  • MultidropIMAPSSLRetriever.

Например, если ты задался целью настроить доступ к почте на Gmail, то секция retriever будет выглядеть примерно следующим образом:

[retriever]
type = SimpleIMAPSSLRetriever
server = imap.gmail.com
mailboxes = ("[Gmail]/All Mail",)
username = USER
password = PASS

Проверить настройки можно при помощи команды getmail без указания параметров. Плавно переходим к процессу отправки почты… Устанавливаем msmtp:

# pacman -S msmtp

Создаем конфигурационный файл ~/.msmtprc (в качестве примера идет конфиг на несколько аккаунтов) и пишем туда следующее:

# Accounts will inherit settings from this section
defaults
auth             on
tls              on
tls_trust_file   /usr/share/ca-certificates/mozilla/Thawte_Premium_Server_CA.crt

# A first gmail address
account        gmail
host           smtp.gmail.com
port           587
from           username@gmail.com
user           username@gmail.com
password       password
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# A second gmail address
account    gmail2 : gmail
from       username2@gmail.com
user       username2@gmail.com
password   password2

# A freemail service
account    freemail
host       smtp.freemail.example
from       joe_smith@freemail.example
user       joe.smith
password   secret

# A provider’s service
account   provider
host      smtp.provider.example

# Set a default account
account default : gmail

Устанавливаем права на вновь созданный конфиг, в противном случае msmtp откажется работать:

$ chmod 600 ~/.msmtprc

Переходим к заключительной стадии настройки почты. Устанавливаем клиент mutt:

# pacman -S mutt
$ vim ./.muttrc

Создаем конфигурационный файл ~/.muttrc и пишем туда следующее:

set mbox_type=maildir
set folder=$HOME/.mail
set spoolfile=+/
set header_cache=~/.hcache
set sendmail="/usr/bin/msmtp"
set from="user@server.ru"

В конфиге указываем, что почта будет отправляться при помощи msmtp, папкой для почты будет ~/.mail/, а адрес отправителя будет иметь вид user@server.ru. Далее нам необходимо создать несколько папок, в которых эта самая почта будет храниться:

$ mkdir -p ~/mail/{cur,new,tmp}

Пришло время потестить полученную систему. Качаем почту и открываем mutt:

$ getmail
$ mutt
Получаем электрическую почту через mutt
Получаем электрическую почту через mutt

Пред нашими очами предстанут все полученные письма. Для создания и отправки письма жмем m, после чего следуем инструкциям. Для автоматического получения писем добавим соответствующую запись в crontab:

$ crontab -e

В возникшем редакторе вставляем следующую строку:

*/10 * * * * /usr/bin/getmail

С этого момента getmail будет запускаться каждые десять минут, конечно же, если crond включен. Для включения crond:

# systemctl enable cronie.service

Джаббер

В этом вопросе нам поможет mcabber — текстовый Jabber-клиент, включающий в себя такие функции, как поддержка SSL, поддержка UTF8, история переписки (конференции), автодополнение команд и возможность создания собственных команд (триггеров). Недолго думая вбиваем в консоли:

# pacman -S mcabber

После установки cоздаем папку ~/.mcabber и копируем в нее файл /usr/share/mcabber/example/mcabberrc:

$ mkdir ~/.mcabber
$ cp /usr/share/mcabber/example/mcabberrc ~/.mcabber/mcabberrc

Устанавливаем права доступа на вновь созданную папку:

$ chmod 0700 ~/.mcabber

Затем переходим к редактированию конфига (он хорошо документирован, поэтому проблем в настройке возникнуть не должно). Необходимый минимум, который нужно изменить в конфигурационном файле mcabberrc:

set username = твой JID
set password = твой пароль (если не указать, будет запрошен при соединении)
set server = твой сервер

Если сервер поддерживает SSL, то мы можем воспользоваться этой прекрасной особенностью, прописав в конфиг следующие строчки:

set ssl = 1
set ssl_verify = 0

При этом сертификаты с сервера будут подгружены автоматически. Вкратце опишем интерфейс. Слева — ростер (он же список контактов). Правее — окно чата. Прямо под ним — окно системных сообщений. И в самом низу — строка ввода, в которую мы будем вводить команды и сообщения. Перемещение по ростеру происходит при помощи кнопок Page up / Page down. Enter — переход в состояние чата для текущего JID или конференции. Чтобы увидеть команды, поддерживаемые mcabber’ом, вбиваем в строку ввода команду /help и медитируем…

Налаживаем межличностные связи при помощи mcabber
Налаживаем межличностные связи при помощи mcabber

Аудио

В качестве аудиоплеера поставим moc — отличный вариант для тех, кто хочет наслаждаться музыкой из консоли, но при этом не желает заморачиваться с настройкой MPD.

# pacman -S moc

Запускаем:

$ mocp

В левой части данного плеера располагается панель для навигации по файловой системе, в правой — плей-лист, в который можно перекидывать файлы. Основные хоткеи (описание всех хоткеев можно увидеть, нажав «?»):

  • a — добавить файл в плей-лист;
  • A — рекурсивно добавить директорию в плей-лист;
  • enter — начать воспроизведение музыкальной композиции;
  • s — остановить воспроизведение;
  • n — перейти к следующей музыкальной композиции;
  • b — перейти к предыдущей музыкальной композиции;
  • u — передвинуть композицию в плей-листе на строчку вверх;
  • j — передвинуть композицию в плей-листе на строчку вниз;
  • p — пауза;
  • > — увеличить громкость воспроизведения;
  • < — уменьшить громкость воспроизведения;
  • m — перейти в каталог музыки;
  • g — поиск композиции в текущей папке или плей-листе;
  • C — очистить плей-лист;
  • V — сохранить плей-лист;
  • q — перевести программу в фоновый режим (исполнение музыкальных композиций при этом не прекращается);
  • Q — выйти из программы.

Для конфигурирования плеера перекидываем дефолтный конфиг /usr/share/doc/moc/config.example в папку ~/.moc. Обзываем его просто config. Конфигурационный файл хорошо прокомментирован, поэтому при желании не составит никакого труда разобраться, что к чему. Тем не менее пройдемся по основным пунктам настроек:

# Путь к папке, в которой хранится твоя музыкальная коллекция. Если в плеере нажать m, то попадешь именно сюда
MusicDir        = "/path/to/your/music/dir"
# Включение автоповтора при запуске плеера
Repeat          = yes
# Включение shuffle-режима
Shuffle         = yes
# Включение автопереключения треков
AutoNext        = yes
# Не показывать скрытые файлы в панели навигации по файловой системе
ShowHiddenFiles = no 
# Плеер запускается из твоей папки с музыкальной коллекцией
StartInMusicDir = yes
# Сохранение плей-листа после выхода из плеера
SavePlaylist    = yes
Прослушиваем классические аудио композиции
Прослушиваем классические аудио композиции

Видео

Для просмотра произведений кинематографа мы будем использовать всем известный MPlayer. Установка не отличается оригинальностью:

# pacman -S mplayer

MPlayer поддерживает различные модули вывода. Посмотреть их список можно при помощи следующей команды:

# mpl -vo help
MPlayer SVN-r36498-snapshot-4.8.2 (C) 2000-2013 MPlayer Team
206 audio & 433 video codecs
<...>

Поскольку в данный момент мы находимся в голой консоли, то нас могут заинтересовать, к примеру, fbdev/fbdev2 или же aa/caca, если мы являемся настоящими ценителями прекрасного. В простейшем случае запуск будет выглядеть следующим образом:

$ mplayer -vo fbdev2 video.avi

Или так:

$ mplayer -vo caca video.avi

Теперь можно вальяжно развалиться на диване/стуле и наслаждаться кинокартиной.

Тешимся просмотром фильма в ASCII
Тешимся просмотром фильма в ASCII

Просмотрщики

Оторвемся на минутку от выбранного на предыдущем шаге фильма и сосредоточим все свое внимание на проблеме просмотра различных форматов изображений, а также файлов формата PDF и DJVU. Для начала установим пакет fbida, который разом решит все наши проблемы с просмотром картинок и чтением DJVU-файлов:

# pacman -S fbida

Теперь для того, чтобы почитать интересную DJVU’шку, нам надо будет привести в исполнение следующую команду:

$ fbdjvu file.djvu

Чтобы увидеть все изображения (к примеру, формата JPG) в текущей папке, вбиваем в консоли:

$ fbi *.jpg

Остались PDF’ки, но мы и их сейчас одолеем. Качаем пакет fbpdf-git из AUR, распаковываем, собираем, устанавливаем:

# wget -c https://aur.archlinux.org/packages/fb/fbpdf-git/fbpdf-git.tar.gz

Инициируем процесс разархивирования:

# tar xzvf fbpdf-git.tar.gz
# cd fbpdf-git

Если у тебя нет в наличии установленного пакета openjpeg2, то быстрей исправляй это недоразумение:

# pacman -S openjpeg2

Собираем fbpdf-git:

# makepkg
# pacman -U fbpdf-git-0.r75.db5da40-1-x86_64.pkg.tar.xz

Пользуемся на здоровье:

$ fbpdf file.pdf

Сочетания для fbpdf:

  • J или <^ + f> — перейти на следующую страницу;
  • K или <^ + b> — перейти на предыдущую страницу;
  • h — сместиться по странице влево;
  • l — сместиться по странице вправо;
  • k — сместиться по странице вверх;
  • j или пробел — сместиться по странице вниз;
  • <^ + d> — прыгнуть на самый низ страницы;
  • Backspace — прыгнуть на самый верх страницы;
  • <[0–9] + G> — переход на страницу с заданным номером;
  • <[0–9] + z> — зум в угадай-число раз;
  • q — выйти из программы.
Просматриваем картинки через fbi
Просматриваем картинки через fbi

Остальное

Ну и на десерт… Консольный переводчик sdcv. Для перевода программа использует словари stardict, так что они у тебя уже должны иметься. Если это не так, то надо будет их скачать и поместить в директорию со словарями. Устанавливаем:

# pacman -S sdcv

Если ты пожелаешь сделать снимки экрана в консоли, то мы предложим тебе воспользоваться услугами fbgrab:

# pacman -S fbgrab

И в конце концов, если тебе потребуются уместные и нужные советы, ты всегда сможешь получить их при помощи небольшого однострочника (скажем спасибо товарищу muhas), который можно оформить и в виде скрипта и запихать на него алиас в .bashrc:

/usr/bin/printf "$(echo -e `curl -s http://fucking-great-advice.ru/api/random | awk -F \" '{print $8}'` | sed 's/\&nbsp;/ /g')"\\n 

Заключение

Если ты все-таки немного утомился от столь ярой аскетичности и не можешь себе представить жизнь без иксов, то предлагаем обратить взор на тайловые оконные менеджеры, например на xmonad. Суть подобных программ состоит в стремлении помочь пользователю максимально эффективно управлять окнами без помощи мыши. Так что если ты мышефоб, но голая консоль тебе не пришлась по вкусу, то этот вариант, скорее всего, заставит трепетать твое сознание.

Ну а тем, кого все-таки захватила консоль, хотелось бы пожелать не останавливаться на этом сложном пути истинного воена красноглазия и продолжать избавляться от излишних интерфейсов, мешающих постигнуть Дао. Следующий шаг — отказ от монитора, но это уже другая история…

19 комментариев

  1. 10.09.2014 at 23:19

    привел подругу домой — врубили кинцо посмотреть…

  2. 10.09.2014 at 23:28

    • 11.09.2014 at 20:39

      Парень слева лошара, линукс ставить не умеет.

      Парень справа просто врет. Винда за 20 минут не ставится в принципе, на любую машину. Скорее всего у него предустановленная, а он травит Кате и Маше байку про «сам устанавливал».

      • 12.09.2014 at 17:14

        на счет линукса согласен, но про винду:
        флешка, usb 2.0 и вот оно вуаля…. 15 минут и винда установлена.

        • 12.09.2014 at 19:22

          Это винда еще не установлена. Это никому не нужная голая система, которую еще настраивать и настраивать, да еще софт нужный ставить. Всяко оставшихся пяти минут не хватит.

      • 15.09.2014 at 22:02

        ssd диск — винда около 5 минут, линукс минт з 1.50 с чем то секунд, проверено на деле

      • 23.09.2014 at 22:15

        На SSD за 7 минут помню ставили.

  3. http://hamdeew.ru

    11.09.2014 at 00:33

    >воен

    Кстати, на скрине Форсаж чтоли?

  4. 11.09.2014 at 07:52

    А мне нравится, в консоли вся сила.

  5. 11.09.2014 at 08:47

    Статья пряо в духе «Старого» журнала) Давно не хватало именно такого стиля написания)

  6. 11.09.2014 at 10:13

    Жесть))) (Это я про путь воина красноглазия (даже кино смотреть в ASCII) Но статья улыбнула))) Кое что возьму на заметку!

  7. 11.09.2014 at 11:25

    «Особенность драйвера, о котором идет речь, в том, что для своей пристойной работы он требует демон виртуализации v86d, работающий в третьем кольце. Предназначение такого костыля — обеспечить совместимость с архитектурами, отличными от архитектуры x86. Понеслись!» — сказали курицы и поднатужились. Всё, что написано выше — бред пьяного ёжика. Назначение v86d — выполнять код, написанный для реального режима 80×86 (в случае с темой статьи — код Int 10h в BIOS). Делается это через режим V86 — точно такой же, каким пользуется Винда для эмуляции DOS. Какие другие архитектуры? Скачайте и посмотрите исходники. На платформах, отличных от x86, никакого режима V86 не бывает.

  8. 11.09.2014 at 16:21

    Видеоплеер реально крут! А разве не будет курсор мигать тут-там если каждый момент времени новый кадр?

  9. 12.09.2014 at 07:27

    Cool old term хотя и имитация

  10. 21.09.2014 at 14:32

    Всё хорошо в меру.

  11. http://jtprog.ru/

    25.09.2014 at 15:48

    Любопытно! Надо организовать такое на виртуалке)) Посмотреть что и как будет)))

  12. 12.10.2014 at 11:15

    А что не рассказали, как несколько консольных приложений в одном экране при помощи screen держать? Негоже, это ведь не DOS какой-то!

  13. 12.10.2014 at 13:26

    Не смог добиться поддержки двух мониторов в uvesafb… Кто-нибудь смог?

  14. 17.12.2014 at 07:57

    в качестве аудиоплеера можно peyote например

    http://peyote.sourceforge.net/about.rus.html

Оставить мнение

Check Also

Заметаем следы. Как уничтожить данные быстро и безвозвратно

Уничтожать улики и заметать следы — удел не самых законопослушных граждан. Мы же сегодня п…