TTY с 256 цветами?

25

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

timn
источник

Ответы:

10

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

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

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

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

PBR
источник
1
Это верно. Я говорю об этих «виртуальных терминалах низкого уровня». Но поскольку я использую фреймбуфер, я думаю, это модуль ядра fbcon. Смотрите документацию / fb / fbcon.txt. Или fbcon - это просто оболочка вокруг n_tty, добавляющая некоторые дополнительные функции? Глядя на патч URxvt ( cvs.schmorp.de/rxvt-unicode/doc/… ), довольно просто расширить поддержку 256 цветов. Я не совсем уверен, является ли n_tty правильным модулем ядра, поскольку я не вижу там никаких определений цвета.
Тим
я думаю, что кадровый буфер - это одно устройство, а tty - другое - виртуальному терминалу требуется устройство tty, и те используют кадровый буфер как устройство отображения, но кадровый буфер - не единственно возможное устройство отображения.
Квик-кихот
+1 это звучит более вероятно (vt102 не поддерживает расширенные цвета, а драйвер терминала жестко запрограммирован для эмуляции vt102). Хорошее исследование.
шарлатан Quixote
1
Та же ситуация в 2017 году. Я считаю, kmsconчто это пользовательский терминал, который пытается улучшить терминал (включая 24-битный цвет). Хотя его развитие застопорилось в пользу системной альтернативы.
jiggunjer
kmscon был разветвлен и на данный момент активно развивается: github.com/Aetf/kmscon
user3751385
7

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

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

Да.

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

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

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

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


/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

Вот страница руководства /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
шарлатан
источник
1
Кряки это все потрясающая информация, но я не уверен, что это приведет к успеху. Вы говорите «Да», но затем говорите «Эксперимент» и «Если вы найдете один». Я выбрал более прямой путь; Я искал код ядра. Я не смог найти никакого кода, который обрабатывает escape-последовательности для цвета - НИГДЕ в ядре. Не в коде fb, не в коде tty ... нигде. Таким образом, мой вывод, что это обрабатывается в BIOS. Это подтверждается моими воспоминаниями об использовании точно таких же escape-последовательностей ANSI в DOS. Я считаю, что различные escape-последовательности ANSI обрабатываются BIOS в обоих случаях.
PBR
@pbr: я также проверил код ядра. Код TTY не накладывает никаких ограничений на количество цветов. BIOS не входит в это - вы имеете дело с кадровым буфером, который может принимать различные битовые глубины (особенности зависят от аппаратного обеспечения, если вы отключили кадровый буфер ...). 16-цветовое ограничение может быть в GeTTY, то есть рекомендация проверить Qingy, или может быть в файле terminfo, поэтому рекомендуется попробовать различные альтернативные определения TERM. Я не могу посоветовать, кроме этого, но ваш разглагольствования в BIOS является неосновной и бесполезной .
Квик-кихот
1
~ кря - вы правы, что его нет в BIOS (см. мой исправленный ответ ниже), но он все еще не рекомендует рекомендовать расследовать Qingy et al. Код виртуального терминала жестко запрограммирован эмуляцией vt102.
PBR
6

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

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

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

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

Себ
источник
Выглядит ужасно по сравнению с любым из X-терминальных клиентов.
Фил Пирожков
1
Он работает в фреймбуфере, поэтому у вас в любом случае есть только 256 цветов, доступных для фреймбуфера.
Себ
Хотите знать, есть ли у вас понимание этой проблемы fbterm? superuser.com/questions/892028/…
dtmland
Запуск emacsвнутри tmuxможет помочь, поскольку он должен транслировать escape-последовательности для окружающего терминала.
Том Хейл
1

kmscon

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

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

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


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

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

user3751385
источник
-1

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

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

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

PBR
источник
2
На самом деле, это возможно. Иначе я бы не смог использовать Mutt с 256 цветами в URxvt. :) Смотрите также push.cx/2008/256-color-xterms-in-ubuntu Но как мне получить такой же эффект в TTY?
Тим