Czy można ustawić tytuł Gnome Terminal na „user @ host” dla dowolnego hosta, z którym jestem podłączony?

22

Chciałbym ustawić tytuł terminalu na, user@hostdzię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?

Naftuli Kay
źródło

Odpowiedzi:

20

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-> Tabsi ustawiając ustawienia Tab title formati Remote tab title format.

Okno dialogowe ustawień paska tytułu Konsoli

Ponadto możesz sprawdzić:

TrinitronX
źródło
Czy muszę to ustawić na wszystkich serwerach, z którymi się łączę, lub na własnym komputerze lokalnym?
Naftuli Kay
@TKKocheran: Musisz to zrobić na każdym komputerze, na którym działa powłoka. Jeśli chcesz to zrobić tylko dla logowania zdalnego, wstaw \hten monit tylko wtedy, gdy $SSH_CLIENTnie jest pusty.
Gilles „SO- przestań być zły”
@TK: Tak, musisz ustawić to na wszystkich serwerach, z którymi się łączysz. Zmienna PS1 jest lokalna dla bieżącej powłoki (nawet na zdalnym hoście), a nie w programie terminalowym (np .: gnome-terminal) .
TrinitronX
Zakładam, że będzie to miało inne zastosowanie na serwerach, na których Debian nie działa. Czy możesz edytować swoją odpowiedź, aby zapewnić obsługę serwerów, powiedzmy, pochodnych Fedora / Red Hat?
Naftuli Kay
1
@TK: Przetestowałem to za pomocą SSH do różnych gospodarzy od 11.04 Ubuntu ... Więc pasek tytułowy prawidłowo ustawione tam ... Jeśli to nie działa, spróbuj dodać tę sekwencję do przodu: \[\e]2;\u@\h\a. (Edytowałem także moją odpowiedź z tymi informacjami)
TrinitronX
3

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

Austin Beer
źródło
Wątpię, to działa podczas uruchamiania bash po kolejną sesję ssh logowania chociaż (na przykład podczas korzystania z ekranu)
Laurens Rietveld
1

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.

Jurij Mankowski
źródło
czy rozwiązania aliasowe nie byłyby lepsze niż zmiana nazw poleceń na coś niestandardowego?
X Tian
To działa dobrze dla mnie, również gnome-terminal. ~/binma 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 sshpo 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.
Gauthier
Dobra rozmowa, @Gauthier. Wydaje się lepsze rozwiązanie.
Yuriy Mankovskiy
0

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'
Pasquale
źródło