20

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

5 ответов5

9

Я пересматриваю свой ответ теперь, когда я уверен в вещах.

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

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

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

7

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

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

Да.

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

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

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

  • Говоря о заменах getty, я клянусь, я видел инструкции по замене getty GNU screen где-то по пути. В данный момент я не нахожу ссылку, но поскольку для screen есть 256-цветный ТЕРМИН, вы можете посмотреть на него.


/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
6

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

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

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

Тем не менее, mplayer должен работать!

0

kmscon

kmscon - это способ получить 256 цветов и видео без установки системы Windows (X, Wayland).

Он был заброшен, но в настоящее время поддерживается через вилку.

Документация по установке невелика, но страница README здесь должна помочь вам.


Я установил его и использую для консольных приложений, требующих 256 цветов (vim из-за моей конфигурации).

Внимательно прочитайте инструкцию по установке.

-1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .