Bitvise SSH Server menempatkan ruang ekstra di sesi

1

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:

Perbedaan antara sesi yang melewati Bitvise dan yang tidak

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 tigermesin) 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-terminalatau xfce4-terminalsebagai 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 setdi kedua lingkungan, dan mendapat keluaran dibuang ke dua file teks: bitvise.txt dan local.txt . Sekarang masalah terbesar adalah saya tidak bisa membandingkannya menggunakan diffkarena diffmereka mengklaim file biner (dan mereka berbeda). Saya tidak yakin apakah ini ada hubungannya dengan ruang-ruang aneh.

Memaksa LANGpada difftidak 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 TERMpengaturan berbeda ... Tampaknya tidak melakukan sesuatu yang baik. Pengaturan TERM=linuxmenghasilkan sama dengan xterm.

Pengaturan JANGKA berbeda


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/bashuntuk 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.

bfrguci
sumber
gunakan setuntuk membuang pengaturan penuh dalam beberapa kasus. Mungkin Anda dapat menemukan perbedaan
matzeri
@matzeri Akhirnya punya waktu untuk melakukan ini ... Saya melakukannya set > local.txtsecara lokal dan melakukan set > bitvise.txtsesi SSH untuk localhost. Sekarang saya mendapatkan dua file, keduanya sangat besar dan tidak persis sama. Namun diffmengklaim mereka adalah file biner sehingga tidak menghasilkan perbedaan dalam garis ... Masih mencoba mencari cara untuk ini ...
bfrguci
lokasi yang berbeda? lihat man iconvuntuk konversi
matzeri
@matzeri Mereka sepertinya bukan lokal yang berbeda karena mereka berdua UTF-8 ketika saya membukanya dengan Sublime Text ... Apakah mereka terlalu besar untuk diff(atau terlalu banyak perbedaan)?
bfrguci
diff dapat menangani file besar dan semua file berbeda. Jika ia mengeluh tentang biner atau lokal Anda bukan UTF8 atau salah satu caracther bukan UTF8 yang valid. Anda juga dapat mencoba LANG=C diff -uN file1 file2atauLANG=en_US.UTF-8 diff -uN file1 file2
matzeri

Jawaban:

2

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.

denis bider
sumber
Anda mungkin benar ... Oh My Zsh tidak terlihat benar di konsol Windows - tetapi juga terlihat berbeda dengan yang saya lihat di sesi Bitvise.
bfrguci
Jika masalah dengan konsol Windows, apakah ada kemungkinan perbaikan untuk itu?
bfrguci
Jika Oh My Zsh tidak terlihat benar di konsol Windows, masalah ini kemungkinan harus diperbaiki oleh pengelola proyek Oh My Zsh - dengan asumsi mereka ingin memperbaikinya. Mungkin juga konfigurasi Oh My Zsh dapat diubah untuk mengatasi masalah ini, tetapi saya tidak memiliki pengalaman untuk mengatakan apakah ini mungkin atau tidak.
denis bider
Apakah mungkin Anda tidak menggunakan terminal Windows tetapi MinTTY atau yang lainnya?
bfrguci
1
Secara teori akan mungkin tetapi bukan pilihan arsitektur yang baik untuk server Windows SSH yang perlu menyediakan akses ke program mode konsol Windows, tidak terkecuali PowerShell. MinTTY tidak bekerja dengan baik dengan PowerShell, atau dengan semua jenis program mode konsol Windows pada umumnya.
denis bider
1

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 $TREMvariabel lingkungan dan terminfofile 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 yang CodePageakan diatur ke 437 (desimal). Saya juga dihapus FaceNamekarena tidak terdengar sama sekali.

masukkan deskripsi gambar di sini

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.exeuntuk 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:

masukkan deskripsi gambar di sini

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.

masukkan deskripsi gambar di sini

bfrguci
sumber