Tidak dapat mengaktifkan keyboard dengan benar di dempul

7

Saya menggunakan dempul pada win7 sebagai klien, untuk masuk ke ssh di server debian. Tapi saya pernah bertemu masalah aneh tentang perilaku keyboard di konsol dempul.

Saya perhatikan bahwa ini tentang konfigurasi keyboard di dempul. Setelah membaca manual dempul , Saya berhasil membuatnya backspace kunci untuk bekerja, tetapi masih memiliki masalah ESC, panah, home dan end, dan F1 - F12 kunci.

Here is my keyboard config in putty

Di sini saya daftar perilaku mereka di bawah ini. Tampaknya ketidaksesuaian ESC adalah penyebab utama.

  • ESC = & gt; ^ [
  • up = & gt; ^ [OA
  • down = & gt; ^ [OB
  • right = & gt; ^ [OC
  • left = & gt; ^ [OD
  • home = & gt; ^ [[1 ~
  • end = & gt; ^ [[4 ~
  • F1 = & gt; ^ [[11 ~
  • F12 = & gt; ^ [[24 ~

==============================================

Di sini saya akan menunjukkan mengapa saya pikir esc tidak cocok:

Ketika di konsol ssh yang berfungsi dengan baik, saya menekan esc, seharusnya tidak menunjukkan apa pun.

(before)
root@somemachine:
(after)
root@somemachine:

Tapi di konsol ssh yang tidak berfungsi ini, saya menekan esc, itu menunjukkan ^[.

(before)
root@somemachine:
(after)
root@somemachine: ^[

Saya menjalankan od -c di kedua ssh console, dan menekan esc, mereka memberikan hasil yang sama.

(normal one)
root@opengg:~# od -c
^[

(malfunctioning one)
$ od -c
^[
Rufus
sumber
Saya memiliki masalah yang sama, saya menyelesaikan dengan solusi ini: superuser.com/a/104001
jncruces
ini melakukannya untuk saya: vim.wikia.com/wiki/PuTTY_numeric_keypad_mappings
JonnyRaa

Jawaban:

13

Masalahnya adalah nilai variabel lingkungan TERM tidak sesuai dengan karakteristik terminal yang dikonfigurasikan - khususnya pengaturan "Tombol Awal dan Akhir" dan "Tombol fungsi dan tombol".

Ini bisa sulit untuk diperbaiki.

Apa yang diharapkan oleh server Debian.

Mengetik infocmp -I untuk melihat apa yang komputer Anda harapkan.

$ infocmp -I 
#       Reconstructed via infocmp from file: /usr/share/terminfo/a/ansi
ansi|ansi/pc-term compatible with color,
        …
        rmul=\E[m, il1=\E[L, kbs=^H, kcbt=\E[Z, kcud1=\E[B,
        khome=\E[H, kich1=\E[L, kcub1=\E[D, kcuf1=\E[C, kcuu1=\E[A,
        …

khome=\E[H berarti bahwa server mengharapkan untuk menerima tiga karakter ESC [ H ketika Anda menekan Rumah .

Anda dapat melihat apa yang diharapkan untuk nilai TERM lainnya

$ infocmp -I xterm
#       Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm
xterm|X11 terminal emulator,
        …
        is2=\E[!p\E[?3;4l\E[4l\E>, il1=\E[L, ka1=\EOw, ka3=\EOu,
        kb2=\EOy, kbs=\177, kbeg=\EOE, kc1=\EOq, kc3=\EOs,
        kdch1=\E[3~, kcud1=\EOB, kend=\E[4~, kent=\EOM, kf1=\EOP,
        kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
        kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
        kf18=\E[32~, kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf3=\EOR,
        kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
        kf9=\E[20~, khome=\E[1~, kich1=\E[2~, kcub1=\EOD,
        kmous=\E[M, knp=\E[6~, kpp=\E[5~, kcuf1=\EOC, kcuu1=\EOA,
        …

Di sini Anda bisa melihat itu, jika TERM diatur ke xterm, server ini akan menerima ESC [ 1 ~ kapan Rumah ditekan ( khome )

Jika hal di atas terlalu samar, coba infocmp -L

Anda juga dapat melakukan hal-hal seperti tput khome | hexdump -C jika Anda tahu nama kemampuan terminfo untuk kunci yang Anda minati.

$ tput khome | hexdump -C
00000000  1b 5b 48                                          |.[H|

atau, bisa dibilang lebih terbaca

$ tput khome | hexdump -e '12/1 "%3_u" "\n"'
esc  [  H

atau untuk melihat apa arti pengaturan JANGKA lain

$ TERM=xterm tput khome | hexdump -e '12/1 "%3_u" "\n"'
esc  [  1  ~

jika output kosong, server berpikir bahwa tipe terminal (TERM) tidak memiliki kunci itu.

Apa yang sebenarnya dikirim oleh Putty.

Untuk melihat apa Rumah sebenarnya mengirim, lari vi, tekan saya (untuk mode penyisipan) tekan Ctrl + V lalu tekan Rumah dan tekan ESC untuk keluar dari mode penyisipan.

Larutan

Sesuaikan konfigurasi Dempul (atau JANGKA) sampai apa yang dikirim sesuai dengan yang diharapkan pihak lain.


Misalnya.

Lakukan seperti yang ditentukan dalam https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/terminfo.html lalu di Putty, Configuration, Connection, Data, string tipe terminal = Putty dan simpan itu. Mungkin.

RedGrittyBrick
sumber
Masuk akal, tetapi masalahnya saya tidak bisa mengerti ESC untuk bekerja, apalagi home. Sepertinya saya harus menyelesaikannya ESC pertama, benar?
Rufus
Jika kunci ESC menghasilkan ^[ sebagai output, ini berfungsi seperti yang dirancang.
ktf
@Rufus: ktf benar. Masalah Anda bukanlah kunci Esc karena definisi kunci lainnya sama sekali tidak bergantung pada bagaimana kunci Esc didefinisikan. ^ [kependekan dari Ctrl + [, Sama seperti ^ A adalah kependekan dari Ctrl + A. [adalah "huruf" ke-27 dan Esc adalah kode kontrol ke-27 (lihat Tabel ASCII )
RedGrittyBrick
Untuk hal-hal yang standar seperti Debian dan Putty, bukankah ada resep seperti "unggah konfigurasi ini ke Debian dan ini ke Putty dan dapatkan pengalaman terbaik yang pernah ada"?
hypersw
@ hypersw chiark.greenend.org.uk/~sgtatham/putty/wishlist/terminfo.html lalu di Putty, Configuration, Connection, Data, string tipe terminal = Putty dan simpan itu. Mungkin.
RedGrittyBrick
2

Tidak ada ketidakcocokan dari ESC key - ^ [berarti Control-LeftSquareBracket yang merupakan ASCII 27 yang merupakan ESC

Jika Anda mencurigai kunci memberikan urutan yang salah, periksa dengan od -c dan membandingkannya dengan infocmp keluaran:

 $ od -c
 (hit F1 Ctrl-D Ctrl-D)

Output mungkin ( 033 aku s ESC ):

 0000000 033   [   1   1   ~

Bandingkan dengan output infocmp (di sini \E cara ESC ):

 $ infocmp -1 | grep 'kf1='
    kf1=\E[11~,

Pengantar singkat untuk keluaran infocmp:

kbs = Backspace

kcub1, kcud1, kcuf1, kcuu1 = Tombol Kursor

kf * = Tombol fungsi

kpp / knp = Halaman atas / bawah

khome / kend = Tombol Home / End

kich1 / kdch1 = Masukkan / Hapus kunci

Dengan menggunakan Informasi ini, Anda harus mudah mengonfigurasi dempul untuk sistem Anda dengan benar.

ktf
sumber
1

Dalam pengalaman saya itu karena bash tidak berjalan, jalankan saja / bin / bash untuk menikmati warna, sejarah, dan lainnya. Dan gangguan-gangguan itu hilang juga, membuat keyboard berfungsi seperti yang diharapkan.

Anda mungkin harus menjalankan perintah ini setiap kali Anda terhubung atau mengubah pengguna, tetapi itu tidak sulit untuk diingat.

JoelBonetR
sumber
0

Sampai Anda menemukan solusi lengkap, coba gunakan tombol vi-style alih-alih panah.
H = & gt; kiri
J = & gt; turun
dll.

Yitzchak
sumber
0

Tentu ada "resep", tetapi pengembang Putty memilih untuk tidak berpartisipasi dalam proses. Resep ini disebut sebagai deskripsi terminal . Sudah ada yang cocok di ncurses sejak itu 2001 (lihat tautan misalnya ke basis data terminal ).

Deskripsi terminal ditentukan untuk sebagian besar aplikasi sebagai TERM variabel lingkungan.

Daripada menggunakan "resep" itu, Putty secara default TERM untuk xterm, yang seperti telah Anda perhatikan, tidak cocok dengan tombol khusus (fungsi, kursor). Itu disebutkan dalam FAQ ncurses Mengapa tidak menggunakan TERM set ke "xterm"?

Putty juga disebutkan (karena masalah dengan TERM ) dalam xterm FAQ , meskipun tidak ada bagian yang dikhususkan untuk itu, karena sebenarnya bukan "xterm".

Thomas Dickey
sumber