256 색의 TTY?


25

URxvt 및 xterm을 사용하면 8 개가 아닌 256 색을 지원하는 가상 터미널을 사용할 수 있습니다. 인텔 GMA 그래픽 카드는 KMS 프레임 버퍼 드라이버에서 잘 지원되므로 TTY 작업 만하고 있습니다. 불행히도 MPlayer (-vo fbdev / fbdev2) 및 다른 프레임 버퍼 도구를 사용하면 훨씬 더 많은 주소를 지정할 수 있지만 8 가지 색상 만 지원합니다. TTY에 8 가지 이상의 색상을 사용하도록 지시하는 방법이 있습니까?

답변:


10

확신 할 수 있도록 지금 답변을 수정하고 있습니다.

ANSI 시퀀스가 ​​BIOS를 통해 또는 커널 외부에서 처리되고 있다는 결론은 잘못되었습니다. 실제로 커널에서 처리됩니다. LinuxNewbies IRC 채널의 hnaz_ 덕분에 내가 놓친 것을 발견 drivers/char/vt.c했습니다. 가상 터미널 드라이버에서 사용하는 Digital Equipment VT102 터미널의 에뮬레이션을 구현합니다.

가상 터미널의 이스케이프 시퀀스를 처리하는 소스 코드를 검토 한 결정적인 답변으로, 가상 터미널에서 256 색을 지원하려면 이스케이프 시퀀스를 구문 분석하는 코드를 확장 한 후 자체 커널을 빌드해야합니다. 더 넓은 색상 지정을 처리합니다.

함수는 csi_m ()입니다. 변경 사항은 더 풍부한 색상 코드를 지정하는 이스케이프 시퀀스를 처리하도록 X 기반 터미널 에뮬레이터를 확장하는 변경 사항과 유사해야합니다. 다른 변경 사항도 필요할 수 있지만 여기에서 시작할 수 있습니다.


1
맞습니다. 이 "저수준 가상 터미널"에 대해 이야기하고 있습니다. 그러나 프레임 버퍼를 사용하고 있기 때문에 내가 사용하고있는 것은 fbcon 커널 모듈입니다. Documentation / fb / fbcon.txt를 참조하십시오. 아니면 fbcon이 n_tty를 감싸는 추가 기능입니까? URxvt 패치 ( cvs.schmorp.de/rxvt-unicode/doc/… )를 보면 256 색 지원을 확장하는 것이 상당히 쉬운 것 같습니다. 색상 정의가 표시되지 않으므로 n_tty가 올바른 커널 모듈인지 확실하지 않습니다.
timn

프레임 버퍼는 하나의 장치이고 tty는 다른 장치라고 생각합니다. 가상 터미널에는 tty 장치가 필요하고 프레임 버퍼는 디스플레이 장치로 사용되지만 프레임 버퍼 만 가능한 디스플레이 장치는 아닙니다.
quack quixote 4

+1 이것은 가능성이 더 높습니다 (vt102는 확장 색상을 지원하지 않으며 터미널 드라이버는 vt102 에뮬레이션으로 하드 코딩되었습니다). 좋은 연구.
quack quixote

1
2017 년에도 마찬가지입니다. kmscon터미널을 개선하려고하는 사용자 랜드 터미널 이라고 생각 합니다 (24 비트 색상 포함). 체계적인 대안을 선호하여 개발이 정체되었지만.
jiggunjer

kmscon는 포크되었으며,이 게시물의로 활발하게 개발되고있다 : github.com/Aetf/kmscon
user3751385

7

256 색 RXVT / xterm / URXVT / etc는 terminfo 및 TERM변수 설정으로 정의됩니다 . 대부분의 Linux 배포에서 가상 터미널은에 정의되어 /etc/inittab있으며 터미널이 사용할 수있는 색상 수를 정의하는 기본 터미널 유형을 사용하십시오.

TTY에 8 가지 이상의 색상을 사용하도록 지시하는 방법이 있습니까?

예.

  • 프레임 버퍼 가 올바른 해상도 / 비트 심도를 사용하고 있는지 확인하십시오 . vga=773예를 들어, 1024x768 및 256 색 (8 비트 색 농도)을 얻으려면 커널 옵션에 추가하십시오 .

  • 다른 TERM을 설정하십시오 (예 :) export TERM=foo. 올바른 것을 찾으려면 실험해야합니다. 작동하는 것을 찾으면 /etc/inittab가상 터미널이 기본적으로 실행되도록 수정할 수 있습니다 (다음 섹션 참조).

  • 이 기사 에서는 귀하에게 도움이 될 수있는 다른 옵션에 대해 설명합니다. Qtyy (Qingy is GettY가 아님) 를 게티 대체품으로 권장 하고 TERM 변수 전환이 옵션이 아닌 경우 원하는 것을 제공 할 수 있습니다.

  • 게티 교체에 대해 말하면서, 나는 게티를 GNU screen다른 곳으로 교체하는 지침을 보았습니다 . 현재 링크를 찾지 못했지만에 대한 256 색 TERM 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(데비안 시스템에서 기술적으로 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.

작동하는 TERM을 찾으면 inittab에서 getty 행을 수정하고 끝에 적절한 TERM을 추가하십시오.

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

1
~이 모든 멋진 정보를 확인하십시오. 그러나 그것이 성공으로 이어질지 확신하지 못합니다. "예"라고 말한 다음 "실험"과 "만약 발견하면"이라고 말합니다. 나는 더 직접적인 길을 택했다. 커널 코드를 검색했습니다. 커널에서 색상의 이스케이프 시퀀스를 처리하는 코드를 찾을 수 없었습니다. tty 코드가 아니라 fb 코드가 아닙니다. 따라서 BIOS에서 처리된다는 결론을 내 렸습니다. 이것은 DOS에서 똑같은 ANSI 이스케이프 시퀀스를 사용한다는 기억에 의해 지원됩니다. 두 가지 경우 모두 다양한 ANSI 이스케이프 시퀀스가 ​​BIOS에 의해 처리되고 있다고 생각합니다.
pbr

@ pbr : 커널 코드도 체크 아웃했습니다. TTY 코드는 색상 수에 제한 을 두지 않습니다 . BIOS는 그것에 들어 가지 않습니다 -당신은 다양한 비트 깊이를 취할 있는 프레임 버퍼를 다루고 있습니다 (프레임 버퍼를 비활성화하면 세부 사항은 하드웨어에 달려 있습니다 ...). 16 색 제한은 GeTTY에있을 수 있으므로 Qingy를 체크 아웃 할 것을 권장하거나 terminfo에있을 수 있으므로 다양한 대체 TERM 정의를 시도하는 것이 좋습니다. 그 이상으로 조언 할 수는 없지만 BIOS 런닝은 기본이 아니며 도움이되지 않습니다 .
quack quixote

1
~ quack-BIOS에 있지 않지만 (아래 수정 된 답변 참조) Qingy et al. 가상 터미널 코드는 vt102 에뮬레이션으로 하드 코딩됩니다.
pbr.

6

fbterm을 살펴보십시오-256 색 모드에서 실행할 수있는 교체 프레임 버퍼입니다 (TTY에서 루트로 실행)

나는 그것과 혼합 된 성공을 거두었습니다. 일부 응용 프로그램은 잘 작동하고 256 색을보고합니다. 그러나 Emacs (TTY에서 256 색을 원했던 주된 이유)는 작동하지 않는 것 같습니다. 여기에 약간의 토론이 있지만 실제로 해결되지는 않습니다.

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

그러나 mplayer는 작동해야합니다!


X 터미널 클라이언트와 비교할 때 끔찍한 것 같습니다.
phil pirozhkov

1
프레임 버퍼에서 실행되므로 프레임 버퍼에 256 색상 만 사용할 수 있습니다.
Seb

이 fbterm 문제에 대한 통찰력이 궁금하십니까? superuser.com/questions/892028/…
dtmland

emacs내부를 실행 tmux하면 주변 터미널의 이스케이프 시퀀스를 변환하는 데 도움이 될 수 있습니다.
Tom Hale

1

kmscon

kmscon 은 Windows 시스템 (X, Wayland)을 설치하지 않고도 256 색과 비디오를 얻을 수있는 방법입니다.

버려졌지만 현재는 포크 를 통해 유지됩니다 .

설치에 대한 문서는 얇지 만 여기에 있는 README 페이지 가 표시됩니다.


이것을 설치하고 256 색이 필요한 콘솔 앱 (내 구성으로 인해 vim)에 사용했습니다.

설치 지침을주의 깊게 읽으십시오.


-1

텍스트의 전경색과 배경색을 설정하기위한 ANSI 이스케이프 시퀀스는 여기서 제한적인 요소입니다.

메모리에서이 시퀀스들은 escape와 비슷해 보인다 [01; 34m 포 그라운드에 30 년대 코드가 있고 배경에 40 년대 코드가 있다고 생각한다.

그래서 나는 당신이 찾고있는 것을 성취 할 수있는 방법이 없다고 생각합니다.


2
실제로 가능합니다. 그렇지 않으면 URxvt에서 256 색의 뮤트를 사용할 수 없습니다. :) 참고 사항 push.cx/2008/256-color-xterms-in-ubuntu 그러나 TTY에서 동일한 효과를 얻으려면 어떻게해야합니까?
timn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.