Chciałbym ustawić tytuł terminalu na, user@host
dzięki czemu mogę łatwo określić, z którego komputera jestem podłączony, z tytułu okna. Czy można to zrobić z SSH lub z terminalu GNOME?
Chciałbym ustawić tytuł terminalu na, user@host
dzięki czemu mogę łatwo określić, z którego komputera jestem podłączony, z tytułu okna. Czy można to zrobić z SSH lub z terminalu GNOME?
Odpowiedzi:
Tak. Oto przykład bash przy użyciu PS1, który powinien być distro-agnostyczny:
Szczególnie \[\e]0; __SOME_STUFF_HERE__ \a\]
interesująca jest sekwencja ucieczki . Zedytowałem to, aby ustawić w osobnej zmiennej dla większej przejrzystości.
# 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
Zauważ również, że istnieje wiele sposobów ustawiania tytułu xterma, w zależności od używanego programu terminalowego i powłoki. Na przykład, jeśli używasz Konsoli KDE, możesz przesłonić ustawienie tytułu, przechodząc do Settings
-> Configure Profiles
-> Edit Profile
-> Tabs
i ustawiając ustawienia Tab title format
i Remote tab title format
.
Ponadto możesz sprawdzić:
\h
ten monit tylko wtedy, gdy $SSH_CLIENT
nie jest pusty.
\[\e]2;\u@\h\a
. (Edytowałem także moją odpowiedź z tymi informacjami)
Oto wersja skryptu bash SSH, którego używam, który ustawia tytuł i wiersz polecenia serwera zdalnego bez wprowadzania zmian na serwerze zdalnym.
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"
Możesz go wywołać, dzwoniąc ./my_ssh.sh nazwa użytkownika nazwa hosta
Poniższe działa dla mnie (prawdopodobnie tylko na terminalu gnome):
comp@home$ cat /usr/bin/ssh
#!/bin/bash
echo -ne "\033]0;${1}\007"
ssh_bkup "$@"
Gdzie polecenie ssh_bkup jest po prostu podstawowym „ssh” o zmienionej nazwie, które jest wywoływane zaraz po tym, jak polecenie echo zmienia tytuł bieżącego terminala.
~/bin
ma priorytet na mojej ścieżce, więc umieściłem twój skrypt w moim ~/bin/ssh
. Ostatni wiersz wyraźnie wzywa do /usr/bin/ssh
. W ten sposób inni użytkownicy nadal korzystają ze standardu ssh
po zalogowaniu na tym komputerze i (ponieważ nasze katalogi domowe znajdują się na serwerze, na kontach LDAP) uzyskuję funkcjonalność na każdym komputerze, na którym jestem zalogowany.
to jest wersja aliasowa
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'