TTY з 256 кольорами?


25

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

Відповіді:


10

Я переглядаю свою відповідь зараз, коли я впевнений у речах.

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

Отже ... як остаточну відповідь, переглянувши вихідний код, який обробляє послідовності виходу для віртуальних терміналів: Якщо ви хочете 256-ти кольорову підтримку віртуальних терміналів, вам доведеться створити власне ядро ​​після розширення коду, який аналізує послідовності виходу. для обробки ширшої специфікації кольорів.

Функція називається csi_m (). Зміни повинні бути схожими з тими, які розширюють емулятори терміналів на основі X для обробки послідовностей виходу із зазначенням більш насичених кольорів кольорів. Можливо, будуть потрібні й інші зміни, але саме тут ви б почали.


1
Це вірно. Я говорю про ці "віртуальні термінали низького рівня". Але оскільки я використовую framebuffer, я думаю, що саме модуль fbcon ядра використовується. Див. Документація / fb / fbcon.txt. Або fbcon є лише обгорткою навколо n_tty, яка додає додаткові функції? Дивлячись на патч URxvt ( cvs.schmorp.de/rxvt-unicode/doc/… ), здається, досить просто розширити 256-кольорову підтримку. Я не зовсім впевнений, чи правильний модуль ядра n_tty, оскільки я не бачу там жодних визначень кольорів.
timn

Я думаю, що framebuffer - це один пристрій, а tty - інший - віртуальний термінал вимагає пристрою tty, і ті використовують framebuffer як пристрій відображення, але framebuffer - не єдиний можливий пристрій відображення.
шарлатаний кіхот

+1 це звучить скоріше (vt102 не підтримує розширені кольори, а драйвер терміналу жорстко закодований до емуляції vt102). приємний шматочок досліджень.
шарлатаний кіхот

1
Така ж ситуація і в 2017 році. Я вважаю kmscon, що це термінал користувача, який намагається покращити термінал (включаючи 24-бітний колір). Хоча його розвиток застоюється на користь системної альтернативи.
jiggunjer

kmscon був роздвоєний, і цей пост активно розробляється: github.com/Aetf/kmscon
user3751385

7

Ваш 256-кольоровий RXVT / xterm / URXVT / тощо визначається терміном та налаштуванням 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відразу після входу на віртуальну консоль, щоб побачити, що використовує ваша система). З розділу сторінки:

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.

Якщо ви знайдете термін, який працює, змініть рядки 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
~ перекрутити цю чудову інформацію, але я не впевнений, що це призведе до успіху. Ви говорите "Так", але потім говорите "експеримент" і "якщо ви знайдете його". Я взяв більш прямий маршрут; Я шукав код ядра. Я не зміг знайти жодного коду, який би обробляв послідовності втілення кольорів - ВСЕ. Не в коді fb, не в коді tty ... нікуди. Таким чином, мій висновок, що він обробляється в BIOS. Це підтверджується моїми спогадами про використання таких самих послідовностей ANSI в DOS. Я вважаю, що в обох випадках BIOS обробляє різні послідовності виходу ANSI.
пбр

@pbr: я також перевірив код ядра. Код TTY не обмежує кількість кольорів. BIOS не входить в нього - ви маєте справу з фреймбуфером, який може приймати різні бітдепти (специфіка залежить від апаратних засобів, якщо ви відключили фреймбуфер ...). 16-кольорове обмеження може бути в GeTTY, тому рекомендація перевірити Qingy, або може міститись у матеріалах terminfo, тому рекомендується спробувати різні альтернативні визначення TERM. Я не можу порадити понад це, але ваш оренда BIOS не є базовою і не корисною .
шарлатаний кіхот

1
~ quack - ви праві, що його немає в BIOS (див. мою доопрацьовану відповідь нижче), але все-таки вимкнено, рекомендуючи дослідити Qingy та ін. Віртуальний термінальний код жорстко кодується з емуляцією vt102.
пбр

6

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

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

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

Однак mplayer повинен працювати!


Виглядає жахливо порівняно з будь-яким із клієнтів X-терміналів.
phil pirozhkov

1
Він працює у фреймбуфер, тому у вас в будь-якому випадку є лише 256 кольорів.
Себ

Цікаво, чи є у вас розуміння цієї проблеми fbterm? superuser.com/questions/892028/…
dtmland

Запуск emacsвсередину tmuxможе допомогти, як слід перекласти послідовності втечі для оточуючого терміналу.
Том Хейл

1

kmscon

kmscon - це спосіб отримати 256 кольорів та відео без встановлення системи Windows (X, Wayland).

Він був покинутий, але в даний час підтримується вилкою .

Документація щодо встановлення невелика, але сторінка README тут повинна вас обробити.


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

Уважно прочитайте інструкцію з монтажу.


-1

Тут обмежують послідовності виходу ANSI для налаштування кольорів переднього плану та кольорів фону.

З пам’яті ці послідовності виглядають як схожі на втечу [01; 34m. У 30-х роках є коди для переднього плану, і я думаю, що 40-і для фону.

Тому я не думаю, що є спосіб досягти того, що ви шукаєте.


2
Власне, це можливо. Інакше я б не зміг використати mutt з 256 кольорами в URxvt. :) Дивіться також push.cx/2008/256-color-xterms-in-ubuntu Але як я можу отримати такий же ефект у TTY?
timn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.