Có thể đặt tiêu đề của Gnome Terminal thành người dùng trên máy chủ @ máy chủ cho bất kỳ máy chủ nào tôi kết nối không?


22

Tôi muốn đặt tiêu đề thiết bị đầu cuối thành user@hostđể tôi có thể dễ dàng biết tôi đang kết nối với máy nào từ tiêu đề cửa sổ. Có cách nào để làm điều này từ SSH hoặc từ Gnome Terminal không?

Câu trả lời:


20

Vâng. Đây là một ví dụ cho bash sử dụng PS1 nên không liên quan:

Cụ thể, trình tự thoát \[\e]0; __SOME_STUFF_HERE__ \a\]được quan tâm. Tôi đã chỉnh sửa nó để được đặt trong một biến riêng biệt để rõ ràng hơn.

# 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

Cũng lưu ý rằng có thể có nhiều cách để đặt tiêu đề của xterm, tùy thuộc vào chương trình thiết bị đầu cuối nào bạn đang sử dụng và vỏ nào. Ví dụ: nếu bạn đang sử dụng Konsole Konsole, bạn có thể ghi đè cài đặt tiêu đề bằng cách đi tới Settings-> Configure Profiles-> Edit Profile-> Tabsvà cài đặt Tab title formatRemote tab title formatcài đặt.

Hộp thoại cài đặt thanh tiêu đề Konsole

Ngoài ra, bạn có thể muốn kiểm tra:


Vì vậy, tôi có cần phải thiết lập điều này trên tất cả các máy chủ mà tôi đang kết nối hoặc trên máy cục bộ của mình không?
Naftuli Kay

@TKKocheran: Bạn cần thực hiện việc này trên mọi máy mà bạn đang chạy shell. Nếu bạn chỉ muốn làm điều đó cho đăng nhập từ xa, hãy đặt \hdấu nhắc đó chỉ khi $SSH_CLIENTkhông trống.
Gilles 'SO- ngừng trở nên xấu xa'

@TK: Có, bạn sẽ cần phải thiết lập điều này trên tất cả các máy chủ mà bạn kết nối. Biến PS1 là cục bộ cho trình bao hiện tại của bạn (ngay cả trên máy chủ từ xa), không phải chương trình đầu cuối (ví dụ: gnome-terminal) .
TrinitronX

Tôi giả định rằng điều này sẽ áp dụng khác nhau trên các máy chủ không chạy Debian. Bạn có thể chỉnh sửa câu trả lời của mình để cung cấp cho các máy chủ đang chạy không, giả sử, các công cụ phái sinh Fedora / Red Hat?
Naftuli Kay

1
@TK: Tôi đã thử nghiệm điều này bằng cách sử dụng SSH cho nhiều máy chủ khác nhau từ máy Ubuntu 11.04 ... Vì vậy, thanh tiêu đề đã được đặt chính xác ở đó ... Nếu nó không hoạt động, hãy thử thêm chuỗi này vào phía trước : \[\e]2;\u@\h\a. (Cũng chỉnh sửa phản hồi của tôi với thông tin đó)
TrinitronX

3

Đây là phiên bản của tập lệnh bash SSH mà tôi sử dụng để đặt tiêu đề và dấu nhắc lệnh của máy chủ từ xa mà không thực hiện bất kỳ thay đổi nào đối với máy chủ từ xa.

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"

Bạn có thể gọi nó bằng cách gọi tên máy chủ tên người dùng ./my_ssh.sh


Tôi nghi ngờ điều này hoạt động khi bắt đầu một phiên bash khác sau khi đăng nhập ssh (ví dụ: khi sử dụng màn hình)
Laurens Rietveld

1

Các công việc sau đây đối với tôi (có lẽ chỉ trên gnome-terminal):

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

Trong đó lệnh ssh_bkup chỉ là 'ssh' cơ bản với tên đã thay đổi, được gọi ngay sau khi lệnh echo thay đổi tiêu đề của thiết bị đầu cuối hiện tại.


một giải pháp bí danh sẽ tốt hơn việc đổi tên các lệnh thành một cái gì đó không chuẩn?
X Tian

Điều này hoạt động tốt cho tôi, cũng gnome-terminal. ~/binđược ưu tiên trong con đường của tôi, vì vậy tôi đã đặt kịch bản của bạn vào ~/bin/ssh. Hàng cuối cùng gọi rõ ràng /usr/bin/ssh. Bằng cách này, những người dùng khác vẫn sử dụng tiêu chuẩn sshkhi đăng nhập vào máy đó và (vì các thư mục chính của chúng tôi nằm trên máy chủ, tài khoản LDAP) Tôi có chức năng trên bất kỳ máy nào tôi đăng nhập.
Gauthier

Cuộc gọi tốt, @Gauthier. Có vẻ là một giải pháp tốt hơn.
Yuriy Mankovskiy

0

đây là phiên bản bí danh

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'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.