เทอร์มินัลใดที่ใช้โปรโตคอล / มาตรฐาน?


25

ฉันสงสัยว่า "GUI" ของแอปพลิเคชันบรรทัดคำสั่งนั้นสื่อสารผ่านเครือข่ายอย่างไร ส่วนใหญ่มันค่อนข้างง่าย (ข้อความ / อินพุตธรรมดา) แต่บางครั้งมันก็ซับซ้อนกว่า (ความถนัด)

มันถูกกำหนดโดยมาตรฐานบางประเภทเพื่อให้ทุกคนสามารถเขียนเทอร์มินัลของตนเองและการใช้งานเทอร์มินัลทั้งหมดทำงานในลักษณะเดียวกัน (สีการวางตำแหน่ง ฯลฯ ) หรือไม่?

คำตอบ:


46

โดยทั่วไปโปรแกรมคอนโซลจะใช้คำสาปหรือหนึ่งในผู้สืบทอดเพื่อสร้างส่วนต่อประสานข้อความผู้ใช้ที่คุณกำลังพูดถึง

ไลบรารีเหล่านี้ใช้หนึ่งในสองฐานข้อมูลที่เรียกว่าtermcapและ. terminfo²ฐานข้อมูลเหล่านี้มีแผนที่ที่บอกไลบรารีว่าจะส่งรหัสใดเพื่อรับการกระทำที่ต้องการด้วยเทอร์มินัลหลากหลายประเภทจำนวนมาก ชนิดเทอร์มินัลส่วนใหญ่ที่คุณพบว่ามีการกำหนดไว้ในฐานข้อมูลเหล่านี้ไม่สามารถอยู่รอดได้ในช่วงเวลาของเทอร์มินัลจริงและดังนั้นจึงเป็นเพียงความสนใจในอดีตเท่านั้น

เทอร์มินัล ANSI

ตัวจำลองเทอร์มินัล Unix สมัยใหม่ใช้โปรโตคอล ANSI X3.64 หรือหนึ่งในตัวแปรต่อไป:

  • ANSI X3.64 : มาตรฐานสำหรับการควบคุม "ขั้วแก้ว" - ซึ่งตรงข้ามกับ teletypes - ขึ้นอยู่กับลำดับของอักขระพิเศษที่รีโมตเทอร์มินัลตีความ ตัวอย่างเช่นถ้ายูนิกซ์กล่องอยากจะบอกสถานีที่รองรับมาตรฐาน ANSI X3.64 ESC [ 1 ; 1 Hเพื่อเลื่อนเคอร์เซอร์ไปที่มุมซ้ายบนของหน้าจอก็จะส่งตัวละคร อักขระสองตัวแรกบอกให้เทอร์มินัลคาดหวังว่าลำดับการควบคุมคือ 1s คือแถวและคอลัมน์และHเป็นคำสั่งที่หมายถึง "ย้ายเคอร์เซอร์"

    เรื่องไม่สำคัญ: พีซีBBSจำนวนมากใช้รหัส ANSI ด้วยเช่นกัน ( ยังคงทำจริง)

  • DEC VT100 : จอเทอร์มินัลแก้วที่รองรับ ANSI ที่ได้รับความนิยมอย่างมากแรกคือ VT100 ของ Digital Equipment Corporation ด้วยการพิสูจน์มาตรฐานทางนิตินัยของ ANSI ในตลาดจึงสร้างมาตรฐานความจริงที่ยังคงมีความสำคัญในปัจจุบัน

    บางครั้งคุณเห็นสิ่งนี้เรียกว่าโปรโตคอล VT102 ซึ่งเป็นการลดต้นทุนในภายหลัง - และเป็นที่นิยมมากขึ้น - เวอร์ชันของ VT100 รวมถึงตัวเลือกการขยายที่มีอยู่ทั้งหมด

    โปรโตคอลเทอร์มินัล DEC เป็นซีรีย์ที่เข้ากันได้แบบย้อนกลับซึ่งขยายจากรุ่นที่รองรับ ANSI แรกที่เปิดตัวในปี 1978 (VT100) ถึงรุ่นซีรี่ส์ VT500 ที่ผลิตโดยBoundless Technologiesหลังจากซื้อธุรกิจเทอร์มินัลจาก DEC ในปี 1995 ตอนนี้เลิกกิจการแล้ว แต่เทอร์มินัลของพวกเขายังปรากฏขึ้นในตลาดมือสองเป็นระยะ ๆ )

  • xterm : การรวมกันของ ANSI และ VT- มาตรฐานอะไรก็ตาม เมื่อใดก็ตามที่คุณกำลังใช้โปรแกรมเลียนแบบเทอร์มินัล GUI เช่นxtermหรือหนึ่งในตราสารอนุพันธ์ของมันคุณมักจะใช้xtermโปรโตคอลเทอร์มินัลซึ่งโดยทั่วไปแล้วจะมีความทันสมัยxterm-colorหรือxterm-color256หลากหลายมากขึ้น

  • Linux : คอนโซล Linux ยังใช้ตัวแปรเพิ่มเติมของโปรโตคอลเทอร์มินัล ANSI ในจิตวิญญาณเดียวกันกับxtermโปรโตคอล ส่วนขยายส่วนใหญ่เกี่ยวข้องกับความแตกต่างระหว่างพีซีและขั้วแก้ว ตัวอย่างเช่นแป้นพิมพ์ IBM มีบางคีย์ที่ไม่ได้อยู่ใน DEC VT- ไม่ว่าจะด้วยวิธีใดก็ตาม (และในทางกลับกัน.)

    ระบบ Unix บางระบบมีเทอร์มินัลคอนโซลของตัวเองเช่นกัน มีscoansiตัวแปร ANSI X3.64 สำหรับ SCO Unixes เช่น

โปรแกรมเทอร์มินัลอีมูเลเตอร์ทั่วไปคืออะไรบางอย่างของ mongrel และไม่เลียนแบบเทอร์มินัลใด ๆ มันอาจรองรับ 96% ของลำดับการหลบหนี DEC VT ทั้งหมดจนถึง VT320 แต่ยังรองรับส่วนขยายเช่นสี ANSI (คุณลักษณะ VT525) และจำนวนแถวและคอลัมน์โดยพลการ รหัส 4% ที่ไม่เข้าใจอาจไม่พลาดหากโปรแกรมของคุณไม่ต้องการคุณสมบัติเหล่านั้นแม้ว่าคุณจะบอกcurses(หรืออะไรก็ตาม) ว่าคุณต้องการให้โปรแกรมที่ใช้มันใช้โปรโตคอล VT320 โปรแกรมดังกล่าวอาจโฆษณาตัวเองว่าเข้ากันได้กับ VT320 แม้ว่าจะพูดอย่างเคร่งครัด แต่ก็ไม่เป็นเช่นนั้น

เทอร์มินัลที่ไม่ใช่ ANSI

มีมาตรฐานที่น่าทึ่งอื่น ๆ อีกสองสามครั้งที่คุณยังคงเจออยู่:

  • Wyse : หนึ่งในผู้ผลิตอิสระรายแรกของขั้วแก้ว Wyse เริ่มผลิตเครื่องในต้นปี 1980 ก่อนที่คอมพิวเตอร์เวิร์กสเตชันจะเริ่มแทนที่มินิคอมพิวเตอร์ แม้ว่าเทอร์มินัล Wyse สามารถเลียนแบบ VT100 และโปรโตคอลเทอร์มินัลยอดนิยมอื่น ๆ ได้ แต่พวกเขาก็มีรหัสดั้งเดิมของตัวเอง

  • IBM 3270 : แม้ว่านี่จะไม่ใช่ประเภทเทอร์มินัล "Unix" อย่างแน่นอน แต่ความต้องการในการเชื่อมต่อระบบ Unix กับเมนเฟรมของ IBM ทำให้เกิดการสร้างโปรแกรมเทอร์มินัลจำลอง IBM 3270 series ซึ่งคุณยังคงสามารถใช้งานได้ อีมูเลเตอร์สำหรับเทอร์มินัล IBM 5250 seriesในภายหลังก็เป็นเรื่องธรรมดาเช่นกันส่วนใหญ่มักใช้ในปัจจุบันเพื่อเชื่อมต่อกับ AS / 400 และมินิคอมพิวเตอร์ System i

  • Tektronix 4014 : ก่อนที่พีซีและเวิร์คสเตชั่นส่วนใหญ่จะย้ายขั้วแก้วและทำให้บิตแมปกราฟิกเป็นคุณสมบัติมาตรฐานมีเทอร์มินัลกราฟิกราคาแพงที่ดึงกราฟิกบนหน้าจอเพื่อตอบสนองคำสั่งข้อความที่คล้ายกับ น่าจะเป็นที่นิยมมากที่สุดของเหล่านี้เป็นชุด Tektronix 4010

    พวกเขาค่อนข้างสนุกกับการใช้งาน คุณสามารถเขียนโปรแกรมที่ดึงกราฟิก แต่แทนที่จะเรียกใช้เพื่อวาดบนเทอร์มินัลท้องถิ่นของคุณคุณสามารถเปลี่ยนเส้นทางผลลัพธ์ไปยังไฟล์:

    $ ./my4014program > my-neat-graphic
    

    จากนั้นคุณสามารถส่งไฟล์นั้นให้คนอื่นและพวกเขาสามารถทำได้catในเทอร์มินัล Tek ของพวกเขาเพื่อดูกราฟิกโดยไม่ต้องมีโปรแกรมของคุณ ส่วนหนึ่งของเสน่ห์คือความเทอร์มินอลช้าในการวาดดังนั้นคุณสามารถดูกราฟิกที่สร้างขึ้นในไม่กี่วินาที

ทำงานกับ Unix Terminal Emulation ได้แล้ววันนี้

คุณสามารถค้นหาว่ามาตรฐานเทอร์มินัลใดที่คุณต้องการให้ห้องสมุดcursesใช้โดยดูที่TERMตัวแปรสภาพแวดล้อม:

$ echo $TERM
xterm-color

เมื่อคุณsshไปยังระบบอื่นTERMตัวแปรจะถูกนำไปใช้เพื่อให้กล่อง Unix ระยะไกลรู้วิธีการสื่อสารกับเครื่องปลายทางของคุณ

เนื่องจากโปรโตคอลเหล่านี้จำนวนมากเป็นแบบ ANSI X3.64 และเนื่องจากมาตรฐานการเข้ารหัสอักขระ ASCII และ UTF-8 ที่แพร่หลายนั้นดูแลเรื่องอื่นเป็นอย่างมากTERMตัวแปรที่ไม่ถูกต้องจึงไม่ใช่หายนะ สิ่งที่มีแนวโน้มที่จะแตกหักคือปุ่มเพิ่มเติมเช่น Home และ Page Up, Alt-what ชุดคีย์, และคุณสมบัติการแสดงผลตัวอักษรเช่นสี, ตัวหนา, ฯลฯ


เชิงอรรถ:

  1. มากที่สุดncurses

    นอกจากนี้ยังมีสินค้าทันทีกับcursesAPI เช่นS-Lang

  2. AT&T ประกาศใช้terminfoแทนtermcapฐานข้อมูลของ BSDและประสบความสำเร็จอย่างมากในการแทนที่ แต่ก็ยังมีโปรแกรมที่ยังคงใช้termcapฐานข้อมูลเก่าอยู่ มันเป็นหนึ่งในความแตกต่าง BSD เทียบกับ AT&T ที่คุณยังคงพบในระบบที่ทันสมัย

    กล่อง macOS ของฉันไม่มี/etc/termcapแต่มันมี/usr/share/terminfoในขณะที่การติดตั้ง FreeBSD มาตรฐานเป็นวิธีที่ตรงกันข้ามกันแม้ว่าทั้งสองระบบปฏิบัติการเหล่านี้มักจะค่อนข้างคล้ายกันที่ระดับบรรทัดคำสั่ง

  3. minicom, xterm, mintty, GNOME ร์มินัล , Terminal.appฯลฯ

  4. โปรแกรม Unix ที่เขียนอย่างถูกต้องจะไม่ปล่อยลำดับ escapeเหล่านี้โดยตรง แต่พวกเขาใช้หนึ่งในไลบรารีที่กล่าวถึงข้างต้นโดยบอกให้ "เลื่อนเคอร์เซอร์ไปที่ตำแหน่ง (1,1)" หรืออะไรก็ตามและไลบรารีจะปล่อยรหัสควบคุมเทอร์มินัลที่จำเป็นตามTERMการตั้งค่าตัวแปรสภาพแวดล้อมของคุณ สิ่งนี้จะช่วยให้โปรแกรมทำงานได้อย่างถูกต้องไม่ว่าคุณจะใช้ชนิดเทอร์มินัลใดก็ตาม

  5. เทอร์มินัลข้อความเก่ามีคุณสมบัติแปลก ๆ มากมายที่ไม่ได้รับการใช้งานอย่างมากมายจากโปรแกรมดังนั้นโปรแกรมเลียนแบบเทอร์มินัลที่ได้รับความนิยมจำนวนมากก็ไม่ได้ใช้คุณสมบัติเหล่านี้ การละเว้นทั่วไปเป็นการสนับสนุนกราฟิกแบบ Sixelและโหมดข้อความความกว้างสองเท่า / สองเท่า

    ผู้ดูแลการxtermเขียนโปรแกรมที่เรียกว่าvttestสำหรับการทดสอบ VT xtermเลียนแบบขั้วเช่น คุณสามารถเรียกใช้กับตัวจำลองเทอร์มินัลอื่นเพื่อค้นหาว่าคุณสมบัติใดที่ไม่รองรับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.