화면을 사용할 때 xterm (PuTTY) 창 제목을 설정 하시겠습니까?


12

타이틀 screen을 설정 하려고합니다 xterm. 이 작업은 외부에서 작동 screen하지만 screen시작했을 때의 제목을 유지합니다. 여기 내 .bashrc:

함수 bash_prompt_command () {
    # $ PWD의 몇 문자를 유지해야 하는가
    로컬 pwdmaxlen = 25
    # 디렉토리가 잘렸다는 것을 나타냅니다.
    로컬 trunc_symbol = ".."
    로컬 디렉토리 = $ {PWD ## * /}
    pwdmaxlen = $ (((pwdmaxlen <$ {# dir})? $ {# dir} : pwdmaxlen))
    NEW_PWD = $ {PWD / # $ HOME / \ ~}
    로컬 pwdoffset = $ (($ {# NEW_PWD}-pwdmaxlen))
    [$ {pwdoffset} -gt "0"] 인 경우
    그때
        NEW_PWD = $ {NEW_PWD : $ pwdoffset : $ pwdmaxlen}
        NEW_PWD = $ {trunc_symbol} / $ {NEW_PWD # * /}
    fi

    NEW_PWD 내보내기
}

PROMPT_COMMAND = bash_prompt_command
# 컬러 차트 @ http://wiki.archlinux.org/index.php/Color_Bash_Prompt
"$ {TERM}"사례
    "xterm")
        TITLEBAR = '\ [\ 033] 0; \ u @ \ h> $ {NEW_PWD} \ 007 \]'
        PS1 = "$ {TITLEBAR} \ [\ e [1; 32m \] [\ e [0; 36m \] \ u \ e [1; 32m \] @ \ e [1; 33m \] \ h \ e [ 1; 32m \]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ \ [\ e [0m "
        ;;
    "화면")
        TITLEBAR = '\ [\ 033] 0; \ u @ \ h> $ {NEW_PWD} \ 007 \]'
        ESC = '\ [\ ek \ e \\\]'
        PS1 = "$ {TITLEBAR} \ [\ e [1; 32m \] [\ e [0; 36m \] \ u \ e [1; 32m \]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ $ {ESC} \ [\ e [0m "
        ;;
    *)
        PS1 = "\ [\ e [1; 32m \] [\ e [0; 36m \] \ u \ e [1; 32m \] @ \ e [1; 33m \] \ h \ e [1; 32m \ ]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ \ [\ e [0m "
    ;;
esac

그리고 여기 내 것이 있습니다 .screenrc:

hardstatus alwayslastline
hardstatus 문자열 '% {= kg} [% {Y} % H % {g}] [% = % {= kw} %? %-Lw %? % {= b kR} (% {W} % n- % t %? (% u) %? % {= b kR}) % {= kw} %? % + Lw %? %? % = % {g}] [% {Y} % l % {g}] % {g} [% {B} % m. % d. % Y % {G} % c % {g}] '

termcapinfo xterm | xterms | xs | rxvt ti @ : te @
termcapinfo xterm 'hs : ts = \ E] 2; : fs = \ 007 : ds = \ E] 2; screen \ 007'

대체 화면
셸 제목 '$ | bash'

내가 뭘 잘못하고 있니?

업데이트 (2010 년 8 월 19 일) : 문제는를 설정할 때 화면에서 터미널 제목을 업데이트 할 수 없다는 것입니다 alwayslastline. 그래서 내 솔루션은 스크린 세션에 대한 미리 결정되고 유용한 제목을 포기하고 해결하는 것이 었습니다. 내 업데이트 .bashrchttp://bitbucket.org/jsumners/rcfiles/src.screenrc 에서 찾을 수 있습니다 .

답변:


4

이스케이프 코드는 화면에서 다릅니다 .

이 화면 밖 :

PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

내부 화면과 동일합니다.

PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME}: ${PWD}\033\\"'

사례 $ {TERM} = "screen"제목 표시 줄을 다음으로 변경

TITLEBAR='\[\033_\u@\h > ${NEW_PWD}\033\\\]'

문제를 해결할 것입니다.


작동하지 않습니다. 왜 그런지 모르겠습니다.
James Sumners

제목 을 설정 hardstatus alwayslastline하지 screen못하도록 설정 을 결정했습니다 . 이제 두 가지를 동시에 수행하는 방법을 알아낼 수 있다면. screenxterm
James Sumners

hardstatus에 % t (제목에 대한)가 포함되어 있습니까?
crb

아니. 그냥 제거하고 같은 결과를 얻습니다. screen창 제목을 설정하고 프로그램을 시작 하는 별칭을 설정해야한다고 생각 합니다. 그런 다음을 사용하는 동안 동적 터미널 제목을 포기하십시오 screen. :(
James Sumners


7

실제로, 이스케이프 시퀀스를 화면을 통해 xterm으로 직접 보내는 방법이 있습니다. 찾기 쉽지는 않았지만 화면 코드 (src / ansi.c)에서 2005 년부터 존재했다고 생각합니다. xterm, Gnome Terminal 및 putty에서 작동하고 있습니다. 민트 소스에서 DCS를 처리하지 않기 때문에 단순히 작동하지 않는다는 메모를 발견했습니다 (최근에 수정되지 않은 경우).

아래 화면의 설명서에서 ( http://www.gnu.org/software/screen/manual/html_node/Control-Sequences.html )

ESC P (A) Device Control String
          Outputs a string directly to the host terminal without interpretation.

ANSI DCS (Device Control String)는 터미널로 직접 전송하는 데 사용되는 이스케이프 코드입니다 (수년 전의 원래 목적이라고 생각합니다). 이러한 문자열은 ST 이스케이프 코드 (문자열 종결 자)로 종료됩니다.

문자열을 줄 바꿈하여 터미널의 창 제목을 DCS..ST 블록 안에 설정하면 hardstatus alwayslastline이 있더라도 화면을 통해 올바르게 업데이트됩니다.

DCS = \ 033P, ST = \ 033 \

예-현재 작업 디렉토리로 창 제목을 업데이트하려면 다음을 사용하십시오.

NEW_TITLE="\033]0;${PWD/$HOME/~}\007"
echo -ne "\033P${NEW_TITLE}\033\\"

안하는 것보다 늦게하는 것이 낫다! 이것이 누군가를 돕기를 바랍니다.

화면 소스 변경에 대해 잘못 된 경우를 대비하여 최신 from screen-session git을 실행하고 있습니다. 그러나 로그 메시지의 날짜는 2005 년입니다 (화면 git repo를 복제하고 아래 명령을 사용하는 경우 DCS 처리와 관련하여 해당 커밋에 대한 변경 사항을 볼 수 있음).

git clone git://git.savannah.gnu.org/screen.git
git difftool e6618a14^! src/ansi.c

1

crb는 옳지 만

a) 그가 사용하는 이스케이프 코드는 나를 위해 작동하지 않습니다. \033k대신 이어야합니다 \033_. screen (1)아래를 참조하십시오 "TITLES (naming windows)". 따라서 다음과 같아야합니다.

PROMPT_COMMAND='echo -ne "\033k${USER}@${HOSTNAME}: ${PWD}\033\\"'

b) 이러한 종류의 이스케이프는 화면 창의 제목을 설정하는 데만 사용됩니다. 화면의 한 예는이에 표시되는 내용입니다, 그들 각각은 이름을 가지고, 여러 창을 가질 수 hardstatuscaptiont이스케이프 시퀀스.

c) xterm에 올바른 terminfo를 다음과 같이 설정하면 정상적인 bash 이스케이프가 작동합니다 .screenrc.

termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

(이것은 works on my machine퍼티 도 마찬가지 입니다)

따라서 화면 창과 퍼티 / xterm 제목 모두에 올바른 제목을 설정하려면 다음과 같이 사용하십시오.

XTERM_TITLE="${USER}@${HOSTNAME}: ${PWD}"
SCREEN_TITLE="${PWD}"
PROMPT_COMMAND='echo -ne "\033]0;$XTERM_TITLE\007\033k$SCREEN_TITLE\033\\"'

참조 : http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x395.html


1

질문에 완전히 대답하지는 않겠지 만 문제를 해결하는 방법을 제안하겠습니다. 많은 창 관리자가 EWMH 사양을 지원 합니다. wmctrl그들과 상호 작용할 수 있는 명령 줄 도구도 있습니다. 이 도구를 사용하면 다음 명령을 사용하여 활성 창의 제목을 쉽게 변경할 수 있습니다.

  wmctrl -r :ACTIVE: -T "FooTitle"

창 아이콘, 레이아웃 및 기타 속성을 변경할 수도 있습니다. Windows는 EWMH를 지원하지 않기 때문에 PuTTY에서는 작동하지 않을 수 있지만 대부분의 Linux 시스템에서는이를 허용해야합니다.

이 방법을 사용하면 사용 여부는 중요하지 screen않습니다.


0

지난 2 주 동안 많은 포럼을 검색했는데 질문에 대한 답변을 찾지 못했습니다.

퍼티 타이틀에 모든 명령 출력을 얻는 방법?

다른 프로그램이 서버의 일부 작업이 완료된 시점과 올바른지 잘못된지를 알기 위해 필요했습니다. Plink stdout과 stdin이 작동하지 않았기 때문에 대기 지연과 함께 많은 조정을 사용했으며 다른 명령에서는 작동하지 않는 명령을 사용했습니다. 해당 서버에 XSEL 및 XCLIP를 설치할 수 없습니다.

솔루션은 다음과 같습니다.

  1. 파일에서 명령 출력을 가져옵니다.
  2. 해당 파일을 제목으로 에코하십시오.

퍼티 클라이언트 및 수세 서버에서 다음과 같습니다.

ls /home | grep domagaja > logutoit.txt 
echo -e "\033]0\\;$(cat logutoit.txt)\\007\\c"

누군가가 이것을 사용할 수 있기를 바랍니다. 물론 모든 서버 유형 및 퍼티 클라이언트 설정에는 작동하지 않지만 아이디어는 잘 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.