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?

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ć:


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


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.


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'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.