เป็นไปได้ไหมที่จะตั้งชื่อของ Gnome Terminal เป็น“ user @ host” สำหรับโฮสต์ใดก็ตามที่ฉันเชื่อมต่ออยู่


22

ฉันต้องการตั้งค่าชื่อเทอร์มินัลเป็นuser@hostเพื่อให้ฉันสามารถบอกได้อย่างง่ายดายว่าเครื่องใดที่ฉันเชื่อมต่อกับจากชื่อหน้าต่าง มีวิธีทำสิ่งนี้จาก SSH หรือจากเทอร์มินัล GNOME หรือไม่?

คำตอบ:


20

ใช่. นี่คือตัวอย่างสำหรับการทุบตีโดยใช้ PS1 ที่ควรเป็นผู้ไม่เชื่อเรื่องพระเจ้า:

โดยเฉพาะอย่างยิ่งลำดับการหลบหนี\[\e]0; __SOME_STUFF_HERE__ \a\]เป็นสิ่งที่น่าสนใจ ฉันได้แก้ไขสิ่งนี้เพื่อตั้งค่าตัวแปรแยกต่างหากเพื่อความชัดเจนมากขึ้น

# 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

นอกจากนี้โปรดทราบว่าสามารถตั้งค่าชื่อ xterm ได้หลายวิธีขึ้นอยู่กับว่าโปรแกรมเทอร์มินัลใดที่คุณใช้อยู่และเชลล์ตัวใด ตัวอย่างเช่นหากคุณใช้ Konsole ของ KDE คุณสามารถแทนที่การตั้งค่าชื่อได้โดยไปที่Settings-> Configure Profiles-> Edit Profile-> Tabsและตั้งค่าTab title formatและRemote tab title formatการตั้งค่า

กล่องโต้ตอบการตั้งค่าแถบหัวเรื่อง Konsole

นอกจากนี้คุณอาจต้องการตรวจสอบ:


ดังนั้นฉันต้องตั้งค่านี้ในเซิร์ฟเวอร์ทั้งหมดที่ฉันกำลังเชื่อมต่อหรือบนเครื่องของตัวเองหรือไม่
Naftuli Kay

@TKKocheran: คุณต้องทำสิ่งนี้กับทุก ๆ เครื่องที่คุณใช้เชลล์ หากคุณต้องการทำเพื่อการเข้าสู่ระบบจากระยะไกลให้ใส่\hข้อความดังกล่าวเฉพาะในกรณีที่$SSH_CLIENTไม่ว่างเปล่า
Gilles 'หยุดความชั่วร้าย'

@TK: ใช่คุณจะต้องตั้งค่านี้ในเซิร์ฟเวอร์ทั้งหมดที่คุณเชื่อมต่อ ตัวแปร PS1 อยู่ภายในเปลือกปัจจุบันของคุณ (แม้ในพื้นที่ห่างไกล) ไม่ได้เป็นโปรแกรมมินัล(เช่น: gnome-Terminal)
TrinitronX

ฉันคิดว่าสิ่งนี้จะใช้กับเซิร์ฟเวอร์ที่ไม่ได้ใช้ Debian คุณสามารถแก้ไขคำตอบของคุณสำหรับเซิร์ฟเวอร์ที่ใช้งานได้หรือไม่สมมติว่าสัญญาซื้อขาย Fedora / Red Hat
Naftuli Kay

1
@TK: ผมทดสอบนี้โดยใช้ SSH ไปยังโฮสต์ต่างๆจากเครื่อง Ubuntu 11.04 ... ดังนั้นแถบชื่อที่ถูกตั้งอย่างถูกต้องมี ... \[\e]2;\u@\h\aถ้ามันไม่ทำงานลองเพิ่มลำดับนี้ไปข้างหน้า: (แก้ไขการตอบกลับของฉันด้วยข้อมูลนั้นด้วย)
TrinitronX

3

ต่อไปนี้เป็นเวอร์ชันของสคริปต์ทุบตี SSH ที่ฉันใช้ซึ่งตั้งค่าชื่อเซิร์ฟเวอร์และพรอมต์คำสั่งโดยไม่ทำการเปลี่ยนแปลงใด ๆ กับเซิร์ฟเวอร์ระยะไกล

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"

คุณสามารถเรียกใช้โดยการเรียกชื่อโฮสต์. / my_ssh.sh


ฉันสงสัยงานนี้เมื่อเริ่มต้นเซสชั่นทุบตีอีกครั้งหลังจากที่เข้าสู่ระบบ SSH แม้ว่า (เช่นเมื่อใช้หน้าจอ)
ลอเรน Rietveld

1

การทำงานต่อไปนี้สำหรับฉัน (อาจใช้เฉพาะกับ gnome-terminal):

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

โดยที่คำสั่ง ssh_bkup เป็นเพียง 'ssh' พื้นฐานที่มีชื่อที่เปลี่ยนแปลงซึ่งถูกเรียกใช้ทันทีหลังจากคำสั่ง echo เปลี่ยนชื่อของเทอร์มินัลปัจจุบัน


โซลูชันนามแฝงจะไม่ดีไปกว่าการเปลี่ยนชื่อคำสั่งเป็นสิ่งที่ไม่ได้มาตรฐานใช่หรือไม่
X Tian

มันใช้งานได้ดีสำหรับฉันเช่นกันคำพังเพยขั้ว ~/binมีความสำคัญในเส้นทางของฉันดังนั้นฉันวางสคริปต์ของคุณในของฉัน~/bin/sshมีความสำคัญในเส้นทางของฉันดังนั้นฉันวางสคริปต์ของคุณในของฉันแถวสุดท้ายเรียกอย่างชัดเจนว่า/usr/bin/sshแถวสุดท้ายอย่างชัดเจนเรียกร้องให้ด้วยวิธีนี้ผู้ใช้รายอื่นยังคงใช้มาตรฐานsshเมื่อลงชื่อเข้าใช้ในเครื่องนั้นและ (เนื่องจากไดเรกทอรีหลักของเราอยู่บนเซิร์ฟเวอร์บัญชี LDAP) ฉันจะได้รับฟังก์ชันการทำงานที่เครื่องที่ฉันลงชื่อเข้าใช้
Gauthier

โทรดี @Gauthier ดูเหมือนทางออกที่ดีกว่า
Yuriy Mankovskiy

0

นี่เป็นรุ่นนามแฝง

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'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.