Klavyenin macun içinde düzgün çalışmasını sağlayamıyorum


7

Bir debian sunucusunda ssh'ye giriş yapmak için win7'de istemci olarak macun kullanıyorum. Ancak macun konsolunda klavye davranışlarıyla ilgili garip bir sorunla karşılaştım.

Macun içinde klavye yapılandırmasıyla ilgili olduğunu fark ettim. Macun kılavuzunu okuduktan sonra , başarılı bir backspaceşekilde çalışmak için anahtar yaptım , ancak yine de ESC, oklar homeve endve F1- F12tuşları ile ilgili sıkıntılarım var .

İşte benim klavye config macun içinde

Burada davranışlarını aşağıda sıralıyorum. Yanlış eşleşmenin ESCkök nedeni olduğu görünüyor .

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

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

Burada, esc'nin neden eşleşmediğini düşündüğümü göstereceğim:

Düzgün çalışan bir ssh konsolundayken, tuşuna basıyorum, eschiçbir şey göstermemeliydi.

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

Ama bu arızalı ssh konsolunda, ben basın escgösterir ^[.

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

Her iki ssh konsolunda od-c koştum ve bastırdım esc, aynı çıktı verdiler.

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

(malfunctioning one)
$ od -c
^[

Aynı sorunu yaşadım, bu çözümle
çözdüm

Yanıtlar:


13

Sorun TERM ortam değişkeninin değeri, yapılandırılmış uçbirim özelliklerine uymuyor - özellikle "Ev ve Son Tuşları" ve "İşlev tuşları ve tuş takımı" ayarları.

Bunları düzeltmek zor olabilir.

Debian sunucusu tarafından beklenenler.

Tip infocmp -Ibilgisayarınızın bekliyor ne olduğunu görmek için.

$ 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[Hsunucunun ESC [ Htuşuna bastığınızda üç karakter almayı beklediği anlamına gelir Home.

Diğer TERM değerleri için neler beklendiğini görebilirsiniz.

$ 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,
        …

Eğer Burada, görebiliriz TERMiçin ayarlanan xtermbu sunucu almayı beklediğiniz, ESC [ 1 ~ne zaman Home(basıldığında khome)

Yukarıdaki çok şifreli ise, deneyin infocmp -L

tput khome | hexdump -Cİlgilendiğiniz tuşların terminfo yetenek adlarını biliyorsanız, bunun gibi şeyler de yapabilirsiniz .

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

veya tartışmalı olarak daha okunaklı

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

veya başka bir TERM ayarının ne anlama geldiğini görmek için

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

çıkış boşsa, sunucu terminal tipinin (TERM) bu tuşa sahip olmadığını düşünüyor.

Ne aslında Putty tarafından gönderilen.

Neyin Homegönderdiğini görmek için , koş vi, tuşuna basın i(ekleme modu için) Ctrl+ Vtuşuna Homebasın Esc, ardından ekleme modundan çıkmak için tuşuna basın .

Çözüm

Gönderilen diğer ucun beklenenleri ile eşleşene kadar Putty config (veya TERM) ayarını yapın.


Örneğin

Belirtildiği gibi yapın https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/terminfo.html Macun, Yapılandırma, Bağlantı, Veri terminal tipi dize = PuTTY sonra ve bu kaydedin. Olabilir.


Mantıklı ama sorun şu ki ESC, tek başıma çalışamıyorum bile home. ESCİlk önce çözmem gerek gibi görünüyor değil mi?
Rufus,

ESC anahtarı ^[çıkış olarak üretiliyorsa , tasarlandığı şekilde çalışır.
ktf

@ Rufus: ktf haklı. Sorununuz Esc anahtarı değil çünkü diğer anahtar tanımları Esc anahtarının nasıl tanımlandığına bağlı değildir. ^ [Ctrl + için kısa [], ^ A'nın Ctrl + A için kısa olduğu gibi. [27 "harfi" ve Esc ise 27. kontrol kodu (bkz. ASCII tablosu )
RedGrittyBrick 4:11

Debian ve PuTTy gibi standart şeyler için, "bu yapılandırmayı Debian'a ve bunu PuTTy'ye yükle ve şimdiye kadarki en iyi deneyime sahip" gibi hazır bir tarif yok mu?
hipersw,

@hypersw chiark.greenend.org.uk/~sgtatham/putty/wishlist/terminfo.html sonra Putty, Configuration, Connection, Data, terminal tipi string = PuTTY içine yazın ve kaydedin. Olabilir.
RedGrittyBrick

2

ESC anahtarının yanlış eşlemesi yok - ^ [, ASCII 27 olan ve ESC olan Control-LeftSquareBracket öğelerini belirtir

Anahtarlar şüpheleniyorsanız ile onları kontrol, yanlış dizileri vermek od -c ve bunları karşılaştırmak infocmp çıkışı:

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

Çıkış olabilir ( 033bir ESC ):

 0000000 033   [   1   1   ~

Bunu infocmp çıktısıyla karşılaştırın (burada ESC\E anlamına gelir ):

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

İnfocmp çıkışına kısa giriş:

kbs = Geri al

kcub1, kcud1, kcuf1, kcuu1= İmleç Tuşları

kf* = İşlev tuşları

kpp/ knp= Sayfa yukarı / aşağı

khome/ kend= Ev / Son tuşları

kich1/ kdch1= Anahtar ekle / sil

Bu Bilgileri kullanarak , sisteminize olan macununuzu doğru şekilde yapılandırmanız kolay olmalıdır .


1

Tecrübelerime göre bash çalışmıyor, sadece renklerin, tarihin ve daha fazlasının tadını çıkarmak için / bin / bash komutunu çalıştırın . Ve bu aksaklıklar daha da ortadan kalkar ve klavyenin beklendiği gibi çalışmasını sağlar.

Her bağlandığınızda veya kullanıcıyı değiştirdiğinizde bu komutu çalıştırmanız gerekebilir, ancak hatırlaması zor değildir.


0

Tam bir çözüm bulana kadar oklar yerine vi stili tuşlar kullanmayı deneyin.
H => sol
J => aşağı
vb.


0

Elbette bir "reçete" var, ancak PuTTY'nin geliştiricileri sürece katılmayı seçti. Tarif bir terminal açıklaması olarak adlandırılır . 2001'den beri ncurses'da uygun bir tane var (örneğin terminal veritabanına bağlantıya bakınız ).

Terminal açıklaması, çoğu uygulama için TERMortam değişkeni olarak belirtilmiştir .

Aksine varsayılan setleri tarafından o "tarifi", PuTTY kullanmak yerine TERMgöre xtermözel tuşlar (işlev, imleç) eşleşmiyor Fark etmiş gibi. Bu, ncurses SSS bölümünde belirtilmiştir. Neden "xterm" olarak ayarlanan TERM'i kullanmıyorsunuz?

PuTTY da (çünkü konuyla içinde belirtilen TERMolarak) xterm SSS aslında bir "xterm" olmadığı için buna adamış hiçbir bölüm yoktur rağmen.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.