Распечатайте двоичные данные без нарушения работы терминала.

Во-первых, ктоне заботится о оболочках входа в систему или чем-то подобном. Он просто выводит записи utmp. Вы можете иметь запись для терминалов без входа в систему; для графических сессий; для FTP-соединений (с полностью выдуманным именем «линии» tty); на что угодно.

Во-вторых, записи utmp создаются вручную— вы получаете запись только в том случае, если программа, которая обрабатывает ваш логин, вызывает pututline(…). Например, sshd делает это всегда, эмуляторы терминала частоделают это (но не всегда), а suникогда.

(Помните, что suне выделяет новый pty, поэтому он также не может добавить запись utmp — в противном случае вы получите несколько записей для одного и того же tty, что может запутать несколько программы.)

0
03.12.2016, 09:36
2 ответа

Я не знаю никакого способа изменить терминал, чтобы он принимал все символы. Управляющие символы являются особенностью терминала, и обычно программа обязана обращать внимание на тип терминала, создавать правильные управляющие символы для функций терминала, которые она хочет использовать, и экранировать любые управляющие символы, которые она хочет напечатать.

Информацию о том, как изменить программу Python, чтобы она это делала, можно найти, например, в этом вопросе на stackoverflow.

В командной оболочке вы можете использовать, например, tr для преобразования управляющих символов в другие символы ASCII (но не в символы юникода). Смотрите этот вопрос об альтернативах, которые могут использовать символы Юникода.

Юникод определяет группу управляющих изображений для отображения управляющих символов, например, возврат каретки - это . Если вы никогда не слышали о , представляющем CR, а если и слышали, то это чисто случайное совпадение в каком-то шрифте, который вы случайно используете.

И в оболочке вы не просто cat двоичный файл, а используете hexdump -C или подобное для его изучения.

0
28.01.2020, 02:27

Программа showconsolefont может отображать 256 различных (или 512 различных ...) глифов одновременно на консоли Linux. Но он делает это с помощью системного вызова (который работает только для подключений к консольному устройству). На странице руководства об этом не упоминается.

Но глифов (которые используются для отображения символов) - это не то же самое, что символов . Вы можете отобразить символ, напечатав его на терминале, и терминал отобразит его на глиф. Не существует escape-последовательности, которая могла бы указать консоли Linux обрабатывать управляющие символы как печатные.

Например, showconsolefont на самом деле не записывает управляющие символы для ячеек 0–31. Он отображает печатных символов в диапазон 0–31, используя (как вы уже догадались) системный вызов.

Дополнительная литература:

3
28.01.2020, 02:27

Теги

Похожие вопросы