Làm thế nào tôi có thể chuyển các phím chức năng để htop trong một tty?


9

Tôi đang cố gắng sử dụng htoptrong tty1. Tuy nhiên, một số phím chức năng dường như không hoạt động như bình thường. F1F2không làm gì cả, và F3dường như kích hoạt thiết lập (thường được kích hoạt bởi F2). Ngoài ra, F4F5không làm việc. Ngoài ra, khi tôi thử và nhấn Escđể thoát khỏi những màn hình này, tôi phải nhấn nó hai lần.

Trong một thiết bị đầu cuối bình thường ( terminator), các phím chức năng hoạt động tốt. Tuy nhiên, tôi cũng phải bấm Eschai lần ở đây, nên có lẽ đó là cá trích đỏ.

Làm cách nào để sử dụng các phím chức năng này trong tty1?

BIÊN TẬP

Trong tty1, nếu tôi nhấn Ctrl+ vthì F1đến F5, v.v. Tôi nhận được kết quả đầu ra sau:

^[[[A
^[[[B
^[[[C
^[[[D
^[[[E

Trong terminator, tôi nhận được

^[OP
^[OQ
^[OR
^[OS
^[[15~

Các phím chức năng ở trên này là tương đương (ví dụ ^[[17~cho F6).

CHỈNH SỬA 2

Đáp lại bình luận của Stéphane Chazelas .

  • $TERMlà tương tự trong tty1 như trong thiết bị đầu cuối hoạt động "bình thường" của tôi. Đó là xterm-256color.
  • Tôi không sử dụng màn hình hoặc tmux.
  • Tôi đang sử dụng htop1.0.3, mặc dù lần chỉnh sửa đầu tiên của tôi dường như chỉ ra rằng đó là một vấn đề ngược dòng htop.

"Có infocmp -L1 | grep key_fkhớp với những gì các phím đó gửi cho bạn không?

Tôi không chắc ý của bạn là gì khi "khớp với những gì các phím đó gửi cho bạn", nhưng tôi đã chạy lệnh này trong cả thiết bị đầu cuối bình thường và tty1, và đầu ra giống hệt như dưới đây.

key_f1=\EOP,
key_f10=\E[21~,
key_f11=\E[23~,
key_f12=\E[24~,
key_f13=\E[1;2P,
key_f14=\E[1;2Q,
key_f15=\E[1;2R,
key_f16=\E[1;2S,
key_f17=\E[15;2~,
key_f18=\E[17;2~,
key_f19=\E[18;2~,
key_f2=\EOQ,
key_f20=\E[19;2~,
key_f21=\E[20;2~,
key_f22=\E[21;2~,
key_f23=\E[23;2~,
key_f24=\E[24;2~,
key_f25=\E[1;5P,
key_f26=\E[1;5Q,
key_f27=\E[1;5R,
key_f28=\E[1;5S,
key_f29=\E[15;5~,
key_f3=\EOR,
key_f30=\E[17;5~,
key_f31=\E[18;5~,
key_f32=\E[19;5~,
key_f33=\E[20;5~,
key_f34=\E[21;5~,
key_f35=\E[23;5~,
key_f36=\E[24;5~,
key_f37=\E[1;6P,
key_f38=\E[1;6Q,
key_f39=\E[1;6R,
key_f4=\EOS,
key_f40=\E[1;6S,
key_f41=\E[15;6~,
key_f42=\E[17;6~,
key_f43=\E[18;6~,
key_f44=\E[19;6~,
key_f45=\E[20;6~,
key_f46=\E[21;6~,
key_f47=\E[23;6~,
key_f48=\E[24;6~,
key_f49=\E[1;3P,
key_f5=\E[15~,
key_f50=\E[1;3Q,
key_f51=\E[1;3R,
key_f52=\E[1;3S,
key_f53=\E[15;3~,
key_f54=\E[17;3~,
key_f55=\E[18;3~,
key_f56=\E[19;3~,
key_f57=\E[20;3~,
key_f58=\E[21;3~,
key_f59=\E[23;3~,
key_f6=\E[17~,
key_f60=\E[24;3~,
key_f61=\E[1;4P,
key_f62=\E[1;4Q,
key_f63=\E[1;4R,
key_f7=\E[18~,
key_f8=\E[19~,
key_f9=\E[20~,

1
Trên tty1, tại shell nhanh chóng, báo chí Ctrl+Vsau đó F1, và xem những gì được chèn vào. Lặp lại cho F2, F3, F4F5, và sau đó làm tương tự trong terminator. Hãy cho chúng tôi những gì bạn nhìn thấy.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles Câu hỏi đã được chỉnh sửa.
Sparhawk

Giá trị của $TERMnó là gì? Bạn đang sử dụng màn hình hoặc tmux? Phiên bản nào của htop? Có infocmp -L1 | grep key_fphù hợp với những gì các phím gửi cho bạn?
Stéphane Chazelas

@ StéphaneChazelas Tôi đã chỉnh sửa câu hỏi.
Sparhawk

2
Nó phải là TERM = linux, giao diện điều khiển ảo linux hầu như không liên quan gì đến xterm. getty nên đặt $ TATE cho bạn, bạn không nên ghi đè lên nó.
Stéphane Chazelas

Câu trả lời:


4

Bằng cách thiết lập:

export TERM=xterm-256color

bạn đang nói htop(và mọi ứng dụng thiết bị đầu cuối trực quan khác sử dụng cơ sở dữ liệu termcap hoặc terminfo) rằng thiết bị đầu cuối của bạn là một xterm 256 màu chứ không phải là bảng điều khiển ảo Linux.

htopsẽ truy vấn cơ sở dữ liệu terminfo để biết chuỗi ký tự nào được gửi đi F1, F2... nhưng sẽ lấy những ký tự đó cho xterm.

xtermgửi các chuỗi khác nhau so với bảng điều khiển ảo Linux cho các khóa mà bạn có thể xác minh bằng cách truy vấn cơ sở dữ liệu terminfo bằng tay infocmp:

$ infocmp -L1 xterm-256color | grep 'key_f[1-5]='
        key_f1=\EOP,
        key_f2=\EOQ,
        key_f3=\EOR,
        key_f4=\EOS,
        key_f5=\E[15~,
$ infocmp -L1 linux | grep 'key_f[1-5]='
        key_f1=\E[[A,
        key_f2=\E[[B,
        key_f3=\E[[C,
        key_f4=\E[[D,
        key_f5=\E[[E,

Vì vậy, htopsẽ không nhận ra \E[[Alà một F1, nó sẽ mong đợi \EOPđiều đó.

Ở đây, bạn không muốn gán giá trị cho $TERMtrong ~/.bashrc. $TERMnên được đặt bởi chính các trình giả lập thiết bị đầu cuối ( xterm, terminator) và gettycho các bảng điều khiển ảo Linux (nên linuxcó).

Nếu bạn không hài lòng với giá trị mà trình giả lập thiết bị đầu cuối cụ thể chọn $TERM, đó là cấu hình của trình giả lập thiết bị đầu cuối mà bạn nên cập nhật.


Trên mac, chỉ cần mở tùy chọn Terminal và thay đổi từ "ansi" thành xterm-256color.
Xeoncross

Cảm ơn vì lời giải thích chi tiết. Trong trường hợp của tôi, KiTTY (ngã ba của PuTTY) đã được đặt $TERMthành xterm-256color, nhưng được thiết lập để sử dụng ESC[n~các phím chức năng. Tôi đã thay đổi các phím chức năng để sử dụng XTerm R6trong cài đặt và tất cả đều hoạt động.
Alan
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.