Alterne a codificação do terminal com um comando

24

Um dos servidores que utilizo frequentemente sshusa a codificação ocidental em vez do utf-8 (e não há como eu mudar isso).

Comecei a escrever um script bash para conectar-me a este servidor, portanto não precisarei digitar o endereço inteiro todas as vezes, mas gostaria de melhorar esse script para que ele também altere a codificação da janela do terminal corretamente.

A alteração que preciso fazer pode ser realizada usando o mouse, navegando para "Terminal" -> "Definir codificação de caracteres ..." -> "Western (ISO-8859-1)". Existe um comando do terminal que faz a mesma coisa para a janela / tela atual do terminal?

Para esclarecer:
eu estou não interessados em maneiras de comutar a localidade do sistema no site remoto - que o sistema é administrado por outra pessoa, e eu não tenho idéia do que o material pode depender do 1 latino-codificação aí. O que eu quero fazer é deixar essa janela do terminal alternar a codificação de caracteres para o mencionado acima, da mesma maneira que posso fazer com o mouse e os menus.

Tomas Aschan
fonte
Boa pergunta! Codificação problemas são muitas vezes uma PITA ... Esta é uma maneira que não vai trabalhar ... unix.stackexchange.com/questions/8859/...
lumbric
2
OFF como é possível que minha resposta seja aceita, mas a recompensa foi para outra? :) :(
törzsmókus 15/03
1
@ törzsmókus: Você pode ler sobre as (novas?) regras de recompensa aqui: blog.stackoverflow.com/2010/06/improvements-to-bounty-system Se o proprietário da recompensa não a conceder dentro do período de 7 dias, o aplicam-se as mesmas regras de premiação automática, como antes: quaisquer respostas à pergunta postada após o início da recompensa, com pelo menos 2 votos positivos, são elegíveis para aceitação automática e ganham metade do valor da recompensa. Se não houver respostas que atendam a esse critério, nenhuma recompensa será concedida. - e, novamente, todas as recompensas são completamente independentes e não estão relacionadas à aceitação de uma resposta.
Rune

Respostas:

18

Você está procurando o luitque foi projetado para esta finalidade:

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

Ele converterá a saída do comando ssh para UTF-8, para que você não precise alterar a codificação do terminal.

törzsmókus
fonte
2
Isto está correto. No entanto, cheguei aqui procurando este trecho da página de manual do luit: "O luit geralmente é chamado de forma transparente pelo emulador de terminal". Portanto, para quem chega aqui porque está recebendo uma codificação incorreta no terminal, a maneira normal de corrigi-la é alterando a codificação pelo emulador de terminal.
Joseph_morris
@joseph_morris, deixe-me apontar para o terceiro parágrafo da pergunta que está sendo respondida. o OP se sabe como alterar a codificação usando os comandos de menu do emulador de terminal (que vocês chamam a maneira 'normal'), mas ele estava à procura de uma alternativa CLI.
törzsmókus
1
Certo, foi por isso que comecei com "Isso está correto". No entanto, esta página é agora uma das principais ocorrências da "codificação de terminal", e achei que essa documentação seria útil para quem chega aqui tentando responder "Por que minha codificação de terminal está bagunçada?" - e que a codificação geralmente é alterada no emulador, não na CLI.
Joseph_morris 25/05
ah, agora entendo o seu ponto.
törzsmókus 26/05
4

Primeiro edite as localidades atuais em seu editor favorito

sudo gedit /var/lib/locales/supported.d/local para algo como

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

Então corra sudo dpkg-reconfigure locales

Em seguida, defina o terminal com LANG=en_GB.ISO-8859-1

Espero que funcione

Jonathan
fonte
4

O Terminal Gnome usa o gconf para armazenar configurações. Eles podem ser manipulados com gconftoolEntão, você pode usar:

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

Eu testei isso em 12.04. Por alguma razão, o menu ( "Terminal"->"Set Character Encoding...") não parece ser atualizado em tempo real, mas a codificação de caracteres real é atualizada corretamente.

andrewsomething
fonte
2
mas isso altera a codificação padrão para todos os terminais, não apenas aquele que executa o script de conexão ssh.
törzsmókus
3

Não sei como testá-lo, mas com o Konsole no Kubuntu eu posso fazer o seguinte:

1) Encontre o aplicativo registrado no dbus

$ qdbus

Eu uso konsoleassim um simples qdbus | grep konsme dáorg.kde.konsole

2) Encontre as sessões atuais no Konsole

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

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

3) Encontre métodos úteis

$ 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) Verifique a codificação atual

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

5) Definir codificação

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

6) Verifique a codificação atual

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

O Ubuntu terá um programa de terminal semelhante, mas você terá que se intrometer com o nome de serviço, caminho, método e argumentos corretos.

jippie
fonte
2

Aqui está outra solução que eu usei para alterar o perfil (para cor de plano de fundo) ao conectar a um servidor de produção. Isso envolve xdotool.

xdotoolsimulará as teclas necessárias para selecionar o item de menu desejado. Experimente primeiro com o teclado e depois escreva a sequência:

$ xdotool key alt+t Down c Down Return

Ele ativará a primeira codificação de caracteres. Adicione mais Downteclas antes do Returnpara selecionar outro.

Nota: para ssh, você também pode usar um ~/.ssh/configarquivo para configurar aliases em seus servidores.

nniico
fonte
Desculpe - eu queria lhe dar o representante de recompensa, mas clicou no post errado = (
Tomas Aschan 15/04/12
como não é garantido que o menu do gnome-terminal não mude, considero este um hack altamente frágil, que pode ser a coisa certa quando não existe uma solução real. mas existe um .
törzsmókus 7/12/12
1

Ativado xterm, altere a codificação usando seqüências de controle . Por exemplo, bashvocê recebe o conjunto de caracteres UTF-8 executando:

echo -n $'\e%G'

A codificação ISO 8859-1 pode ser acessada executando:

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