Terminalin kodlamasını bir komutla değiştirin


24

Sık sık sshutf-8 yerine western encoding kullandığım sunuculardan biri (ve bunu değiştirmeme imkân yok).

Bu sunucuya bağlanmak için bir bash betiği yazmaya başladım, bu yüzden her seferinde adresin tamamını yazmak zorunda kalmayacağım, ancak bu betiği geliştirmek istiyorum, böylece terminal penceresinin kodlamasını da doğru şekilde değiştirebiliyorum.

Yapmam gereken değişiklik "Terminal" -> "Karakter Kodlamasını Ayarla ..." -> "Western (ISO-8859-1)" seçeneğine giderek fare kullanılarak yapılabilir. Geçerli terminal penceresi / ekranı için aynı şeyi yapan bir terminal komutu var mı?

Netleştirmek için:
Ben değilim değil uzak sitede sistemin yerel anahtarlama yolları ilgilenen - Sistem başkası tarafından yönetilmektedir o ve ben şeyler var kodlayan latin-1 bağlı olabilir hiçbir fikrim yok. Yapmak istediğim , yanımda bu terminal penceresinin yukarıda belirtilenleri kodlayan anahtar değiştirme karakterine izin vermek , aynı şekilde farem ve menülerle de yapabiliyorum.


İyi soru! Sorunları genelde bir PİDE vardır Kodlama ... Bu yolu olan olmaz eser ... unix.stackexchange.com/questions/8859/...
lumbric

2
KAPALI cevabımın kabulü nasıl mümkün olabilir, ancak ödül başka bir soruya mı gitti? :) :(
törzsmókus

1
@ törzsmókus: Sen (? yeni) lütuf okuyabilirsiniz burada kuralları: blog.stackoverflow.com/2010/06/improvements-to-bounty-system kelle sahibi 7 gün kelle süre içinde ödül verirler vermezse, önceden olduğu gibi aynı otomatik ödül kuralları geçerlidir: ödül başladıktan sonra gönderilen soruya verilen cevaplar, en az 2 oy ile, otomatik kabul için uygundur ve ödül miktarının yarısını kazanır. Bu kriterlere uyan herhangi bir cevap yoksa, hiçbir ödül verilmemektedir. - ve, yine, tüm ödüller tamamen cevaplıdır ve cevap kabul etmeyle ilgilidir.
Rune

Yanıtlar:


18

luitBu amaç için tasarlanmış olanı arıyorsunuz :

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

Ssh komutunun çıktısını UTF-8'e çevirir, böylece terminalin kodlamasını değiştirmenize gerek kalmaz.


2
Doğru. Bununla birlikte, bu parçayı luit'in man sayfasından aramak için buraya geldim: "Luit genellikle terminal emülatörü tarafından şeffaf şekilde çağrılır." Bu yüzden, buraya gelenler için terminalinizde yanlış kodlama oluyorsunuz, bunu düzeltmenin normal yolu kodlamayı terminal emülatöründen değiştirmek.
joseph_morris

@joseph_morris, soruyu yanıtlamanın üçüncü paragrafına yönlendirmeme izin verir. OP , terminal emülatörünün menü komutlarını kullanarak kodlamayı nasıl değiştireceğinizi biliyordu (“normal” yol diyorsunuz), ancak bir CLI alternatifi arıyordu.
törzsmókus

1
Doğru, bu yüzden "Bu doğru." İle başladım. Bununla birlikte, bu sayfa şimdi "terminal kodlaması" için en önemli sonuçlardan biri ve "Terminal kodlama neden karışık?" Sorusuna cevap vermeye çalışarak başkalarına luit belgelerinin bitinin yararlı olacağını düşündüm. - ve kodlamanın genellikle emülatörde değiştirildiğini, CLI'yi değil.
joseph_morris

ah, şimdi amacını anlıyorum.
törzsmókus

4

İlk önce en sevdiğiniz düzenleyicide mevcut yerel ayarları düzenleyin

sudo gedit /var/lib/locales/supported.d/local gibi bir şeye

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

O zaman koş sudo dpkg-reconfigure locales

Sonra terminali ile ayarlayın LANG=en_GB.ISO-8859-1

Umarım işe yarar


4

Gnome Terminali ayarları saklamak için gconf kullanır. Bunlar ile manipüle edilebilir gconftoolYani, kullanabilirsiniz:

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

Bunu 12.04'te test ettim. Nedense, menü ( "Terminal"->"Set Character Encoding...") gerçek zamanlı olarak güncellenmiyor gibi görünüyor, ancak gerçek karakter kodlaması doğru şekilde güncelleniyor.


2
ancak bu , sadece ssh bağlantı kodunu çalıştıran kodları değil, tüm terminallerin varsayılan kodlamasını değiştirir .
törzsmókus

3

Nasıl test edileceğini bilmiyorum ama Kubuntu'daki Konsole ile aşağıdakileri yapabilirim:

1) dbus'a kayıtlı uygulamayı bulun

$ qdbus

Çok konsolebasit kullanıyorum qdbus | grep konsbana verirorg.kde.konsole

2) Konsole'daki güncel oturumları bulun

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

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

3) Yararlı yöntemler bulun

$ 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) Akım kodlamasını kontrol edin

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

5) Kodlamayı ayarla

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

6) Akım kodlamasını kontrol edin

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

Ubuntu'da benzer bir terminal programı olacaktır, ancak doğru hizmet adı, yol, yöntem ve argümanlar ile kendinizi şaşırtmak zorunda kalacaksınız.


2

Bir üretim sunucusuna bağlanırken profili (arka plan rengi için) değiştirmek için kullandığım başka bir çözüm. İçerir xdotool.

xdotoolİstenilen menü öğesini seçmek için gereken tuş vuruşlarını simüle edecek. Önce klavyenizle deneyin, ardından sırayı yazın:

$ xdotool key alt+t Down c Down Return

İlk karakter kodlamasını etkinleştirir. Daha ekleyin Downönce anahtarlarını Returndiğer seçin.

Not: çünkü sunucularınıza takma isim yapılandırmak sshiçin bir ~/.ssh/configdosya da kullanabilirsiniz .


Üzgünüm - size ödül temsilcisi vermek istedim ama yanlış yazıya tıkladım = (
Tomas Aschan

GNOME-terminalinin menüsünün değişmemesi garanti edilmediğinden, bunun gerçek bir çözüm olmadığı zaman doğru olan, çok kırılgan bir hack olduğunu düşünüyorum . ama bir tane var .
törzsmókus

1

Açık xterm, kontrol dizilerini kullanarak kodlamayı değiştirin . Örneğin, içinde bashkoşarak ayarlanan UTF-8 karakterini elde edersiniz:

echo -n $'\e%G'

ISO 8859-1 kodlamasına çalıştırılarak erişilebilir:

echo -n $'\e%@'
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.