สลับการเข้ารหัสเทอร์มินัลด้วยคำสั่ง


24

หนึ่งในเซิร์ฟเวอร์ที่ฉันมักsshจะใช้การเข้ารหัสแบบตะวันตกแทน utf-8 (และไม่มีทางที่ฉันจะเปลี่ยนได้)

ฉันเริ่มเขียนสคริปต์ทุบตีเพื่อเชื่อมต่อกับเซิร์ฟเวอร์นี้ดังนั้นฉันจึงไม่จำเป็นต้องพิมพ์ที่อยู่ทั้งหมดทุกครั้ง แต่ฉันต้องการปรับปรุงสคริปต์นี้ดังนั้นจึงเปลี่ยนการเข้ารหัสของหน้าต่างเทอร์มินัลอย่างถูกต้อง

การเปลี่ยนแปลงที่ฉันต้องทำสามารถทำได้โดยใช้เมาส์โดยไปที่ "เทอร์มินัล" -> "ตั้งค่าการเข้ารหัสอักขระ ... " -> "Western (ISO-8859-1)" มีคำสั่งเทอร์มินัลที่ทำสิ่งเดียวกันสำหรับหน้าต่าง / หน้าจอเทอร์มินัลปัจจุบันหรือไม่?

เพื่อชี้แจง:
ฉันไม่สนใจวิธีการเปลี่ยนสถานที่ของระบบบนไซต์ระยะไกล - ระบบนั้นเป็นระบบที่จัดการโดยคนอื่นและฉันไม่รู้ว่าสิ่งที่อาจขึ้นอยู่กับการเข้ารหัสละติน -1 สิ่งที่ฉันต้องการทำคือให้หน้าต่างเทอร์มินัลนี้สลับการเข้ารหัสอักขระตามข้างต้นในลักษณะเดียวกับที่ฉันสามารถทำได้ด้วยเมาส์และเมนู


คำถามที่ดี! ปัญหาการเข้ารหัสมักจะเป็น PITA ... นี่คือวิธีที่ใช้ไม่ได้ ... unix.stackexchange.com/questions/8859/…
lumbric

2
ปิดเป็นไปได้อย่างไรที่คำตอบของฉันได้รับการยอมรับ แต่เงินรางวัลไปยังอีกคนหนึ่ง? :) :(
törzsmókus

1
@ törzsmókus: คุณสามารถอ่านเกี่ยวกับ (ใหม่?) กฎการจ่ายเงินรางวัลได้ที่นี่: blog.stackoverflow.com/2010/06/improvements-to-bounty-systemหากเจ้าของรางวัลไม่ได้รับรางวัลเงินรางวัลภายใน 7 วันเงินรางวัล ใช้กฎรางวัลอัตโนมัติเดียวกันเช่นเดียวกับก่อนหน้านี้: คำตอบใด ๆ สำหรับคำถามที่โพสต์หลังจากเงินรางวัลเริ่มต้นด้วยอย่างน้อย 2 upvotes มีสิทธิ์รับการยอมรับอัตโนมัติและรับครึ่งจำนวนเงินรางวัล หากไม่มีคำตอบใด ๆ ที่ตรงกับเกณฑ์ดังกล่าวจะไม่มีการมอบรางวัล - และอีกครั้งค่าหัวทั้งหมดเป็นอิสระอย่างสมบูรณ์และไม่เกี่ยวข้องกับการยอมรับคำตอบ
Rune

คำตอบ:


18

คุณกำลังมองหาluitสิ่งที่ถูกออกแบบมาเพื่อจุดประสงค์นี้:

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

มันจะแปลงเอาต์พุตของคำสั่ง ssh เป็น UTF-8 ดังนั้นคุณไม่จำเป็นต้องเปลี่ยนการเข้ารหัสของเทอร์มินัล


2
สิ่งนี้ถูกต้อง อย่างไรก็ตามฉันลงจอดที่นี่เพื่อค้นหาบิตนี้จากหน้า man ของ luit: "Luit มักจะถูกเรียกใช้อย่างโปร่งใส ดังนั้นสำหรับผู้ที่มาถึงที่นี่เพราะคุณได้รับการเข้ารหัสที่ผิดมาทางเทอร์มินัลวิธีปกติในการแก้ไขคือการเปลี่ยนการเข้ารหัสผ่านเทอร์มินัลอีมูเลเตอร์
joseph_morris

@joseph_morris ให้ฉันแนะนำคุณไปยังย่อหน้าที่สามของคำถามที่ตอบ สหกรณ์ไม่ทราบวิธีการเปลี่ยนการเข้ารหัสโดยใช้เมนูคำสั่งของจำลอง terminal (ที่คุณโทรหาวิธีที่ 'ปกติ') แต่เขาก็มองหาทางเลือก CLI
törzsmókus

1
นั่นคือสาเหตุที่ฉันเริ่มด้วย "สิ่งนี้ถูกต้อง" อย่างไรก็ตามตอนนี้หน้านี้เป็นหนึ่งในเพลงยอดนิยมสำหรับ "การเข้ารหัสเทอร์มินัล" และฉันคิดว่าเอกสาร luit จะเป็นประโยชน์สำหรับผู้อื่นที่มาที่นี่เพื่อพยายามตอบ "ทำไมการเข้ารหัสเทอร์มินัลของฉันยุ่งเหยิง" - และการเข้ารหัสนั้นมักจะเปลี่ยนแปลงในอีมูเลเตอร์ไม่ใช่ 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 Terminal ใช้ 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

ฉันไม่รู้วิธีทดสอบ แต่ด้วย Konsole บน Kubuntu ฉันสามารถทำสิ่งต่อไปนี้:

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ไฟล์เพื่อกำหนดค่านามแฝงให้กับเซิร์ฟเวอร์ของคุณ


ขออภัย - ฉันตั้งใจจะให้ตัวแทนเงินรางวัลแก่คุณ แต่คลิกโพสต์ผิด = (
โทมัสอัสชาน

เนื่องจากเมนูของ 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.