Backspace, Tab tidak bekerja di terminal (menggunakan ssh)

37

Ketika saya ssh ke komputer lain dengan Debian dengan akun saya (dengan izin sudo), tombol backspace saya menghasilkan beberapa simbol canggung saat menekan. Juga Tab& delkunci tidak berfungsi juga.

Di sisi lain, saya juga memiliki akun lain di mesin yang sama & ketika saya ssh melalui akun ini, terminalnya berfungsi dengan baik. Saya tidak tahu mengapa ini terjadi.

gopi1410
sumber

Jawaban:

37

Saya telah melihat masalah seperti itu sebelumnya.

Ambil contoh backspace, host jarak jauh mengharapkan beberapa karakter untuk digunakan sebagai "hapus / backspace", saat Anda menekan backspace di terminal, program terminal akan mengirim beberapa karakter ke host jarak jauh, jika apa yang diharapkan oleh host jarak jauh berbeda dengan karakter yang dikirim oleh program terminal, Anda akan mengalami masalah ini. Jadi perbaikan cepatnya adalah seperti di bawah ini:

  1. jalankan perintah #stty -adi host jarak jauh, dan temukan apa yang diharapkan menjadi kode hapus pada output. Katakan erase=^?.
  2. Di terminal, ketik Ctrlvdan tekan backspace Anda. Anda akan melihat kode apa yang dikirim sebagai "hapus". Katakan itu ^H.
  3. Di host jarak jauh, jalankan #stty erase ^H.
    (Catatan: gunakan Ctrlv+ Backspace, jangan mengetikkan ^ secara manual)

Anda dapat memperbaiki masalah Tab dengan yang sama seperti di atas.

Derui Si
sumber
Karakter backspace saya adalah beberapa simbol khusus seperti segitiga terbalik. Jadi itu tidak berfungsi
gopi1410
1
Komentar sederhana ini tentu saja solusi terbaik yang pernah saya lihat. Rasanya seperti kludge tapi berhasil.
Paulo Matos
Ini berhasil untuk saya! Apa yang saya tidak mengerti adalah mengapa shell saya menangani backspace seperti yang diharapkan, tetapi membaca dari stdin di app saya tidak. Melakukan perubahan yang Anda sarankan menghasilkan backspace yang berfungsi untuk keduanya. Pemahaman saya adalah bahwa shell menangani buffer stdin, jadi bukankah penanganan backspace harus sama untuk shell dan aplikasi?
Samuel
1
Bagaimana jika tidak ada kode yang dikirim? Ctrlv + backspace tidak menghasilkan apa-apa ...
Manfredo
Bagi saya, kode backspace sama dengan stty -aoutput, tetapi masih tidak berfungsi
Matej J
36

Selain solusi "stty", Anda dapat mencoba solusi "TERM".

Anda ssh ke Debian Anda dari beberapa terminal (putty, solaris dterm, debain xterm, Anda-nama-itu), istilah ini mengumumkan kemampuan (yang mencakup kunci seperti Backspace dan Tab) melalui variabel lingkungan TERM.

Jadi, setelah ssh untuk unix host (tidak tergantung debian atau host lain) setel variabel TERM sesuai terminal Anda. Pertimbangkan Anda menggunakan bash sebagai shell dan vt100 sebagai terminal:

export TERM=vt100

ps: JANGKA WAKTU harus diumumkan melalui ssh secara otomatis, tetapi dalam beberapa keadaan sihir ini gagal.

paul
sumber
masih tidak berfungsi :(
gopi1410
Terminal apa yang Anda gunakan? Dan apa nilai TERM yang telah Anda coba?
paul
Saya mencoba vt100. Bagaimana saya bisa mengetahui nilai TERM? Saya mencoba ssh dari cygwin (di windows) ke Debian. Jika ada masalah dengan cygwin, saya bahkan mencobanya dari terminal ubuntu, tetapi masalah yang sama.
gopi1410
Tidak yakin cygwin memiliki emulasi terminal yang baik, sejauh yang saya tahu, cygwin hanya menggunakan konsol windows biasa yang tidak memiliki emulasi terminal (mungkin salah). Dari ubuntu semua harus berfungsi dengan baik. Sesuatu yang salah dengan shell atau termcap library di debian. Login dari Ubuntu dan beri saya output perintah: 1. echo $ TERM 2. stty -a
paul
2
Walaupun ini tidak secara langsung membantu saya, karena TERM sudah diatur dengan benar, itu memang membantu mengidentifikasi masalah. Saya kehilangan entri terminfo untuk terminal saya. Saya menggunakan urxvt dan pada arch Anda perlu menginstal rxvt-unicode-terminfo untuk memperbaiki masalah khusus ini
Xandaros
15

Ini karena shell default Anda sh, untuk digunakan bash, jalankan bashdari shell Anda.

bash

Untuk ditetapkan bashsebagai shell default Anda:

chsh -s /bin/bash 

atau

sudo chsh -s /bin/bash yourusername
es membeku
sumber
2
Yang ini memperbaikinya untuk saya. Meskipun tidak pernah melihat shell login saya!
James Pack
2
Saya melihat masalah ini, tetapi shell saya adalah bash.
Kelemahan
6

Shell Anda mungkin diatur ke /bin/shbukan/bin/bash

jm.
sumber
1
Terkait dengan jawaban ini: unix.stackexchange.com/questions/50542/...
Samuel
Ini akan lebih membantu jika dijelaskan sedikit lebih banyak dan bagaimana mengubahnya, tetapi itu adalah masalah yang saya miliki. Terima kasih @ Tom atas tautan Anda yang telah memperbaiki masalah ini untuk saya.
Jake
Ini adalah alasan dalam kasus saya .. untuk pengguna tertentu. Tidak ada shell yang didefinisikan /etc/passwd, ketika saya menambahkan :/bin/bashke barisnya itu berhasil. Anda dapat mengetahui apa shell yang digunakanecho $0
MSpreij
6

Saya biasanya menggunakan ini untuk memperbaiki keluaran karakter yang funky di terminal saya. Ini mengatur ulang semua karakter khusus ke nilai standarnya.

stty sane

Dari halaman manual stty:

sama seperti cread -ignbrk brkint -inlcr -igncr icrnl -iutf8 -ixoff -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ft echo echo iso -xcase -tostop -echoprt echoctl echoke, semua karakter khusus ke nilai defaultnya

David Morales
sumber
2

di atas jawaban paul, jika Anda ingin mempertahankan kemampuan untuk memiliki keluaran berwarna, Anda dapat menggunakan xterm-88color

echo 'export TERM=xterm-88color' >> ~/.bashrc
source ~/.bashrc
wasotung
sumber
1
toe -amenunjukkan daftar jenis terminal yang didukung ... xterm-88colorsejauh ini bukan satu-satunya pilihan dan pada kenyataannya mungkin tidak tersedia pada sistem tertentu.
0xC0000022L