Cambia la codifica del terminale con un comando


24

Uno dei server che uso abbastanza spesso sshusa la codifica western invece di utf-8 (e non c'è modo di cambiarlo).

Ho iniziato a scrivere uno script bash per connettermi a questo server, quindi non dovrò digitare l'intero indirizzo ogni volta, ma vorrei migliorare questo script in modo che cambi anche correttamente la codifica della finestra del terminale.

La modifica che devo fare può essere eseguita usando il mouse andando su "Terminale" -> "Imposta codifica caratteri ..." -> "Occidentale (ISO-8859-1)". Esiste un comando terminale che fa la stessa cosa, per l'attuale finestra / schermo del terminale?

Per chiarire:
Io non interessato a modi per passare le impostazioni internazionali del sistema sul sito remoto - che il sistema è amministrato da qualcun altro, e non ho idea di che pasta potrebbe dipendere dal latin-1 codifica lì. Quello che voglio fare è lasciare che questa finestra del terminale sul mio interruttore laterale codifichi il carattere sopra menzionato, nello stesso modo in cui posso fare con il mouse e i menu.


Buona domanda! I problemi di codifica sono spesso una PITA ... Questo è un modo che non funzionerà ... unix.stackexchange.com/questions/8859/…
lumbric

2
OFF come è possibile che la mia risposta sia accettata ma la generosità è andata a un'altra? :) :(
törzsmókus

1
@ törzsmókus: Puoi leggere le (nuove?) regole di ricompensa qui: blog.stackoverflow.com/2010/06/improvements-to-bounty-system Se il proprietario della taglia non assegna la taglia entro il periodo di 7 giorni, il valgono le stesse regole di assegnazione automatica, come in precedenza: qualsiasi risposta alla domanda pubblicata dopo l'inizio della taglia, con almeno 2 voti, è ammissibile all'accettazione automatica e guadagna metà dell'importo della taglia. Se non ci sono risposte che soddisfano tali criteri, non viene assegnato alcun premio. - e, di nuovo, tutti i doni sono completamente indipendenti e non correlati all'accettazione di una risposta.
Rune,

Risposte:


18

Stai cercando luitquale è progettato per questo scopo:

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

Converte l'output del comando ssh in UTF-8, quindi non è necessario modificare la codifica del terminale.


2
Questo è corretto. Tuttavia, sono arrivato qui cercando questo bit dalla pagina man di luit: "Luit è di solito invocato in modo trasparente dall'emulatore di terminale". Quindi, per coloro che arrivano qui perché stai riscontrando una codifica errata nel tuo terminale, il modo normale per risolverlo è cambiare la codifica tramite l'emulatore di terminale.
joseph_morris,

@joseph_morris lascia che ti indichi il terzo paragrafo della domanda a cui si risponde. l'OP ha fatto sapere come cambiare la codifica utilizzando i comandi di menu del emulatore di terminale (che si chiama il modo 'normale'), ma era alla ricerca di un'alternativa CLI.
törzsmókus,

1
Bene, ecco perché ho iniziato con "Questo è corretto". Tuttavia, questa pagina è ora uno dei principali successi della "codifica terminale" e ho pensato che un po 'di documentazione sull'illuminato sarebbe stata utile per gli altri che arrivano qui cercando di rispondere "Perché la mia codifica terminale è incasinata?" - e che la codifica di solito viene modificata nell'emulatore, non nella CLI.
joseph_morris,

ah, ora vedo il tuo punto.
törzsmókus,

4

Prima modifica le impostazioni locali correnti nel tuo editor preferito

sudo gedit /var/lib/locales/supported.d/local a qualcosa del genere

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

Quindi corri sudo dpkg-reconfigure locales

Quindi impostare il terminale con LANG=en_GB.ISO-8859-1

Spero che funzioni


4

Gnome Terminal utilizza gconf per memorizzare le impostazioni. Questi possono essere manipolati con gconftoolQuindi, puoi usare:

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

L'ho provato su 12.04. Per qualche motivo, il menu ( "Terminal"->"Set Character Encoding...") non sembra essere aggiornato in tempo reale, ma la codifica dei caratteri effettivi si aggiorna correttamente.


2
ma questo cambia la codifica predefinita per tutti i terminali, non solo quella che esegue lo script di connessione ssh.
törzsmókus,

3

Non so come testarlo, ma con Konsole su Kubuntu posso fare quanto segue:

1) Trova l'applicazione registrata su dbus

$ qdbus

Uso konsolecosì un semplice qdbus | grep konsmi dàorg.kde.konsole

2) Trova le sessioni correnti in Konsole

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

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

3) Trova metodi utili

$ 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) Controlla la codifica corrente

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

5) Imposta la codifica

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

6) Controlla la codifica corrente

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

Ubuntu avrà un programma terminale simile, ma dovrai scervellarti con il nome di servizio, il percorso, il metodo e gli argomenti corretti.


2

Ecco un'altra soluzione che ho usato per cambiare il profilo (per il colore di sfondo) durante la connessione a un server di produzione. Coinvolge xdotool.

xdotoolsimulerà le sequenze di tasti necessarie per selezionare la voce di menu desiderata. Provalo prima con la tastiera, quindi annota la sequenza:

$ xdotool key alt+t Down c Down Return

Attiverà la prima codifica dei caratteri. Aggiungi più Downchiavi prima Returndi selezionare altre.

Nota: per ssh, è inoltre possibile utilizzare un ~/.ssh/configfile per configurare gli alias per i server.


Scusa, volevo darti il ​​rappresentante della taglia, ma ho cliccato sul post sbagliato = (
Tomas Aschan,

poiché non è garantito che il menu di gnome-terminal non cambi, lo considero un hack molto fragile, che potrebbe essere la cosa giusta quando non esiste una soluzione reale. ma ce n'è uno .
törzsmókus,

1

Attivo xterm, modifica la codifica utilizzando le sequenze di controllo . Ad esempio, all'interno di bashte ottieni il set di caratteri UTF-8 eseguendo:

echo -n $'\e%G'

La codifica ISO 8859-1 è accessibile eseguendo:

echo -n $'\e%@'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.