Saya menggunakan Bitvise SSH Server pada mesin Windows saya untuk akses jarak jauh. Shell login adalah ZSH, dan saya menggunakan Oh My Zsh dengannya. Namun, saya juga sudah mencoba BASH dan mendapatkan masalah yang sama. Oleh karena itu saya kira masalah ini adalah dengan Bitvise SSH Server, bukan cangkang Cygwin saya atau emulator terminal sisi klien.
Masalahnya dapat dilihat pada prompt ZSH saya. Selama sesi SSH saya melewati Server SSH Bitvise ini, akan ada beberapa ruang tambahan di prompt. Silakan lihat tangkapan layar:
Jendela ini adalah MinTTY pada mesin Windows itu. Ketika saya membukanya, Anda bisa melihat hanya ada satu spasi tambahan ~
(sebelum saya mengetik ssh 127.0.0.1
). Namun begitu saya SSH-ed ke mesin yang sama, ada dua spasi setelah ~
di prompt. Juga, jika saya melakukan sesi SSH lain (ke tiger
mesin) dalam sesi Bitvise SSH, prompt yang kedua juga memiliki ruang ekstra (tanda garis bawah berwarna merah). Namun jika saya keluar dari sesi Bitvise dan SSH ke tiger
, secara langsung, promptnya adalah normal (prompt yang digarisbawahi hijau).
Saya mengamati hal yang sama ketika menghubungkan dari beberapa mesin jarak jauh (menggunakan gnome-terminal
atau xfce4-terminal
sebagai emulator terminal) ke mesin Windows itu.
Oleh karena itu, kesimpulan saya adalah, emulator terminal tidak dapat disalahkan untuk ini. Cygwin dan ZSH-nya juga tidak dapat disalahkan, karena semuanya terlihat baik selama saya tidak melalui Bitvise.
Asumsi saya adalah ada beberapa karakter khusus yang didefinisikan dalam tema Oh My Zsh yang tidak diproses dengan benar ketika melewati Bitvise. Namun saya tidak dapat menemukan apa itu sebenarnya. Tema Oh My Zsh terlihat bagus secara lokal tanpa koneksi Bitvise SSH, dan mereka terlihat bagus di semua mesin Linux yang saya miliki. Karena itu saya pikir itu harus sesuatu dengan Bitvise.
Seperti yang disarankan dalam komentar, saya berlari set
di kedua lingkungan, dan mendapat keluaran dibuang ke dua file teks: bitvise.txt dan local.txt . Sekarang masalah terbesar adalah saya tidak bisa membandingkannya menggunakan diff
karena diff
mereka mengklaim file biner (dan mereka berbeda). Saya tidak yakin apakah ini ada hubungannya dengan ruang-ruang aneh.
Memaksa LANG
pada diff
tidak membantu.
$ diff -uN bitvise.txt local.txt
Binary files bitvise.txt and local.txt differ
$ LANG=en_US.UTF-8 diff -uN bitvise.txt local.txt
Binary files bitvise.txt and local.txt differ
$ LANG=C diff -uN bitvise.txt local.txt
Binary files bitvise.txt and local.txt differ
Dua file diunggah di sini: https://drive.google.com/open?id=0B6Pxoys5MF0Bc1d6QUMweUkybHc
Menguji beberapa TERM
pengaturan berbeda ... Tampaknya tidak melakukan sesuatu yang baik. Pengaturan TERM=linux
menghasilkan sama dengan xterm
.
Diperbarui pada 5/23/16
Masalahnya tampaknya lebih sulit dari yang saya harapkan. Saya menemukan folder "C: \ Program Files \ Bitvise SSH Server \ TermInfo" yang berisi file info terminal. Saya mengganti file di folder itu dengan file serupa yang saya salin dari mesin Ubuntu normal, tetapi tidak membantu. Saya juga mencoba info istilah "cygwin" yang diinstal dengan Cygwin, tidak beruntung ... Sebenarnya file "cygwin" yang menyertai Cygwin sama dengan yang ada pada Ubuntu ...
Saya kehabisan ide sekarang.
Ketika saya SSH ke dalam Bitvise SSH Server, saya bisa lakukan exec /bin/bash
untuk mengganti sesi saat ini dengan Bash. Namun dalam Bash itu, jika saya SSH ke beberapa mesin Linux lain yang menggunakan Zsh dan Oh My Zsh, masalah yang sama tetap ada.
set
untuk membuang pengaturan penuh dalam beberapa kasus. Mungkin Anda dapat menemukan perbedaanset > local.txt
secara lokal dan melakukanset > bitvise.txt
sesi SSH untuklocalhost
. Sekarang saya mendapatkan dua file, keduanya sangat besar dan tidak persis sama. Namundiff
mengklaim mereka adalah file biner sehingga tidak menghasilkan perbedaan dalam garis ... Masih mencoba mencari cara untuk ini ...man iconv
untuk konversidiff
(atau terlalu banyak perbedaan)?LANG=C diff -uN file1 file2
atauLANG=en_US.UTF-8 diff -uN file1 file2
Jawaban:
Satu kemungkinan adalah bahwa Oh My Zsh membuat karakter Unicode, dan masalahnya adalah bahwa karakter tersebut memiliki lebar yang berbeda di konsol Windows.
Misalnya, karakter yang memiliki lebar 0 di MinTTY mungkin memiliki lebar 1 di konsol Windows, dan akan memajukan kursor. Atau karakter yang memiliki lebar 1 di MinTTY mungkin memiliki lebar 2 di konsol Windows.
Di tangkapan layar yang Anda berikan, Anda sedang melihat zsh dengan "Oh My Zsh" di bawah MinTTY.
Tapi bagaimana dengan konsol Windows? Bagaimana tampilan Oh My Zsh di sana?
Bitvise SSH Server menjalankan terminal shell Anda di konsol Windows yang tersembunyi, yang diperlukan untuk dapat menjalankan program konsol Windows. Karena arsitektur ini, zsh harus terlihat tepat di konsol Windows untuk melakukan render dengan benar melalui Bitvise SSH Server.
sumber
Empat minggu kemudian saya akhirnya menemukan masalah sendiri. Terima kasih kepada denis bider yang tampaknya berasal dari tim pendukung Bitvise SSH Server. Penjelasannya tentang bagaimana Bitvise menjalankan shell di konsol Windows adalah kunci untuk menyelesaikan masalah ini.
Ternyata
$TREM
variabel lingkungan danterminfo
file tidak relevan.Masalah yang sebenarnya saya miliki adalah, tema Oh My Zsh yang saya gunakan memiliki karakter yang ditampilkan dengan cara lain di konsol Windows saya. Namun, saya menemukan bahwa itu sebenarnya karena halaman kode konsol Windows saya diatur ke 936 (Cina Sederhana) karena pengaturan lokal Windows saya (untuk karakter non-Unicode). Saya menemukan bahwa jika saya mengubah halaman kode saya secara manual menjadi 437 (Bahasa Inggris AS) di sesi Bitvise SSH, hasilnya menjadi benar.
Lalu saya menyadari bahwa untuk pengguna AS, mereka bahkan tidak memiliki masalah ini sama sekali!
Oleh karena itu, solusinya adalah untuk mengatur halaman kode default dari konsol Bitvise SSH Windows ke 437. Ini dapat dilakukan di Registry, lebih khusus, di kunci
HKCU\Console\Bitvise toterms.exe
, ada yangCodePage
akan diatur ke 437 (desimal). Saya juga dihapusFaceName
karena tidak terdengar sama sekali.Namun, pengaturan ini saja tidak cukup, karena saya menemukan setiap kali sesi Bitvise SSH dimulai, nilainya kembali ke 936. Oleh karena itu, saya perlu mengubah izin
HKCU\Console\Bitvise toterms.exe
untuk menolak akses penulisan dari Semua Orang. Langkah-langkah: 1. Klik kanan pada "Bitvise toterms.exe", dan klik "Izin ...". Dalam dialog, klik Tingkat Lanjut. Dalam dialog baru, klik "Tambah ...", lalu masukkan "Semua Orang". Akhirnya, periksa izin berikut untuk ditolak seperti yang ditunjukkan:Dengan cara ini, Bitvise SSH Server itu sendiri tidak akan lagi dapat mengubah nilai-nilai ini, dan kemudian saya mendapatkan hasil yang benar dari sesi Bitvise SSH saya.
Akhirnya, Oh My Zsh terlihat sama apakah itu melewati Bitvise SSH Server atau tidak.
sumber