TTY с 256 цветами?

18006
timn

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

20

5 ответов на вопрос

9
pbr

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

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

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

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

Вот так. Я говорю об этих «виртуальных терминалах низкого уровня». Но поскольку я использую фреймбуфер, я думаю, это модуль ядра fbcon. Смотрите документацию / fb / fbcon.txt. Или fbcon - это просто оболочка вокруг n_tty, добавляющая некоторые дополнительные функции? Глядя на патч URxvt (http://cvs.schmorp.de/rxvt-unicode/doc/urxvt-8.2-256color.patch?view=markup), кажется, довольно просто расширить поддержку 256 цветов. Я не совсем уверен, является ли n_tty правильным модулем ядра, так как я не вижу там никаких определений цвета. timn 14 лет назад 0
я думаю, что кадровый буфер - это одно устройство, а tty - другое - виртуальному терминалу требуется устройство tty, и те используют кадровый буфер как устройство отображения, но кадровый буфер - не единственное возможное устройство отображения. quack quixote 14 лет назад 0
+1 это звучит более вероятно (vt102 не поддерживает расширенные цвета, а драйвер терминала жестко запрограммирован для эмуляции vt102). Хорошее исследование. quack quixote 14 лет назад 0
Та же ситуация в 2017 году. Я считаю, что `kmscon` - это пользовательский терминал, который пытается улучшить его (включая 24-битный цвет). Хотя его развитие застопорилось в пользу системной альтернативы. jiggunjer 7 лет назад 1
kmscon был разветвлен и на данный момент активно развивается: https://github.com/Aetf/kmscon user3751385 5 лет назад 0
7
quack quixote

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

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

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

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

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

Выглядит ужасно по сравнению с любым из X-терминальных клиентов. phil pirozhkov 9 лет назад 0
Он работает в фреймбуфере, поэтому у вас в любом случае есть только 256 цветов, доступных для фреймбуфера. Seb 9 лет назад 1
Хотите знать, есть ли у вас понимание этой проблемы fbterm? http://superuser.com/questions/892028/fbterm-expected-behavior-at-launch dtmland 9 лет назад 0
Запуск `emacs` внутри` tmux` может помочь, поскольку он должен транслировать escape-последовательности для окружающего терминала. Tom Hale 5 лет назад 0
0
user3751385

kmscon

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

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

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


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

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

-1
pbr

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

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

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

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

Похожие вопросы