È possibile impostare il titolo di Gnome Terminal su "user @ host" per qualsiasi host a cui sono connesso?


22

Vorrei impostare il titolo del terminale in user@hostmodo da poter facilmente capire a quale macchina sono connesso dal titolo della finestra. C'è un modo per farlo da SSH o dal Terminale GNOME?

Risposte:


20

Sì. Ecco un esempio per bash usando PS1 che dovrebbe essere distro-agnostico:

In particolare, la sequenza di escape \[\e]0; __SOME_STUFF_HERE__ \a\]è interessante. Ho modificato questo per essere impostato in una variabile separata per maggiore chiarezza.

# 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

Si noti inoltre che ci possono essere molti modi per impostare il titolo di un xterm, a seconda del programma terminale in uso e della shell. Ad esempio, se stai usando Konsole di KDE, puoi ignorare l'impostazione del titolo andando su Settings-> Configure Profiles-> Edit Profile-> Tabse impostando le impostazioni Tab title formate Remote tab title format.

Finestra di dialogo delle impostazioni della barra del titolo di Konsole

Inoltre, potresti voler controllare:


Quindi devo impostarlo su tutti i server a cui mi sto collegando o sul mio computer locale?
Naftuli Kay,

@TKKocheran: devi farlo su ogni macchina su cui stai eseguendo una shell. Se vuoi farlo solo per gli accessi remoti, inserisci \hquel prompt solo se $SSH_CLIENTnon è vuoto.
Gilles 'SO- smetti di essere cattivo'

@TK: Sì, dovrai impostarlo su tutti i server a cui ti connetti. La variabile PS1 è locale nella shell corrente (anche su un host remoto), non nel programma terminale (es. Gnome-terminal) .
TrinitronX,

Presumo che questo si applicherà in modo diverso sui server che non eseguono Debian. Puoi modificare la tua risposta per fornire server che eseguono, diciamo, i derivati ​​Fedora / Red Hat?
Naftuli Kay,

1
@TK: ho provato questo usando SSH a vari host da una macchina Ubuntu 11.04 ... Quindi la barra del titolo è stato impostato correttamente lì ... Se non funziona, prova ad aggiungere questa sequenza al fronte: \[\e]2;\u@\h\a. (Ho anche modificato la mia risposta con quelle informazioni)
TrinitronX

3

Ecco una versione dello script bash SSH che uso che imposta il titolo e il prompt dei comandi del server remoto senza apportare modifiche al server remoto.

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"

Puoi invocarlo chiamando ./my_ssh.sh username nome host


Dubito che questo funzioni quando si avvia un'altra sessione bash dopo il login ssh (ad esempio quando si utilizza screen)
Laurens Rietveld

1

Quanto segue funziona per me (probabilmente solo su gnome-terminal):

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

Dove il comando ssh_bkup è semplicemente "ssh" di base con un nome modificato, che viene chiamato subito dopo che il comando echo modifica il titolo del terminale corrente.


una soluzione alias non sarebbe meglio che rinominare i comandi in qualcosa di non standard?
X Tian,

Questo funziona bene per me, anche gnome-terminal. ~/binha priorità nel mio percorso, quindi ho inserito la tua sceneggiatura nel mio ~/bin/ssh. L'ultima riga chiama esplicitamente a /usr/bin/ssh. In questo modo, altri utenti usano ancora lo standard sshquando hanno effettuato l'accesso su quella macchina e (poiché le nostre home directory sono sul server, account LDAP) ottengo la funzionalità su qualunque macchina a cui ho effettuato l'accesso.
Gauthier,

Buona chiamata, @Gauthier. Sembra una soluzione migliore.
Yuriy Mankovskiy,

0

questa è la versione alias

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'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.