Làm cách nào để có được các phím F1-F12 để chuyển đổi màn hình trong màn hình gnu trong cygwin khi kết nối qua SSH?


2

Tôi đang kết nối với máy tính để bàn chạy cygwin qua SSH từ ứng dụng đầu cuối trong Mac OS X. Tôi đã bắt đầu màn hình ở phía cygwin và có thể kết nối với nó qua phiên SSH. Hơn nữa, tôi có các mục sau trong tệp .screenrc:

bindkey -k k1 select 1  #  F1 = screen 1
bindkey -k k2 select 2  #  F2 = screen 2
bindkey -k k3 select 3  #  F3 = screen 3
bindkey -k k4 select 4  #  F4 = screen 4
bindkey -k k5 select 5  #  F5 = screen 5
bindkey -k k6 select 6  #  F6 = screen 6
bindkey -k k7 select 7  #  F7 = screen 7
bindkey -k k8 select 8  #  F8 = screen 8
bindkey -k k9 select 9  #  F9 = screen 9
bindkey -k F1 prev      # F11 = prev
bindkey -k F2 next      # F12 = next

Tuy nhiên, khi tôi khởi động nhiều cửa sổ trên màn hình và cố gắng chuyển đổi giữa chúng thông qua các phím chức năng, tất cả những gì tôi nhận được là tiếng bíp.

Tôi đã thử các cài đặt khác nhau cho $ TERM (ví dụ: ansi, cygwin, xterm-color, vt100) và chúng dường như không thực sự ảnh hưởng đến bất cứ điều gì.

Tôi đã xác minh rằng ứng dụng đầu cuối trên thực tế đang gửi chuỗi thoát cho phím chức năng mà tôi mong đợi và bash shell của tôi (chạy bên trong màn hình) đang nhận được nó. Ví dụ, đối với F1, nó sẽ gửi như sau (hexdump là tập lệnh perl mà tôi đã viết có STDIN trong binmode và xuất ra dưới dạng kết xuất thập lục phân / ascii):

% hexdump
[press F1 and then hit ^D to terminate input]
00000000:  1b4f50                               .OP

Nếu mọi thứ hoạt động chính xác, tôi không nghĩ bash sẽ nhận được chuỗi thoát vì màn hình nên đã bắt được nó và biến nó thành một lệnh.

Làm thế nào để tôi có được các phím chức năng để làm việc?

Câu trả lời:


1

Với rất nhiều thử nghiệm, tôi đã có thể làm cho nó hoạt động bằng cách thêm các dòng sau vào .screenrc:

terminfo * k1=\EOP
terminfo * k2=\EOQ
terminfo * k3=\EOR
terminfo * k4=\EOS
terminfo * k5=\E[15~
terminfo * k6=\E[17~
terminfo * k7=\E[18~
terminfo * k8=\E[19~
terminfo * k9=\E[20~
terminfo * F1=\E[23~
terminfo * F2=\E[24~

Làm tốt lắm. Điều này là cần thiết khi cơ sở dữ liệu terminfo trong thiết bị đầu cuối bên ngoài của bạn (trên máy Cygwin) không bao gồm các chuỗi thoát trong định nghĩa của nó cho $ TERM, vì vậy màn hình sẽ không nhận ra chúng.
Alastair Irvine

0

Có lẽ, câu trả lời của tôi sẽ bổ sung cho câu hỏi trước. Bạn có thể tìm thấy cơ sở dữ liệu terminfo đã sửa đổi sẽ cho phép bạn sử dụng các khóa Fx, cũng như các tổ hợp Alt + Fx, Ctrl + Fx, Shift + Fx, Alt + Shift + Fx đây . Hướng dẫn sử dụng nó là đây . Tất nhiên, ứng dụng thiết bị đầu cuối nên hỗ trợ họ. Các mã khóa này là từ biến thể XFree 4 của bảng điều khiển (được hỗ trợ trong konsole).

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.