2014-06-24 6 views
0

나는 안드로이드 SSH 클라이언트를 쓰고있다. 뷰를 제어하는 ​​터미널 개체와 서버에 명령을 보내는 SSH 개체가 있습니다.색상을 지원하지 않는 Ncurses

내 문제는 모든 세션 동안 터미널이 컬러로 표시되지만 ncurses 애플리케이션이 열리면 (예 : tmux) 터미널이 흑백으로 표시된다는 것입니다.

나는 이것을 발견 할 수 있었다 : http://invisible-island.net/ncurses/ncurses.faq.html#white_black 나는 그게 무슨 뜻인지 정말로 모르겠다. 더 많은 문서를 읽거나,이 기능을 지원하는 오픈 소스 Java 클라이언트가 있다면 누구나 나를 안내 할 수 있습니까? 나는 이것을 어떻게 고쳐야할지 잘 모른다.

+0

$ TERM 유형이란 무엇입니까? 환경 변수 $ TERM은 ncurses가 지원하는 색으로 인식하는 터미널 유형으로 설정되어야하므로 보낼 올바른 순서를 찾을 수 있습니다. (당신이 ncurses 외부에서 색깔을 보게되는 이유는 아마도 어떤 프로그램이 터미널 타입을 모른다고하더라도 목적을 위해 맹목적으로 ANSI 시퀀스를 보낸다는 것입니다.) –

+0

정말 고마워요, 잠시 동안 이걸로 좌절감을 느끼고 있습니다. 나는 TERM = xterm-256color라는 export를했는데 그것을 고정시켰다 :-) 이제 나는 자동적으로 app에서 그렇게 할 필요가있다. 자유롭게 답변을 게시하십시오! – marcwho

답변

1

자, TERM 환경 변수를 적절히 설정하지 않고 응용 프로그램을 시작 했으므로 초기화 루틴 중에 원격 운영 체제가 색상을 지원할 수있는 터미널과 통신하지 않는다고 판단했습니다.

제대로 설정 했으므로 색상이 올바르게 작동합니다. 축하해! 그러나 애플리케이션 내부에 설정하는 것은 대단한 트릭입니다. 이것은 응용 프로그램을 시작하기 전에 설정해야하기 때문입니다. 그렇지 않으면 응용 프로그램이 시작될 때 연결중인 저수준 라이브러리가 "환경"에 쿼리하여 어떤 종류의 터미널인지 확인하고 어떤 종류의 터미널 코드가 응용 프로그램에서 생성되는지 결정합니다.

앱이 시작되기 전에 모두 발생합니다. 그래서, 효과적으로, 당신은 당신의 어플리케이션으로부터 그것을 실제로 할 수 없습니다. 그러나 실제 솔루션은 좀 더 흥미 롭습니다.

SSH는 원격 시스템의 디스플레이 기능에 대해 거의 가정하지 않습니다. 이 문제를 "고치는"가장 좋은 방법은 SSH 클라이언트가 SSH 클라이언트의 기능에 따라 터미널 유형을 설정하게하는 것입니다. "더 나은"터미널 유형을 전달할 수 있는지 ssh 클라이언트 구성을 확인하십시오.

실제로 호스트 운영 체제를 사용하면 클라이언트의 기능이 문제를 일으킬 것이라고 가정합니다. 그러나 모든 ssh 클라이언트가 터미널 기능을 적절히 전달하도록 구성해야한다는 것은 논리적으로 불가능합니다. 따라서 타협을하려고 할 수 있습니다. ssh 서버 시스템에서 "래퍼 스크립트"를 삭제하여 컬러 터미널 스크립트로 응용 프로그램을 시작하십시오.

#!/bin/sh 
TERM=xterm-256color 
export TERM 
exec launch-app "[email protected]" 

과 같이 표시되며 launch-app-color 또는 비슷한 것으로 저장됩니다.