Başka bir makineye SSH uzaktan oturum açtıktan sonra terminal başlığını düzeltme


18

şu anda terminal çubuklarımın başlıklarını değiştirmek için tek satırlık bir perl kodu kullanıyorum,

print("\e]0;@ARGV\7");

ancak başka bir uzak makineye ssh yaptıktan sonra, başlık ana bilgisayar tarafından değiştirilecek (özellikle rahatsız olmadığım). Ancak bağlantıdan çıktıktan sonra değiştirilen başlık kalır. Bunu düzeltmenin bir yolu var mı? aslında yerel olarak çalışırken terminallerim için sabit bir başlık istiyorum.

Öncelikle CentOS veya Debian altında xfce terminali ve sonlandırıcı kullanıyorum. Teşekkürler.

DÜZENLE

Başka bir incelik, tüm terminallere aynı ada sahip olmak yerine, başlıklarını anında düzenleme özgürlüğüne sahip olmayı tercih ediyorum, ancak yalnızca SSH oturumunun düzenlediğim şeyi değiştirmesini yasaklıyor.

Yanıtlar:


6

Pencere başlıkları hakkında bilmiyorum, ama sistemimin bir ssh oturumunu sonlandırmak için bir şeyler yapmasını sağlamaya çalışıyorum - aslında, bir ssh oturumunu sonlandırdıktan sonra. Kısacası: böyle çalışmaz. Temel olarak üç seçeneğiniz vardır:

  1. Ssh çevresine bir sarıcı yazın, yani, ortasında bir yerde satırı içeren $ PATH değerinde sshöncelikli olarak adlandırılan yürütülebilir bir kabuk betiği /usr/bin/sshyazın exec /usr/bin/ssh $@. Bu, etkin ssh ikili dosyası çalıştırılmadan önce ve sonra kabuğunuzun bazı şeyleri yapmasını sağlarken, baş aşağıyı minimumda tutar.

  2. Komut satırı veya bazı yapılandırma ayarlarından geçirilen bir kabuk komutunu yürüten bir temizleme kancası sağlamak için seçtiğiniz SSH kaynaklarına karşı bir yama yazın. İstediğimiz bu.

  3. Çıktısını PROMPT_COMMANDdeğerlendirir history. Temelde 1'e daha genel ve daha çirkin bir yaklaşım.


temelde ben sadece mevcut başlığı kapmak ve SSH oturumdan önce kaydetmek, daha sonra başlığı kurtarmak için basit bir komut dosyası yazdı.
nye17

4
@ nye17 Kullandığınız çözüm betiğinizi gönderebilir misiniz?
Reg Mem

Çözüm betiğimi aşağıya gönderdim. @ nye17'nin yaptıklarıyla yakın bir eşleşme olmalıdır. unix.stackexchange.com/a/341277/112190
Filipinler

7

Çözüm: ssh ve su komutlarından sonra bir şeyler yapmak için ~ / .bashrc işlevlerini ekleyin

function title()
{
   # change the title of the current window or tab
   echo -ne "\033]0;$*\007"
}

function ssh()
{
   /usr/bin/ssh "$@"
   # revert the window title after the ssh command
   title $USER@$HOST
}

function su()
{
   /bin/su "$@"
   # revert the window title after the su command
   title $USER@$HOST
}

Not: ~ / .bashrc düzenlemelerinden sonra bash'ı yeniden başlatın

Misal:

# title is "user1@boxA"
ssh boxB  # auto changes title while on boxB to "user1@boxB"
exit
# title returns back to "user1@boxA" because of our title call in ssh()
su - user2 # auto changes title while switched user to user2: "user2@boxA"
exit
# title returns back to "user1@boxA" because of our title call in su()

Umarım yardımcı olur.


daha revertönce ne olduğunu kontrol etmeyin gibi söylemek biraz yanlış ... eğer sorguladı ve önceki değeri tho ;-)
nhed 23:17

4

Yerel kabuk nokta dosyanızı (ör $PROMPT_COMMAND. İçinde ~/.bashrc), aynı mekanizmayı kullanarak terminal başlığını uygun şekilde ayarlamak için yapılandırın .

Örneğin:

export PROMPT_COMMAND="printf '\e]0;bash\7\n'"

1. prompt_command'ın terminal pencerenizin başlığını yapacak bir şeyi yok, değil mi? Istemi_komut ayarladım ama sadece bilgi istemi için. 2. ssh günlüğünden çıktıktan sonra yerel ayarımı hatırlamak ve etkinleştirmek için hala bir mekanizmaya ihtiyacım var.
nye17

İstem komutu, terminalinizin başlık çubuğunu yeniden adlandırması için gerekli çıkış sırasını yayar. :)
Monica

ama aynı zamanda her oturumda aynı adı kullanmak yerine istediğim terminali yeniden adlandırma özgürlüğü istiyorum. Uygulamada, temel olarak terminal başlık kılavuzunu düzenledim ve SSH giriş / çıkışından sonra bile terminalin sabit başlıkta kalmasını umuyorum. Mantıklı geliyor?
nye17

1
Sonra istenen başlığı bir değişkene koyun ve çıktısını alın.
Ignacio Vazquez-Abrams

Boş bir başlık (ör. export PROMPT_COMMAND="printf '\e]0;\7\n'") Ayarlamak için bu terminal kaçış sırasını kullanırsanız , terminal öykünücünüz pencere başlığını uygun görecek şekilde ayarlayabilir. Terminal başlığını ayarlayan uzak bir ana bilgisayara ssh yaptığınızda, terminal öykünücünüz bu başlığı gösterecek ve oturumu kapattığınızda kendi başlığını kullanmaya geri dönecektir. En azından macOS Terminal uygulaması böyle çalışır.
claymation

3

Bu satırları ~ / .bashrc'e EKLE

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

    ;;
*)
    ;;
esac

debian tabanlı linuxes ile iyi çalışır


1
Yine de başlığı
koymadı

Basamaklama eklemek zorunda olmadığınızdan ve bazı alıntıları ortadan kaldırabildiğinden , kullanmak PROMPT_COMMANDyerine genellikle daha iyi çalışır . PS1\[ \]
Chris Page

2

Bir çözüm, ssh'ing'den önce terminal değişkenini vt100 olarak değiştirmek, örn.

export TERM=vt100

Bu işe yarar çünkü genellikle başlatma komut dosyaları terminal değişkenine bakar ve sadece başlık xterm olarak değiştirir. Alternatif ekranları, renkleri ve belki takdir edebileceğiniz veya takdir edemeyeceğiniz diğer bazı fantezi özellikleri kaybedersiniz.

Yerel terminali xterm olarak tutmak istiyorsanız, terminal değişkenini anında değiştirmek için

alias ssh='TERM=vt100 /usr/bin/ssh'

her şeyin görüntülenme şeklini değiştirir. renkler gösterilmiyor
npk

0

Bu sorunu .bashrc dosyamdaki PS1'ime ekleyerek çözdüm.

\[\e]2;\u@\H:\w\a\]

Bu nedenle tüm çizgi şu şekilde görünüyor (PS'mi özelleştirdim !:

export PS1='\[\e]2;\u@\H:\w\a\]\n($LOGNAME@$HOSTNAME) \t\n[$PWD]: '

Umarım bu başkalarına yardımcı olur.


Boş bir başlık (ör. export PS1='\[\033]0;\007\]\h:\W \u\$ ') Ayarlamak için bu terminal kaçış sırasını kullanırsanız , terminal öykünücünüz pencere başlığını uygun görecek şekilde ayarlayabilir. Terminal başlığını ayarlayan uzak bir ana bilgisayara ssh yaptığınızda, terminal öykünücünüz bunu gösterir ve oturumu kapattığınızda kendi başlığını kullanmaya geri döner. En azından macOS Terminal uygulaması böyle çalışır.
claymation

0

SSH'den çıktığımda diğer cevaplar benim için işe yaramazdı, ama beni yaklaştırdı. Uzaktan ssh oturumundan çıktığımda setw otomatik yeniden adlandırma eklemek otomatik olarak yeniden adlandırır ve sıfırlamak için artık pencereden çıkmak zorunda kalmaz. [Ocak 2018 - Debian 9]

ssh() {
tmux rename-window "$*"
command ssh "$@"
tmux setw automatic-rename
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.