Chuyển đổi mã hóa của thiết bị đầu cuối bằng một lệnh


24

Một trong những máy chủ tôi khá thường xuyên sshsử dụng mã hóa phương Tây thay vì utf-8 (và không có cách nào tôi có thể thay đổi điều đó).

Tôi đã bắt đầu viết một tập lệnh bash để kết nối với máy chủ này, vì vậy tôi sẽ không phải gõ toàn bộ địa chỉ mỗi lần, nhưng tôi muốn cải thiện tập lệnh này để nó cũng thay đổi chính xác mã hóa của cửa sổ đầu cuối.

Thay đổi tôi cần thực hiện có thể được thực hiện bằng chuột bằng cách điều hướng đến "Thiết bị đầu cuối" -> "Đặt mã hóa ký tự ..." -> "Phương Tây (ISO-8859-1)". Có một lệnh thiết bị đầu cuối nào làm điều tương tự, cho cửa sổ / màn hình thiết bị đầu cuối hiện tại không?

Để làm rõ:
Tôi không quan tâm đến cách chuyển đổi ngôn ngữ của hệ thống trên trang web từ xa - hệ thống đó được quản lý bởi người khác và tôi không biết công cụ nào có thể phụ thuộc vào mã hóa Latin-1 ở đó. Những gì tôi muốn làm là để cho cửa sổ đầu cuối này ở bên cạnh chuyển mã ký tự sang bên được đề cập ở trên, giống như cách tôi có thể làm với chuột và các menu.


Câu hỏi hay! Các vấn đề về mã hóa thường là Pita ... Đây là một cách không hoạt động ... unix.stackexchange.com/questions/8859/ mẹo
lumbric

2
TẮT làm sao có thể câu trả lời của tôi được chấp nhận nhưng tiền thưởng đã chuyển sang câu trả lời khác? :) :(
törzsmókus 15/03/13

1
@ törzsmókus: Bạn có thể đọc về quy tắc tiền thưởng (mới?) tại đây: blog.stackoverflow.com/2010/06/improvements-to-bounty-system Nếu chủ sở hữu tiền thưởng không trao thưởng tiền thưởng trong thời hạn 7 ngày, thì quy tắc tự động giải thưởng tương tự được áp dụng, như trước đây: bất kỳ câu trả lời nào cho câu hỏi được đăng sau khi tiền thưởng bắt đầu, với ít nhất 2 lần nâng cấp, đủ điều kiện để tự động chấp nhận và kiếm được một nửa số tiền thưởng. Nếu không có câu trả lời nào đáp ứng tiêu chí đó, không có tiền thưởng nào được trao. - và, một lần nữa, tất cả tiền thưởng hoàn toàn độc lập và không liên quan đến việc chấp nhận câu trả lời.
Rune

Câu trả lời:


18

Bạn đang tìm kiếm luitđược thiết kế cho mục đích này:

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

Nó sẽ chuyển đổi đầu ra của lệnh ssh thành UTF-8, do đó bạn không cần thay đổi mã hóa của thiết bị đầu cuối.


2
Chính xác. Tuy nhiên, tôi đã đến đây để tìm kiếm bit này từ trang man của luit: "Luit thường được gọi một cách trong suốt bởi trình giả lập thiết bị đầu cuối." Vì vậy, đối với những người đến đây vì bạn đang nhận được mã hóa sai trong thiết bị đầu cuối của mình, cách khắc phục thông thường là thay đổi mã hóa thông qua trình giả lập thiết bị đầu cuối.
joseph_morris

@joseph_morris hãy để tôi chỉ cho bạn đoạn thứ ba của câu hỏi đang được trả lời. OP đã biết cách thay đổi mã hóa bằng các lệnh menu của trình giả lập thiết bị đầu cuối (mà bạn gọi là cách 'bình thường') nhưng anh ta đang tìm kiếm một giải pháp thay thế CLI.
törzsmókus

1
Phải, đó là lý do tại sao tôi bắt đầu với "Điều này là chính xác." Tuy nhiên, trang này hiện là một trong những lượt truy cập hàng đầu cho "mã hóa đầu cuối" và tôi nghĩ rằng một chút tài liệu luit sẽ hữu ích cho những người khác đến đây cố gắng trả lời "Tại sao mã hóa đầu cuối của tôi bị rối?" - và đó là mã hóa thường được thay đổi trong trình giả lập, không phải CLI.
joseph_morris

ah, bây giờ tôi thấy quan điểm của bạn.
törzsmókus

4

Đầu tiên chỉnh sửa các địa điểm hiện tại trong trình chỉnh sửa yêu thích của bạn

sudo gedit /var/lib/locales/supported.d/local đến một cái gì đó như

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

Sau đó chạy sudo dpkg-reconfigure locales

Sau đó đặt thiết bị đầu cuối với LANG=en_GB.ISO-8859-1

Hy vọng rằng nó hoạt động


4

Gnome Terminal sử dụng gconf để lưu trữ cài đặt. Chúng có thể được thao tác với gconftoolSo, bạn có thể sử dụng:

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

Tôi đã thử nghiệm điều này vào ngày 12.04. Vì một số lý do, menu ( "Terminal"->"Set Character Encoding...") dường như không được cập nhật theo thời gian thực, nhưng mã hóa ký tự thực tế sẽ cập nhật chính xác.


2
nhưng điều này thay đổi mã hóa mặc định cho tất cả các thiết bị đầu cuối, không chỉ mã hóa chạy tập lệnh kết nối ssh.
törzsmókus

3

Tôi không biết cách kiểm tra nó, nhưng với Konsole trên Kubfox tôi có thể làm như sau:

1) Tìm ứng dụng đã đăng ký với dbus

$ qdbus

Tôi sử dụng konsolerất đơn giản qdbus | grep konsmang lại cho tôiorg.kde.konsole

2) Tìm các phiên hiện tại trong Konsole

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

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

3) Tìm phương pháp hữu ích

$ 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) Kiểm tra mã hóa hiện tại

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

5) Đặt mã hóa

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

6) Kiểm tra mã hóa hiện tại

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

Ubuntu sẽ có một chương trình thiết bị đầu cuối tương tự, nhưng bạn sẽ phải tự đánh đố với tên dịch vụ, đường dẫn, phương thức và đối số chính xác.


2

Đây là một giải pháp khác mà tôi đã sử dụng để thay đổi cấu hình (cho màu nền) khi kết nối với máy chủ sản xuất. Nó liên quan xdotool.

xdotoolsẽ mô phỏng các tổ hợp phím cần thiết để chọn mục menu mong muốn. Hãy thử nó với bàn phím của bạn trước, sau đó viết trình tự:

$ xdotool key alt+t Down c Down Return

Nó sẽ kích hoạt mã hóa ký tự đầu tiên. Thêm nhiều Downphím trước khi Returnchọn khác.

Lưu ý: cho ssh, bạn cũng có thể sử dụng một ~/.ssh/configtệp để định cấu hình bí danh cho máy chủ của mình.


Xin lỗi - Tôi có ý đưa cho bạn đại diện tiền thưởng, nhưng đã bấm nhầm bài = (
Tomas Aschan

vì menu của gnome-terminal không được đảm bảo không thay đổi, tôi coi đây là một vụ hack rất mong manh, có thể là điều đúng đắn khi không có giải pháp thực tế. nhưng có một .
törzsmókus

1

Bật xterm, thay đổi mã hóa bằng cách sử dụng các chuỗi điều khiển . Chẳng hạn, trong bashbạn có bộ ký tự UTF-8 bằng cách chạy:

echo -n $'\e%G'

Mã hóa ISO 8859-1 có thể truy cập bằng cách chạy:

echo -n $'\e%@'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.