Який протокол / стандарт використовується терміналами?


25

Мені було цікаво, як "GUI" програми командного рядка передається по мережі. Здебільшого це досить просто (звичайний текст / введення), але іноді це складніше (здатність).

Чи визначено це якимось стандартом, щоб кожен міг написати власний термінал і щоб усі реалізації терміналу поводилися однаково (кольори, позиціонування тощо)?

Відповіді:


46

Консольні програми зазвичай використовують прокльони або одного з його наступників its для створення різновидів текстових інтерфейсів користувача, про які ви говорите.

Ці бібліотеки використовують одну з двох баз даних, що називається termcapі terminfo.² Ці бази даних містять карти, які повідомляють бібліотеці, які коди потрібно надіслати, щоб отримати бажані дії з великою кількістю різноманітних типів терміналів. Переважна більшість типів терміналів, які ви знайдете в цих базах даних, не пережили днів реальних терміналів , і тому зараз становлять лише історичний інтерес.

Термінали ANSI

Сучасні емулятори терміналів Unix³ використовують протокол ANSI X3.64 або один з його пізніших варіантів:

  • ANSI X3.64 : Стандарт управління "скляними терміналами" - на відміну від телетайпів - він заснований на спеціальних послідовностях символів, які інтерпретується віддаленим терміналом. Наприклад, якщо поле Unix хоче повідомити термінал, сумісний з ANSI X3.64, щоб перемістити його курсор у лівий верхній кут екрана, він надсилає символиESC [ 1 ; 1 H. Перші два символи кажуть терміналу очікувати контрольної послідовності, 1 - це рядок і стовпець, іHце команда, що означає "перемістити курсор" .⁴

    Загальні відомості: багато ПК BBS також використовували ANSI-коди. ( Все-таки робити , власне.)

  • DEC VT100 : Першим дійсно популярним скляним терміналом, сумісним з ANSI, був VT100 корпорації Digital Equipment Corporation. Довівши де-юре стандарт ANSI на ринку, він встановив фактичний стандарт, який є важливим і сьогодні.

    Іноді ви бачите це під назвою протокол VT102, який згодом знижує вартість - і, отже, більш популярну - версію VT100 плюс усі вбудовані варіанти розширення.

    Протоколи терміналів DEC - це сумісна із зворотною серією версія, яка розповсюджується від першої моделі, сумісної з ANSI, представленої в 1978 році (VT100), до моделей серії VT500, вироблених Boundless Technologies після того, як вони придбали термінальний бізнес у DEC в 1995 році. зараз не працює, але їх термінали все ще час від часу з’являються на використовуваному ринку.)

  • xterm : свого роду амальгама ANSI та стандартів, що відповідають ВТ. Кожного разу, коли ви використовуєте емулятор терміналу GUIxtermабо один із його похідних, зазвичай ви також використовуєтеxtermпротокол терміналу, як правило, більш сучаснийxterm-colorабоxterm-color256варіант.

  • Linux : Консоль Linux також використовує розширений варіант протоколу терміналу ANSI у тому ж дусі, що іxtermпротоколи. Більшість його розширень пов'язані з відмінностями між ПК та скляним терміналом. Наприклад, на клавіатурі IBM є деякі клавіші, що не мають DEC VT. (І навпаки.)

    Деякі системи Unix також мають власний протокол терміналу консолі. Там в scoansiваріант ANSI X3.64 для ШОС Unixes, наприклад.

Типова програма емулятора терміналу є чимось спільним, і не імітує жодну єдину модель терміналу точно. Він може підтримувати 96% усіх послідовностей виходу DEC VT через VT320, але також підтримує розширення, такі як колір ANSI (функція VT525) та довільну кількість рядків і стовпців. 4% кодів, які він не розуміє, можуть бути пропущені, якщо ваші програми не потребують цих функцій, навіть якщо ви сказали curses(або що завгодно), що ви хочете, щоб програми, використовуючи його, використовували протокол VT320. Така програма може рекламувати себе як сумісну з VT320, то, хоча, строго кажучи, це не так .⁵

Термінали, що не належать до ANSI

Є кілька інших помітних стандартів, які ви все ще іноді зустрічаєте:

  • Wyse : Один з найбільш ранніх незалежних виробників скляних терміналів, Wyse почав виготовляти термінали на початку 1980-х років, перш ніж обчислювальна станція почала витісняти мінікомп'ютери. Хоча термінали Wyse змогли емулювати VT100 та інші популярні протоколи терміналів, вони також мали свої власні коди.

  • IBM 3270 : Хоча це не строго тип терміналу "Unix", необхідність підключати системи Unix до мейнфреймів IBM призвела до створення емуляторів терміналів серії IBM 3270, які ви все ще можете знайти у використанні. Емулятори для пізнішихтерміналів IBM 5250 також досить поширені, найчастіше використовуються в наші дні для підключення до комп'ютерів AS / 400 та міні-комп'ютерів System i .

  • Tektronix 4014 : Перед тим, як ПК та робочі станції значною мірою витіснили скляні термінали і таким чином зробили графічну графіку стандартною функцією, існували дорогі графічні термінали, які малювали графіку на екрані у відповідь на текстові команди, схожі на описані вище послідовності. Напевно, найпопулярнішою з них була серія Tektronix 4010.

    Їм було досить цікаво користуватися. Ви можете написати програму, яка намалювала графіку, але потім замість того, щоб просто запустити її для малювання на вашому локальному терміналі, ви можете перенаправити її вихід у файл:

    $ ./my4014program > my-neat-graphic
    

    Потім ви можете надіслати цей файл комусь іншому, і вони могли catце на своєму терміналі Tek, щоб побачити графіку, не маючи програми. Частина принади полягала в тому, наскільки ці термінали малювали повільно, тому ви могли спостерігати за графічним складанням протягом кількох секунд.

Робота з емуляцією терміналів Unix сьогодні

Ви можете дізнатися, який стандартний термінал ви запитуєте, як би бібліотеки cursesхочуть використовувати, переглянувши TERMзмінну середовища:

$ echo $TERM
xterm-color

Коли ви перебуваєте sshв іншій системі, TERMзмінна передається разом, щоб віддалений вікно Unix знав, як спілкуватися з вашим локальним терміналом.

Оскільки так багато цих протоколів є варіантами ANSI X3.64 і тому, що всюдисущі стандарти кодування символів ASCII та UTF-8 беруть на себе багато іншого, неправильна TERMзмінна, як правило, не є катастрофічною. Те, що має тенденцію до розриву, - це розширені клавіші, як "Головна" та "Перегортання сторінки", комбінації клавіш "Alt", а також функції друкарського відображення, такі як колір, жирний шрифт тощо


Виноски:

  1. Найчастіше - нуклеуси .

    Є також відверті конкуренти 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 , Terminal.app і т.д.

  4. Правильно написані програми Unix не випромінюють ці послідовності втечі безпосередньо. Натомість вони використовують одну з згаданих вище бібліотек, говорячи їй "перемістити курсор у положення (1,1)" чи будь-що інше, і бібліотека випромінює необхідні термінальні керуючі коди на основі налаштування TERMзмінної вашого середовища. Це дозволяє програмі працювати належним чином незалежно від того, на якому типі терміналу ви її запустите.

  5. У старих текстових терміналах було багато дивних функцій, які не отримали великого використання програмами, тому багато популярних програм емуляторів терміналів просто не реалізують ці функції. Поширені пропуски - це підтримка шестигранної графіки та текстових режимів подвійної ширини / подвійної висоти.

    Супроводжувач програми xtermнаписав програму, яка закликала vttestтестувати емулятори терміналів VT, такі як xterm. Ви можете запустити його проти інших емуляторів терміналів, щоб дізнатися, які функції вони не підтримують.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.