내가 연결된 호스트에 대해 Gnome Terminal의 제목을 "user @ host"로 설정할 수 있습니까?


22

터미널 제목을 설정 user@host하여 창 제목에서 연결된 컴퓨터를 쉽게 확인할 수 있습니다. SSH 또는 그놈 터미널에서이를 수행 할 수있는 방법이 있습니까?

답변:


20

예. 다음은 PS1을 사용하는 bash의 예입니다.

구체적으로, 이스케이프 시퀀스 \[\e]0; __SOME_STUFF_HERE__ \a\]가 중요하다. 더 명확하게하기 위해 별도의 변수로 설정되도록 이것을 편집했습니다.

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

TITLEBAR='\[\e]0;\u@\h\a\]'
# Same thing.. but with octal ASCII escape chars
#TITLEBAR='\[\033]2;\u@\h\007\]'

if [ "$color_prompt" = yes ]; then
    PS1="${TITLEBAR}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ "
else
    PS1="${TITLEBAR}\u@\h:\W\$ "
fi
unset color_prompt force_color_prompt

또한 사용중인 터미널 프로그램 및 쉘에 따라 xterm 제목을 설정하는 방법에는 여러 가지가있을 수 있습니다. 예를 들어 KDE의 Konsole을 사용하는 경우 Settings-> Configure Profiles-> Edit Profile->로 이동 Tabs하여 Tab title formatRemote tab title format설정을 지정하여 제목 설정을 재정의 할 수 있습니다 .

Konsole 제목 표시 줄 설정 대화 상자

또한 다음을 확인하십시오.


연결하려는 모든 서버 또는 내 로컬 컴퓨터에서 이것을 설정해야합니까?
Naftuli Kay

@TKKocheran : 쉘을 실행하는 모든 머신에서이 작업을 수행해야합니다. 원격 로그인 \h에만 사용하려면 $SSH_CLIENT비어 있지 않은 경우에만 해당 프롬프트를 입력하십시오 .
Gilles 'SO- 악의를 멈추십시오'21:19의

@TK : 예, 연결하는 모든 서버에서 설정해야합니다. PS1 변수는 터미널 프로그램 (예 : gnome-terminal)이 아닌 현재 쉘 (원격 호스트에서도)에 로컬 입니다.
TrinitronX 2016 년

데비안을 실행하지 않는 서버에서는 다르게 적용될 것이라고 생각합니다. Fedora / Red Hat 파생 상품을 실행하는 서버를 제공하기 위해 답변을 편집 할 수 있습니까?
Naftuli Kay

1
@ TK : 우분투 11.04 컴퓨터에서 다양한 호스트로 SSH를 사용하여 이것을 테스트했습니다 ... 그래서 제목 표시 줄이 올바르게 설정되었습니다 ... 작동하지 않으면이 시퀀스를 앞에 추가하십시오 : \[\e]2;\u@\h\a. (또한 해당 정보로 내 답변을 편집 함)
TrinitronX

3

다음은 원격 서버를 변경하지 않고 원격 서버의 제목과 명령 프롬프트를 설정하는 SSH bash 스크립트 버전입니다.

my_ssh.sh:

#!/bin/bash
SETTP='MY_PROMPT="$HOSTNAME:$PWD\$ "'
SETTP="$SETTP;"'MY_TITLE="\[\e]0;$HOSTNAME:$PWD\a\]"'
SETTP="$SETTP;"'PS1="$MY_TITLE$MY_PROMPT"'
ssh -t $1@$2 "export PROMPT_COMMAND='eval '\\''$SETTP'\\'; bash --login"

./my_ssh.sh username hostname을 호출하여 호출 할 수 있습니다.


비록 ssh 로그인 후 다른 bash 세션을 시작할 때 이것이 작동하는지 의심합니다 (예 : 화면을 사용할 때)
Laurens Rietveld

1

다음은 저에게 효과적입니다 (아마도 그놈 터미널에서만 가능합니다).

comp@home$ cat /usr/bin/ssh
#!/bin/bash    
echo -ne "\033]0;${1}\007"
ssh_bkup "$@"

여기서 ssh_bkup 명령은 이름이 변경된 기본 'ssh'입니다. echo 명령은 현재 터미널의 제목을 변경 한 직후에 호출됩니다.


별명 솔루션이 명령을 비표준으로 이름을 바꾸는 것보다 낫지 않습니까?
X Tian

이것은 저놈 터미널에서도 잘 작동합니다. ~/bin내 경로에 우선 순위가 있으므로 스크립트를 내에 배치했습니다 ~/bin/ssh. 마지막 행은을 명시 적으로 호출합니다 /usr/bin/ssh. 이런 식으로 다른 사용자가 ssh해당 컴퓨터에 로그인 할 때 여전히 표준을 사용 하며 (홈 디렉토리가 서버, LDAP 계정에 있기 때문에) 내가 로그인 한 컴퓨터의 기능을 얻습니다.
Gauthier

잘 부탁합니다, @Gauthier. 더 나은 솔루션 인 것 같습니다.
Yuriy Mankovskiy 2016

0

이것은 별칭 버전입니다

SETTP='MY_PROMPT="$HOSTNAME:$PWD\$ "'
SETTP="$SETTP;"'MY_TITLE="\[\e]0;$HOSTNAME:$PWD\a\]"'
SETTP="$SETTP;"'PS1="$MY_TITLE$MY_PROMPT"'
SETPC="export PROMPT_COMMAND='eval '\\''$SETTP'\\'; bash --login"

alias myssh='function _myssh(){ ssh -t $1@$2 $SETPC; };_myssh'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.