Sửa tiêu đề thiết bị đầu cuối sau khi đăng nhập từ xa SSH vào máy khác


18

ngay bây giờ tôi đang sử dụng mã perl một dòng để thay đổi tiêu đề của các thanh thiết bị đầu cuối của mình,

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

nhưng mỗi lần sau khi tôi ssh sang một máy từ xa khác, tiêu đề sẽ được sửa đổi bởi máy chủ (do đó tôi không đặc biệt bận tâm). Nhưng sau khi tôi thoát khỏi kết nối, tiêu đề đã sửa đổi vẫn còn. Có cách nào để sửa lỗi này? về cơ bản tôi muốn một tiêu đề cố định cho các thiết bị đầu cuối của tôi khi hoạt động cục bộ.

Tôi chủ yếu sử dụng thiết bị đầu cuối và bộ kết thúc xfce theo CentOS hoặc Debian. Cảm ơn.

BIÊN TẬP

Một điều tinh tế nữa là, thay vì có tất cả các thiết bị đầu cuối cùng tên, tôi muốn có quyền tự do chỉnh sửa tiêu đề của chúng một cách nhanh chóng nhưng chỉ cấm phiên SSH sửa đổi những gì tôi đã chỉnh sửa.

Câu trả lời:


6

Tôi không biết về các tiêu đề cửa sổ, nhưng tôi đã cố gắng để hệ thống của mình làm điều gì đó để chấm dứt một phiên ssh thực sự, sau khi kết thúc một phiên ssh. Nói tóm lại: nó không hoạt động như thế. Về cơ bản, bạn có ba lựa chọn:

  1. Viết một trình bao bọc xung quanh ssh, tức là một tập lệnh shell thực thi có tên sshđược ưu tiên /usr/bin/sshtrong $ PATH của bạn có chứa dòng exec /usr/bin/ssh $@ở đâu đó ở giữa. Điều này cho phép bạn để trình bao của mình thực hiện một số nội dung trước và sau khi nhị phân ssh hiệu quả được chạy, trong khi vẫn giữ mức tối thiểu.

  2. Viết một bản vá chống lại các nguồn SSH mà bạn chọn để cung cấp cho bạn một hook dọn dẹp thực thi lệnh shell được truyền qua dòng lệnh hoặc một số cài đặt cấu hình. Đó là những gì chúng ta muốn.

  3. Đã PROMPT_COMMANDđánh giá đầu ra của history. Về cơ bản, một cách tiếp cận chung chung và xấu xí hơn với 1.


về cơ bản tôi chỉ viết một tập lệnh đơn giản để lấy tiêu đề hiện tại và lưu nó trước phiên SSH, sau đó khôi phục tiêu đề sau đó.
nye17

4
@ nye17 Bạn có thể đăng tập lệnh giải pháp mà bạn đã sử dụng không?
Reg Mem

Tôi đã đăng kịch bản giải pháp của tôi dưới đây. nên là một trận đấu chặt chẽ những gì @ nye17 đã làm. unix.stackexchange.com/a 4321277/12190
phyatt

7

Giải pháp: thêm một số hàm ~ / .bashrc để làm một cái gì đó sau lệnh ssh và su

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
}

Lưu ý: khởi động lại bash sau khi chỉnh sửa thành ~ / .bashrc

Thí dụ:

# 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()

Mong rằng sẽ giúp.


hơi không chính xác để nói revertkhi bạn không kiểm tra xem nó là gì trước đây ... nếu bạn truy vấn và lưu giá trị trước đó tho ;-)
nhed

4

Định cấu hình dotfile shell cục bộ của bạn (ví dụ: $PROMPT_COMMANDin ~/.bashrc) để đặt tiêu đề thiết bị đầu cuối một cách thích hợp, sử dụng cùng một cơ chế.

Ví dụ:

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

1. prompt_command không có gì để làm tiêu đề của cửa sổ terminal của bạn, phải không? Tôi đã thiết lập prompt_command nhưng chỉ cho dấu nhắc. 2. Tôi vẫn cần một cơ chế để ghi nhớ và kích hoạt cài đặt cục bộ của mình sau khi thoát khỏi nhật ký ssh.
nye17

Lệnh prompt chỉ đơn giản là phát ra chuỗi thoát cần thiết cho thiết bị đầu cuối của bạn để đổi tên thanh tiêu đề của nó. :)
Phục hồi Monica

nhưng tôi cũng muốn tự do đổi tên bất kỳ thiết bị đầu cuối nào tôi muốn, thay vì mỗi phiên có cùng tên. Trong thực tế, về cơ bản, tôi chỉnh sửa hướng dẫn tiêu đề thiết bị đầu cuối và hy vọng thiết bị đầu cuối đó vẫn có tiêu đề cố định ngay cả sau khi đăng nhập / đăng xuất SSH. Liệu nó có ý nghĩa?
nye17

1
Vì vậy, sau đó đặt tiêu đề mong muốn trong một biến, và đầu ra đó.
Ignacio Vazquez-Abrams

Nếu bạn sử dụng chuỗi thoát thiết bị đầu cuối này để đặt tiêu đề null (ví dụ export PROMPT_COMMAND="printf '\e]0;\7\n'":), thì trình giả lập thiết bị đầu cuối của bạn có thể đặt tiêu đề cửa sổ khi nó thấy phù hợp. Khi bạn ssh đến một máy chủ từ xa đặt tiêu đề thiết bị đầu cuối, trình giả lập thiết bị đầu cuối của bạn sẽ hiển thị tiêu đề đó và khi bạn đăng xuất, nó sẽ trở lại sử dụng tiêu đề của chính nó. Ít nhất, đó là cách ứng dụng macOS Terminal hoạt động.
đất sét

3

Thêm các dòng này vào ~ / .bashrc

# 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

hoạt động tốt với các linux dựa trên debian


1
CNTT không đặt tiêu đề mặc dù ...
Bananguin

Nó thường hoạt động tốt hơn để sử dụng PROMPT_COMMANDthay vì sử dụng PS1, vì bạn không phải bao gồm dấu \[ \]ngoặc và nó có thể loại bỏ một số trích dẫn.
Chris Trang

2

Một giải pháp là thay đổi biến đầu cuối thành vt100 trước khi ssh'ing, ví dụ: chạy

export TERM=vt100

Điều này hoạt động bởi vì thông thường các tập lệnh khởi tạo nhìn vào biến đầu cuối và chỉ thay đổi tiêu đề nó là xterm. Bạn mất màn hình thay thế, màu sắc và có thể một số tính năng ưa thích khác mà bạn có thể hoặc không thể đánh giá cao.

Nếu bạn muốn giữ thiết bị đầu cuối cục bộ là xterm, bí danh ssh để thay đổi biến thiết bị đầu cuối một cách nhanh chóng, như

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

nó thay đổi cách mọi thứ được hiển thị. màu sắc không được hiển thị
npk

0

Tôi đã khắc phục vấn đề này bằng cách thêm nó vào PS1 trong tệp .bashrc của tôi.

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

Do đó, toàn bộ dòng trông như thế này (Tôi đã tùy chỉnh PS của mình!:

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

Tôi hy vọng điều đó sẽ giúp những người khác.


Nếu bạn sử dụng chuỗi thoát thiết bị đầu cuối này để đặt tiêu đề null (ví dụ export PS1='\[\033]0;\007\]\h:\W \u\$ ':), thì trình giả lập thiết bị đầu cuối của bạn có thể đặt tiêu đề cửa sổ khi nó thấy phù hợp. Khi bạn ssh đến một máy chủ từ xa đặt tiêu đề thiết bị đầu cuối, trình giả lập thiết bị đầu cuối của bạn sẽ hiển thị điều đó và khi bạn đăng xuất, nó sẽ trở lại sử dụng tiêu đề của chính nó. Ít nhất, đó là cách ứng dụng macOS Terminal hoạt động.
đất sét

0

Các câu trả lời khác sẽ không hiệu quả với tôi khi tôi thoát khỏi SSH, nhưng đã khiến tôi gần gũi. Thêm setw tự động đổi tên hoạt động khi tôi thoát phiên ssh từ xa để nó tự động đổi tên và không phải thoát khỏi cửa sổ nữa để thiết lập lại. [Tháng một. 2018 - Debian 9]

ssh() {
tmux rename-window "$*"
command ssh "$@"
tmux setw automatic-rename
}
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.