26

One of the servers I quite often ssh to uses western encoding instead of utf-8 (and there's no way I can change that).

I've started writing a bash script to connect to this server, so I won't have to type out the entire address every time, but I would like to improve this script so it also changes the encoding of the terminal window correctly.

The change I need to do can be performed using the mouse by navigating to "Terminal"->"Set Character Encoding..."->"Western (ISO-8859-1)". Is there a terminal command that does the same thing, for the current terminal window/screen?

To clarify:
I'm not interested in ways of switching the locale of the system on the remote site - that system is administered by someone else, and I have no idea what stuff might depend on the latin-1 encoding there. What I want to do is to let this terminal window on my side switch character encoding to the above mentioned, in the same way I can do with my mouse and the menus.

Tomas Aschan
  • 2,952

6 Answers6

26

You are looking for luit which is designed for this purpose:

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

It will convert the output of the ssh command to UTF-8 so you don’t need to change the encoding of the terminal.

5

Gnome Terminal uses gconf to store settings. These can be manipulated with gconftool So, you can use:

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

I've tested this on 12.04. For some reason, the menu ("Terminal"->"Set Character Encoding...") doesn't seem to get updated in real time, but the actual character encoding does correctly update.

5

On xterm, change the encoding by using control sequences. For instance, within bash you get the UTF-8 character set by running:

echo -n $'\e%G'

The ISO 8859-1 coding is accessible by running:

echo -n $'\e%@'
kos
  • 41,268
4

First edit current locales in your favourite editor

sudo gedit /var/lib/locales/supported.d/local to something like

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

Then run sudo dpkg-reconfigure locales

Then set terminal with LANG=en_GB.ISO-8859-1

Hope that works

Jonathan
  • 656
4

I don't know how to test it, but with Konsole on Kubuntu I can do the following:

1) Find application registered to dbus

$ qdbus

I use konsole so a simple qdbus | grep kons gives me org.kde.konsole

2) Find current sessions in Konsole

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

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

3) Find useful methods

$ 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) Check current encoding

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

5) Set encoding

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

6) Check current encoding

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

Ubuntu will have a similar terminal program, but you'll have to do some puzzling yourself with correct servicename, path, method and arguments.

jippie
  • 5,733
2

Here is another solution I used to change the profile (for background color) when connecting to a production server. It involves xdotool.

xdotool will simulate the keystrokes needed to select the desired menu item. Try it with your keyboard first, then write down the sequence :

$ xdotool key alt+t Down c Down Return

It will activate the first character encoding. Add more Down keys before the Return to select other.

Note: for ssh, you also can use a ~/.ssh/config file to configure aliases to your servers.

kos
  • 41,268
nniico
  • 306