コマンドで端末のエンコードを切り替える


24

私がよくssh使うサーバーの1つは、utf-8の代わりにウエスタンエンコーディングを使用しています(これを変更する方法はありません)。

このサーバーに接続するためにbashスクリプトを書き始めたので、毎回アドレス全体を入力する必要はありませんが、このスクリプトを改善して、ターミナルウィンドウのエンコードも正しく変更したいと思います。

必要な変更は、「ターミナル」->「文字エンコーディングの設定...」->「西部(ISO-8859-1)」に移動して、マウスを使用して実行できます。現在の端末ウィンドウ/画面に対して同じことを行う端末コマンドはありますか?

明確にする:
私はしていないリモートサイトにシステムのロケールを切り替える方法に興味がある-システムが他の人によって投与されていることを、私はものがあっエンコードラテン-1に依存かもしれないものは考えています。私がやりたいのは、マウスとメニューでできるのと同じように、側のこの端末ウィンドウで文字エンコードを上記のものに切り替えることです。


良い質問!エンコーディングの問題は、多くの場合、PITA ...これはどの方法であるしません仕事... unix.stackexchange.com/questions/8859/...
lumbric

2
OFFどうすれば私の答えは受け入れられますが、賞金は別のものに行きますか?:) :(
törzsmókus

1
@törzsmókus:(新しい?)バウンティルールについては、こちらをご覧ください:blog.stackoverflow.com/2010/06/improvements-to-bounty-systemバウンティオーナーが7日間のバウンティ期間内にバウンティを授与しない場合、前と同じ自動アワードルールが適用されます。賞金が開始された後に投稿された質問に対する回答は、少なくとも2回の賛成票で自動承認され、賞金の半分を獲得できます。その基準を満たす回答がない場合、賞金は授与されません。—また、すべての報奨金は、回答の受け入れとは完全に独立しており、無関係です。
ルーン

回答:


18

luitこの目的のために設計されているものを探しています:

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

sshコマンドの出力をUTF-8に変換するため、端末のエンコードを変更する必要はありません。


2
これは正しいです。ただし、luitのmanページからこのビットを探してここに着きました。「Luitは通常、ターミナルエミュレータによって透過的に呼び出されます。」したがって、端末で間違ったエンコードが発生しているためにここに到着した人にとって、それを修正する通常の方法は、ターミナルエミュレータを使用してエンコードを変更することです。
joseph_morris

@joseph_morrisでは、回答されている質問の3番目の段落を示します。OP 、ターミナルエミュレータのメニューコマンドを使用してエンコードを変更する方法を知っていました(「通常」の方法と呼びます)が、CLIの代替手段を探していました。
törzsmókus

1
そう、だから私は「これは正しい」と始めました。しかし、このページは現在「ターミナルエンコーディング」のトップヒットの1つであり、「ターミナルエンコーディングが台無しになっているのはなぜですか」と答えようとしてここに到着する他の人にとっては、ちょっとしたルテ資料が役立つと思いました。-そして、それは通常、CLIではなく、エミュレータで変更されたエンコーディングです。
joseph_morris

ああ、今私はあなたの要点を見ます。
törzsmókus

4

まず、お気に入りのエディターで現在のロケールを編集します

sudo gedit /var/lib/locales/supported.d/local のようなものに

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

次に実行する sudo dpkg-reconfigure locales

次に、ターミナルを設定します LANG=en_GB.ISO-8859-1

うまくいくことを願って


4

Gnomeターミナルはgconfを使用して設定を保存します。これらを使用して操作gconftoolできるため、次を使用できます。

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

これを12.04でテストしました。何らかの理由で、メニュー("Terminal"->"Set Character Encoding...")はリアルタイムで更新されないようですが、実際の文字エンコーディングは正しく更新されます。


2
ただし、これにより、ssh接続スクリプトを実行している端末だけでなく、すべての端末のデフォルトエンコーディングが変更されます。
törzsmókus

3

私はそれをテストする方法がわかりませんが、KubuntuのKonsoleで次のことができます:

1)dbusに登録されているアプリケーションを見つける

$ qdbus

私が使用konsole単純なので、qdbus | grep kons私を与えますorg.kde.konsole

2)Konsoleで現在のセッションを見つける

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

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

3)便利な方法を見つける

$ 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)現在のエンコードを確認する

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

5)エンコードの設定

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

6)現在のエンコードを確認する

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

Ubuntuには同様のターミナルプログラムがありますが、正しいサービス名、パス、メソッド、および引数を使用して、いくつかの不可解な作業を行う必要があります。


2

運用サーバーに接続するときに(背景色の)プロファイルを変更するために使用した別のソリューションを次に示します。それが含まれますxdotool

xdotool目的のメニュー項目を選択するために必要なキーストロークをシミュレートします。まずキーボードで試してから、シーケンスを書き留めます。

$ xdotool key alt+t Down c Down Return

最初の文字エンコーディングを有効にします。他のDownキーを追加する前に追加Returnします。

注:sshでは、~/.ssh/configファイルを使用してサーバーのエイリアスを設定することもできます。


申し訳ありません-報奨金を提供するつもりでしたが、間違った投稿をクリックしました=(
Tomas Aschan

gnome-terminalのメニューは変更されないことが保証されていないため、これは非常に脆弱なハックであると考えています。実際の解決策がない場合は正しいことです。があります。
törzsmókus

1

xterm制御シーケンスを使用してエンコードを変更します。たとえばbash、次のコマンドを実行して、UTF-8文字セットを取得します。

echo -n $'\e%G'

ISO 8859-1コーディングは、次を実行することでアクセスできます。

echo -n $'\e%@'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.