Ganti pengkodean terminal dengan perintah

24

Salah satu server saya cukup sering sshmenggunakan pengkodean barat alih-alih utf-8 (dan tidak ada cara saya bisa mengubahnya).

Saya sudah mulai menulis skrip bash untuk terhubung ke server ini, jadi saya tidak perlu mengetikkan seluruh alamat setiap kali, tetapi saya ingin meningkatkan skrip ini sehingga juga mengubah pengkodean jendela terminal dengan benar.

Perubahan yang perlu saya lakukan dapat dilakukan dengan menggunakan mouse dengan menavigasi ke "Terminal" -> "Set Character Encoding ..." -> "Western (ISO-8859-1)". Apakah ada perintah terminal yang melakukan hal yang sama, untuk jendela / layar terminal saat ini?

Untuk memperjelas:
Saya tidak tertarik dengan cara mengalihkan lokal sistem di situs jarak jauh - sistem itu dikelola oleh orang lain, dan saya tidak tahu hal-hal apa yang mungkin bergantung pada pengkodean latin-1 di sana. Yang ingin saya lakukan adalah membiarkan jendela terminal ini di sisi saya beralih pengkodean karakter ke yang disebutkan di atas, dengan cara yang sama dapat saya lakukan dengan mouse saya dan menu.

Tomas Aschan
sumber
Pertanyaan bagus! Masalah penyandian seringkali merupakan PITA ... Ini adalah cara yang tidak akan berhasil ... unix.stackexchange.com/questions/8859/…
lumbric
2
MATI bagaimana mungkin jawaban saya diterima tetapi hadiahnya masuk ke yang lain? :) :(
törzsmókus
1
@ törzsmókus: Anda dapat membaca tentang aturan hadiah (baru?) di sini: blog.stackoverflow.com/2010/06/improvements-to-bounty-system Jika pemilik karunia tidak memberikan hadiah dalam periode 7 hari karunia, maka aturan pemberian otomatis yang sama berlaku, seperti sebelumnya: setiap jawaban atas pertanyaan yang diposting setelah hadiah dimulai, dengan setidaknya 2 kenaikan suara, memenuhi syarat untuk menerima otomatis dan mendapatkan setengah dari jumlah hadiah. Jika tidak ada jawaban yang memenuhi kriteria itu, tidak ada hadiah yang diberikan. - dan, sekali lagi, semua karunia sepenuhnya independen dan tidak terkait dengan menerima jawaban.
Rune

Jawaban:

18

Anda mencari luityang dirancang untuk tujuan ini:

$ luit -encoding ISO-8859-1 ssh remote.host

Ini akan mengubah output dari perintah ssh ke UTF-8 sehingga Anda tidak perlu mengubah pengkodean terminal.

törzsmókus
sumber
2
Ini benar. Namun, saya mendarat di sini mencari bit ini dari halaman manual luit: "Luit biasanya dipanggil secara transparan oleh terminal emulator." Jadi, bagi mereka yang tiba di sini karena Anda mendapatkan pengkodean yang salah melalui terminal Anda, cara normal untuk memperbaikinya adalah dengan mengubah pengkodean melalui emulator terminal.
joseph_morris
@joseph_morris izinkan saya mengarahkan Anda ke paragraf ketiga dari pertanyaan yang dijawab. OP memang tahu bagaimana mengubah pengkodean menggunakan perintah menu emulator terminal (yang Anda sebut cara 'normal') tetapi dia sedang mencari alternatif CLI.
törzsmókus
1
Benar, itu sebabnya saya mulai dengan "Ini benar." Namun, halaman ini sekarang menjadi salah satu hit teratas untuk "terminal encoding", dan saya pikir sedikit dokumentasi luit akan membantu bagi orang lain yang tiba di sini mencoba menjawab "Mengapa pengkodean terminal saya kacau?" - dan bahwa itu pengkodean biasanya berubah di emulator, bukan CLI.
joseph_morris
ah, sekarang saya mengerti maksud Anda.
törzsmókus
4

Pertama-tama edit lokal saat ini di editor favorit Anda

sudo gedit /var/lib/locales/supported.d/local untuk sesuatu seperti

en_GB.UTF-8 UTF-8
en_US.UTF-8 UTF-8
en_GB.ISO-8859-1 ISO-8859-1
en_US.ISO-8859-1 ISO-8859-1

Lalu lari sudo dpkg-reconfigure locales

Kemudian atur terminal dengan LANG=en_GB.ISO-8859-1

Semoga itu berhasil

Jonathan
sumber
4

Terminal Gnome menggunakan gconf untuk menyimpan pengaturan. Ini dapat dimanipulasi dengan gconftoolJadi, Anda dapat menggunakan:

gconftool --set --type=string /apps/gnome-terminal/profiles/Default/encoding ISO-8859-1

Saya sudah menguji ini pada 12,04. Untuk beberapa alasan, menu ( "Terminal"->"Set Character Encoding...") tampaknya tidak diperbarui secara real time, tetapi pengkodean karakter yang sebenarnya tidak benar diperbarui.

andrewsomething
sumber
2
tetapi ini mengubah penyandian default untuk semua terminal, bukan hanya yang menjalankan skrip koneksi ssh.
törzsmókus
3

Saya tidak tahu cara mengujinya, tetapi dengan Konsole di Kubuntu saya dapat melakukan hal berikut:

1) Temukan aplikasi yang terdaftar di dbus

$ qdbus

Saya menggunakan konsolebegitu sederhana qdbus | grep konsmemberi sayaorg.kde.konsole

2) Temukan sesi saat ini di Konsole

$ qdbus org.kde.konsole | grep Sessions
/Sessions
/Sessions/1

$ set | grep -i sessions
KONSOLE_DBUS_SESSION=/Sessions/1

3) Temukan metode yang bermanfaat

$ qdbus org.kde.konsole /Sessions/1 | grep -i codec
method QByteArray org.kde.konsole.Session.codec()
method bool org.kde.konsole.Session.setCodec(QByteArray codec)

4) Periksa penyandian saat ini

$ qdbus org.kde.konsole /Sessions/1 org.kde.konsole.Session.codec
UTF-8

5) Atur pengodean

$ qdbus org.kde.konsole /Sessions/1 org.kde.konsole.Session.setCodec ISO-8859-1
true

6) Periksa penyandian saat ini

$ qdbus org.kde.konsole /Sessions/1 org.kde.konsole.Session.codec
ISO-8859-1

Ubuntu akan memiliki program terminal yang serupa, tetapi Anda harus membuat diri Anda bingung dengan nama servis, jalur, metode, dan argumen yang benar.

jippie
sumber
2

Berikut adalah solusi lain yang saya gunakan untuk mengubah profil (untuk warna latar belakang) saat menghubungkan ke server produksi. Itu melibatkan xdotool.

xdotoolakan mensimulasikan penekanan tombol yang diperlukan untuk memilih item menu yang diinginkan. Cobalah dulu dengan keyboard Anda, kemudian tulis urutannya:

$ xdotool key alt+t Down c Down Return

Ini akan mengaktifkan pengkodean karakter pertama. Tambahkan lebih banyak Downtombol sebelum Returnuntuk memilih yang lain.

Catatan: untuk ssh, Anda juga dapat menggunakan ~/.ssh/configfile untuk mengonfigurasi alias ke server Anda.

nniico
sumber
Maaf - saya bermaksud memberi Anda rep bounty, tetapi mengklik salah pos = (
Tomas Aschan
karena menu gnome-terminal tidak dijamin tidak berubah, saya menganggap ini peretasan yang sangat rapuh, yang mungkin merupakan hal yang tepat ketika tidak ada solusi aktual. tapi ada satu .
törzsmókus
1

Aktif xterm, ubah pengkodean dengan menggunakan urutan kontrol . Misalnya, di dalam diri bashAnda karakter UTF-8 ditetapkan dengan menjalankan:

echo -n $'\e%G'

Pengodean ISO 8859-1 dapat diakses dengan menjalankan:

echo -n $'\e%@'
vsnprintf
sumber