터미널 에뮬레이터의 색상에 문제가 있습니다. LXTerminal
터미널 에뮬레이터와 LXDE
데스크탑 환경으로 사용하고 있습니다 .
다음 명령은 회색 배경에 빨간색 텍스트를 인쇄해야 합니다.
printf "\n\033[1;31;40m"hello"\033[00m\n\n"
하지만 그건 작동하지 않습니다. 회색 배경이 없습니다(빨간색 텍스트는 괜찮습니다). 내 오래된 컴퓨터( Gnome/Gnome Terminal
)에서는 모든 것이 잘 작동합니다.
다른 여러 터미널 에뮬레이터를 설치해 보았지만 문제가 지속됩니다. 이 문제가 터미널 에뮬레이터와 관련된 것인지, 아니면 다른 것과 관련된 것인지조차 확실하지 않습니다. 콘솔(CTRL+ALT+F1)에서 배경 회색은 두 시스템 모두에서 작동하지 않습니다.
이 문제는 회색 배경에만 국한됩니다. 다른 모든 색상은 정상적으로 작동합니다. 예를 들어 다음은 녹색 배경에 빨간색 텍스트를 인쇄합니다.
printf "\n\033[1;31;42m"hello"\033[00m\n\n"
도움을 주시면 감사하겠습니다. 문제 해결을 어디서부터 시작해야 할지조차 모르겠습니다.
답변1
모든 터미널 에뮬레이터에서 지원되는 8가지 표준 ANSI 색상이 있습니다. 대부분의 터미널 에뮬레이터에는 표준 ANSI 색상의 8가지 밝은 변형도 있습니다.
그러나 이스케이프 코드가 매핑되는 실제 색상 값은 표준화되지 않았으며 실제로 터미널 에뮬레이터마다 약간씩 다른 경우가 많습니다. 따라서 printf "\e[31;47mTest\n"
흰색 배경에 빨간색 텍스트를 인쇄하는 경우 사용하는 터미널 에뮬레이터에 따라 빨간색과 흰색의 실제 색조가 다를 수 있습니다.
이것이 부분적으로 문제를 설명합니다. 색상 값은 표준이 아니며 LXTerminal
익숙하지 않은 색상 팔레트에 대해 다른 기본값을 가질 수 있습니다. 설정을 살펴보면 일반적으로 원하는 대로 색 구성표를 구성할 수 있습니다.
직면한 또 다른 문제는 굵은 속성이 실제로 수행하는 작업도 표준화되지 않았다는 것입니다. 세 가지 가능성이 있습니다. 글꼴을 굵게 만들거나, 전경색을 더 밝게 만들거나, 전경색을 더 밝게 하면서 글꼴을 굵게 만들 수 있습니다.
여기서도 기본 동작은 터미널 에뮬레이터에 따라 다르며 일반적으로 올바른 설정을 찾을 수 있으면 변경할 수 있습니다. '대담함' 또는 '밝음'을 언급하는 내용을 찾아보세요.
밝은 색상을 사용하려면 굵은 글씨 대신 소위 aixterm 색상 이스케이프 코드를 사용할 수 있습니다. 이는 표준은 아니지만 내가 아는 모든 최신 터미널 에뮬레이터에서 지원됩니다. 볼드체와 달리 항상 밝은 색상을 사용하며 밝은 배경색을 표시하는 데에도 사용할 수 있습니다.
예를 들어 밝은 흰색 배경에 밝은 빨간색 텍스트를 인쇄하려면 다음과 같이 하면 됩니다 printf "\e[91;107mTest\n"
.
참고로 다음은 모든 색상 이스케이프 코드 표입니다.
| ANSI | ANSI | ANSI | | Aixterm | Aixterm
| Color | FG Code | BG Code | Bright Color | FG Code | BG Code
+---------+---------+-------- +----------------+---------+--------
| Black | 30 | 40 | Bright Black | 90 | 100
| Red | 31 | 41 | Bright Red | 91 | 101
| Green | 32 | 42 | Bright Green | 92 | 102
| Yellow | 33 | 43 | Bright Yellow | 93 | 103
| Blue | 34 | 44 | Bright Blue | 94 | 104
| Magenta | 35 | 45 | Bright Magenta | 95 | 105
| Cyan | 36 | 46 | Bright Cyan | 96 | 106
| White | 37 | 47 | Bright White | 97 | 107
답변2
1
시작 부분의 속성은 " 1;31;40
bold"(일명 "bright") 모드를 활성화하지만 일부 터미널에서는 이를 전경색에만 적용합니다. 전경에서 16가지 색상을 지원하기 때문에 어떤 이유인지 모르겠습니다($TERM 변수를 변경해도 차이가 없습니다). 1 0( 40
4 = 배경, 0 = 색상)은 실제로 검은색이지만 "밝은 검은색"은 회색입니다. 두 가지 해결책은 다음과 같습니다.
색상 7(흰색)은 아마도 흰색이 아닌 회색으로 판명될 것입니다(진정한 흰색의 경우 "밝은 흰색"이 필요합니다. 즉, 실제로 가질 수 없는 배경은 흰색임을 의미합니다).
원한다면 LXDE에서 gnome 터미널을 사용할 수 있어야 합니다. 그냥 설치하고 시작하세요
gnome-terminal
(명령 이름인 것 같아요). 그런 다음 lx 터미널 대신 이를 사용하도록 실행 프로그램을 구성해야 합니다.
1 내 추측은 다음과 같습니다. 굵게 설정하면 전경색에 밝기가 적용됩니다.그리고과감한 강조를 더합니다. 따라서 굵은 글씨를 적용하지 않으면 밝은 전경색을 사용할 수 없습니다. 아마도 흑백 터미널이 일반적이었을 때 강조하기 위해 굵은 글씨로 설정했을 것입니다. 예를 들어 다음과 같이 \\033[1mBlah blah\\033[0m
일반적이었습니다. 실제로 이것은 여전히 작동하지만 전경색도 밝게 만듭니다. 이것이 배경을 밝게 하는 것이 바람직하지 않다고 생각한다면(그냥 굵게 표시되어야 하기 때문에) 구현에서 그렇게 하지 않도록 할 것입니다. 아 글쎄.
답변3
일부 터미널 에뮬레이터에서 사용할 수 있는 요령은 다음과 같습니다. 역방향 비디오 속성(7)을 사용하여 밝은 전경색을 선택한 다음 배경색으로 바꾸면 밝은 배경색이 제공됩니다.
echo -e "\e[1;32;7mText on a bright green background"
문제는 이제 16가지 배경색을 사용할 수 있지만 대신 8가지 색상 제한이 전경/텍스트에 적용된다는 것입니다. 그리고 문제를 더욱 혼란스럽게 만들기 위해 반전 비디오 속성이 활성화된 동안 배경 색상에 대한 속성 코드를 사용하여 텍스트 색상을 설정해야 합니다!
답변4
대신 47=background white
에 40=background black
굵지 않은 흰색을 배경으로 사용합니다.
]# printf "\033[0;30;47m"hello"\033[00m\n"
hello (black on grey)
]# printf "\033[1;30;47m"hello"\033[00m\n"
hello (darkgrey on grey)
]# printf "\033[1;37;47m"hello"\033[00m\n"
hello (white on grey)
]# printf "\033[0;37;47m"hello"\033[00m\n"
hello (INVISIBLE grey on grey)
굵은 검정색은 기본적으로 어두운 회색이 됩니다. 일반 흰색은 실제로 회색입니다. 굵은 흰색은 흰색이기 때문입니다.
이 루프는 검정색 바탕의 색상과 색상 바탕의 흰색 조합으로 두 개의 열을 인쇄합니다.
for ((i=30; i<=47; i++))
do
echo -en "\e[${i}mHello\e[0m";
echo -e "\e[1;${i}mHello\e[0m";
done
눈에 보이지 않는 검정색과 진한 회색 바탕에 검정색으로 시작하지만 나머지 17개 라인도 보기 좋고 전체 콘솔 색상 팔레트를 보여줍니다.
(38과 39는 생략해야 하지만 단순화를 위해 30부터 47까지만 실행합니다.)
A가 언급함여덟색상과 표준이 부족합니다.
6가지 색상 31-36(빨간색에서 청록색까지)이 잘 정의되어 있습니다. 검정색(30) 및 흰색(37)도 있지만 특히 배경(40 및 47)에 사용되는 굵은 변형은 적습니다.
나는 방금 알아차렸습니다: xterm에서는 일반적인 흰색 텍스트가 회색 배경에 표시되지만 Linux 콘솔에서는 그렇지 않습니다. (마지막 줄, i=47) (읽을 수 없는 변형을 원하지 않았기 때문에 30분 전까지 스크립트가 46에서 중지되었습니다)
두 위치 모두에서 마우스를 선택하면 영리하게 적응하고 반대 방향으로 전환해도 읽기 쉬운 상태로 유지됩니다.