Apakah mungkin untuk mengatur judul Terminal Gnome menjadi “user @ host” untuk host apa pun yang terhubung dengan saya?

22

Saya ingin mengatur judul terminal user@hostsehingga saya dapat dengan mudah mengetahui mesin mana yang saya hubungkan dari judul jendela. Apakah ada cara untuk melakukan ini dari SSH atau dari Terminal GNOME?

Naftuli Kay
sumber

Jawaban:

20

Iya nih. Berikut ini contoh untuk bash menggunakan PS1 yang seharusnya distro-agnostic:

Secara khusus, urutan pelariannya \[\e]0; __SOME_STUFF_HERE__ \a\]menarik. Saya telah mengedit ini untuk diatur dalam variabel terpisah untuk kejelasan lebih lanjut.

# 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

Perhatikan juga bahwa ada banyak cara untuk mengatur judul xterm, tergantung pada program terminal yang Anda gunakan, dan shell mana. Misalnya, jika Anda menggunakan Konsole KDE, Anda dapat mengganti pengaturan judul dengan membuka Settings-> Configure Profiles-> Edit Profile-> Tabsdan mengatur pengaturan Tab title formatdan Remote tab title format.

Dialog pengaturan titlebar konsole

Selain itu, Anda mungkin ingin memeriksa:

TrinitronX
sumber
Jadi apakah saya perlu mengatur ini di semua server yang saya hubungkan ke atau pada mesin lokal saya sendiri?
Naftuli Kay
@TKKocheran: Anda perlu melakukan ini di setiap mesin tempat Anda menjalankan shell. Jika Anda hanya ingin melakukannya untuk login jarak jauh, masukkan \hprompt itu hanya jika $SSH_CLIENTtidak kosong.
Gilles 'SANGAT berhenti menjadi jahat'
@TK: Ya, Anda harus mengatur ini di semua server yang terhubung. Variabel PS1 adalah lokal untuk shell Anda saat ini (bahkan pada host jarak jauh), bukan program terminal (yaitu: gnome-terminal) .
TrinitronX
Saya berasumsi bahwa ini akan berlaku berbeda pada server yang tidak menjalankan Debian. Bisakah Anda mengedit jawaban Anda untuk menyediakan server yang berjalan, katakanlah, turunan Fedora / Red Hat?
Naftuli Kay
1
@TK: Saya menguji menggunakan SSH ke berbagai host dari Ubuntu 11.04 mesin ... Jadi judul bar ditetapkan dengan benar ada ... Jika tidak bekerja, coba tambahkan urutan ini ke depan: \[\e]2;\u@\h\a. (Juga diedit tanggapan saya dengan info itu)
TrinitronX
3

Berikut adalah versi skrip bash SSH yang saya gunakan yang mengatur judul dan command prompt server jarak jauh tanpa membuat perubahan apa pun ke server jarak jauh.

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"

Anda dapat memintanya dengan memanggil nama host nama pengguna ./my_ssh.sh

Austin Beer
sumber
Saya ragu ini bekerja ketika memulai sesi bash lain setelah login ssh (misalnya ketika menggunakan layar)
Laurens Rietveld
1

Berikut ini berfungsi untuk saya (mungkin hanya di terminal gnome):

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

Di mana perintah ssh_bkup hanyalah dasar 'ssh' dengan nama yang diubah, yang dipanggil tepat setelah perintah echo mengubah judul terminal saat ini.

Yuriy Mankovskiy
sumber
bukankah solusi alias lebih baik daripada mengganti nama perintah menjadi sesuatu yang tidak standar?
X Tian
Ini berfungsi dengan baik untuk saya, juga gnome-terminal. ~/binmemiliki prioritas di jalur saya, jadi saya menempatkan skrip Anda di blog saya ~/bin/ssh. Baris terakhir secara eksplisit memanggil /usr/bin/ssh. Dengan cara ini, pengguna lain masih menggunakan standar sshsaat login di mesin itu, dan (karena direktori home kami ada di server, akun LDAP) saya mendapatkan fungsionalitas di mesin mana pun saya masuk.
Gauthier
Panggilan bagus, @Gauthier. Tampaknya solusi yang lebih baik.
Yuriy Mankovskiy
0

ini adalah versi 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'
Pasquale
sumber