어떤 터미널 정의가 사용 가능한지 확인하는 방법은 무엇입니까?

어떤 터미널 정의가 사용 가능한지 확인하는 방법은 무엇입니까?

대부분의 질문은 제목에 있지만 조금 더 자세히 설명하자면 다음과 같습니다.

대부분의 Linux에서는 가능합니다 find /usr/share/terminfo -type f. 하지만 내 근처의 Solaris 컴퓨터에는 이 디렉토리가 존재하지도 않습니다.

터미널 목록을 반복하고 다음을 수행할 수 있습니다.

for TERM in xterm xtermc xterm-color xterm-256color screen rxvt
do
    tput cols >/dev/null 2>/dev/null && echo "$TERM available"
done

하지만 매우 느립니다. tput터미널 정의에서 사용되는 경로를 검색하고 직접 "찾기"를 실행할 수 있는 옵션이 있습니까 ?

답변1

terminfo를 지원하는 "모든" 시스템의 infocmp 프로그램은 현재 터미널을 찾은 터미널 설명의 경로 이름을 정확하게 표시합니다. 예를 들어(이 경우 AIX):

$ infocmp vt100
#       Reconstructed via infocmp from file: /usr/share/lib/terminfo/v/vt100
vt100|vt100-am|Digital VT100,
        am, msgr, xenl, xon,
        cols#80, it#8, lines#24, vt#3,
        ...

ncurses를 사용하면 여러 개의 terminfo 데이터베이스를 가질 수 있고 항목이 별도의 파일일 필요가 없기 때문에 상황이 더 복잡해집니다. 항목당 하나의 데이터베이스와 하나의 파일기본, Unix 시스템과 호환됩니다.

옵션 -D은 다음과 같습니다그리고정보 CMP(다음에 추가2011년 말)은 추가 정보를 표시하는 방법입니다. 예를 들어 Debian7에서는 다음을 볼 수 있습니다.

$ infocmp6 -D
/users/tom/.terminfo
/usr/local/ncurses/share/terminfo
/usr/share/terminfo
/lib/terminfo

내 FreeBSD 10 시스템에서는 해시 데이터베이스를 사용합니다.

$ infocmp -D
/usr/local/ncurses/share/terminfo.db
/usr/local/share/misc/terminfo
/etc/termcap

또는 다음을 사용할 수 있습니다.toe프로그램은 사용 가능한 모든 터미널 항목에 대한 보고서를 생성합니다. 사물을 결합하려면 -s및 옵션을 사용하세요 (예:-aconflict프로그램):

--> /users/tom/.terminfo
----> /usr/local/ncurses/share/terminfo
------> /usr/share/terminfo
--------> /lib/terminfo
--*-+---:       9term           Plan9 terminal emulator for X
--*---*-:       Eterm           Eterm with xterm-style color support (X Window System)
--*-*---:       Eterm-256color  Eterm with xterm 256-colors
--*-*---:       Eterm-88color   Eterm with 88 colors
--*-+---:       MtxOrb          Generic Matrix Orbital LCD display
--*-+---:       MtxOrb162       16x2 Matrix Orbital LCD display
--*-+---:       MtxOrb204       20x4 Matrix Orbital LCD display
--*-+---:       NCR260VT300WPP  NCR 2900_260 vt300 wide mode pc+  kybd
--*-+---:       aaa             ann arbor ambassador/30 lines
--*-+---:       aaa+dec         ann arbor ambassador in dec vt100 mode
--*-+---:       aaa+rv          ann arbor ambassador in reverse video
...

답변2

Solaris 10에서는 다음을 수행할 수 있습니다.

find /usr/share/lib/terminfo -type f -print

다음을 수행할 수 있어야 합니다.

find /usr -type d -name terminfo -print

디렉토리가 어디에 있는지 찾아보세요.

정확한 경로를 찾기 위해 읽을 수도 있습니다.

man terminfo

답변3

Linux에서는 를 사용 strace하여 프로그램이 사용하는 시스템 호출을 확인할 수 있습니다. 다음은 모든 "open(2)" 시스템 호출을 나열하고 이를 필터링하여 sed현재 터미널의 terminfo 기능을 번역하는 데 사용되는 terminfo 파일을 표시합니다.tput

TERMINFO_FILE=$(strace -e open tput cud1 2>&1 | sed -n -e 's/^.*\(".*terminfo.*"\).*$/\1/p')
echo ${TERMINFO_FILE}

이 sed 표현식은 terminfo 파일이 "terminfo" 패턴을 포함하는 경로에 저장되어 있다고 가정합니다. 그것이 걱정된다면, 다른 가정을 사용하고 마지막 "공개" 시스템 호출을 선택할 수 있습니다.

TERMINFO_FILE=$(strace -e open tput cud1 2>&1 | grep -e "^open" | tail -n 1 | sed -n -e 's/^.*\(".*"\).*$/\1/p')
echo ${TERMINFO_FILE}

infocmp -D마지막으로 terminfo 검색 경로 목록을 사용하거나 덤프할 수 있습니다 tic -D. 여기에는 컴파일된 terminfo 검색 경로가 나열됩니다. 검색을 저주하는 경로와 동일한 경로입니다.

답변4

Zyxel NSA310에서도 같은 문제가 발생했습니다.

나를 위해 일한 솔루션은

export TERM=xterm

여기에 조언이 제공됩니다:

https://better-coding.com/solved-xterm-256color-unknown-terminal-type/

관련 정보