TTY с 256 цветами?

С URxvt и xterm можно использовать виртуальный терминал, поддерживающий 256 цветов вместо восьми. Поскольку графическая карта Intel GMA хорошо поддерживается драйвером фреймбуфера KMS, я работаю исключительно над TTY. К сожалению, он поддерживает только восемь цветов, хотя с MPlayer (-vo fbdev / fbdev2) и другими инструментами framebuffer можно решать гораздо больше. Есть ли способ сказать TTY использовать более восьми цветов?

Сейчас я пересматриваю свой ответ, что я уверен в вещах.

Было ошибочным заключить, что последовательности ANSI обрабатываются через BIOS или иным образом вне ядра; Действительно, они обрабатываются в ядре. Я нашел то, что я пропустил, прежде чем благодаря hnaz_ на канале IRN LinuxNewbies: drivers/char/vt.c реализует эмуляцию терминала цифрового оборудования VT102, который используется драйвером виртуального терминала.

Итак … как окончательный ответ, просмотрев исходный код, который обрабатывает escape-последовательности для виртуальных терминалов: если вы хотите поддерживать 256 цветов на виртуальных терминалах, вам придется создавать собственное ядро ​​после расширения кода, который анализирует escape-последовательности Для обработки более широкой спецификации цвета.

Функция называется csi_m (). Изменения должны быть похожими на те, которые расширяют эмуляторы терминалов на основе X для обработки управляющих последовательностей, указывающих более богатые цветовые коды. Вероятно, будут и другие изменения, но именно здесь вы начнете.

Ваш 256-цветный RXVT / xterm / URXVT / etc определяется terminfo и настройкой переменной TERM . В большинстве дистрибутивов Linux ваши виртуальные терминалы определяются в /etc/inittab и используют тип терминала по умолчанию, который определяет, сколько цветов может использовать терминал.

Есть ли способ сказать TTY использовать более восьми цветов?

Да.

  • Убедитесь, что ваш фреймбуфер использует правильную глубину разрешения / бит. Попробуйте добавить vga=773 в опции ядра, например, чтобы получить 1024×768 и 256-цветную (8-битную глубину цвета).

  • Задайте другой TERM (например, export TERM=foo ). Вам нужно поэкспериментировать, чтобы найти правильный. Если вы найдете тот, который работает, вы можете изменить свой /etc/inittab чтобы ваши виртуальные терминалы запускали его по умолчанию (см. Следующий раздел).

  • В этой статье обсуждаются другие варианты, которые могут сработать для вас. Он рекомендует Qingy (Qingy is not GettY) в качестве замены getty и может дать вам то, что вы ищете, если переключение переменных TERM не является вариантом.

  • Говоря о замене getty, я клянусь, что видел инструкции по замене getty GNU screen где-то на этом пути. На данный момент я не нахожу ссылку, но поскольку для screen есть 256-цветный TERM, вы можете изучить его.


/etc/inittab использует такие строки, чтобы настроить виртуальные терминалы:

 # Format: # <id>:<runlevels>:<action>:<process> # 1:2345:respawn:/sbin/getty 38400 tty1 2:2345:respawn:/sbin/getty 38400 tty2 3:2345:respawn:/sbin/getty 38400 tty3 

Вот страница man /sbin/getty (из моей системы Debian, так что это технически программа agetty ):

 SYNOPSIS agetty [-8ihLmnw] [-f issue_file] [-l login_program] [-I init] [-t timeout] [-H login_host] baud_rate,... port [term] 

Обратите внимание на baud_rate,... port [term] там в конце. Это соответствует команде в строке /etc/inittab ( /sbin/getty 38400 ttyN ) – обратите внимание, что нет аргумента [term] , поэтому мы получаем значение по умолчанию (запустите echo $TERM сразу после входа в систему на виртуальной консоли Чтобы узнать, что использует ваша система). С manpage снова:

 ARGUMENTS term The value to be used for the TERM environment variable. This over‐ rides whatever init(8) may have set, and is inherited by login and the shell. 

Если вы найдете TERM, который работает, измените строки getty в своем inittab и добавьте правильный TERM в конце:

 1:2345:respawn:/sbin/getty 38400 tty1 TERM-with-256-colors 2:2345:respawn:/sbin/getty 38400 tty2 TERM-with-256-colors 

Посмотрите на fbterm – это замещающий фреймбуфер, который может работать в 256-цветном режиме (вы просто запускаете его как root из TTY)

У меня был смешанный успех – некоторые приложения работают нормально и сообщают 256 цветов; Однако Emacs (основная причина, по которой я хотел 256 цветов на TTY), похоже, не работает; Здесь обсуждается немного, но на самом деле это не устраняется:

http://lists.gnu.org/archive/html/emacs-devel/2011-08/msg00989.html

Однако mplayer должен работать!

Управляющие последовательности ANSI для установки цветов переднего и заднего плана текста – вот что здесь ограничивает.

Из памяти эти последовательности выглядят как escape [01; 34m. Есть коды в 30-х годах для переднего плана, и я думаю, 40-х для фона.

Поэтому я не думаю, что есть какой-то способ добиться того, что вы ищете.

Давайте будем гением компьютера.