Во-первых, кто
не заботится о оболочках входа в систему или чем-то подобном. Он просто выводит записи utmp
. Вы можете иметь запись для терминалов без входа в систему; для графических сессий; для FTP-соединений (с полностью выдуманным именем «линии» tty); на что угодно.
Во-вторых, записи utmp создаются вручную— вы получаете запись только в том случае, если программа, которая обрабатывает ваш логин, вызывает pututline(…)
. Например, sshd делает это всегда, эмуляторы терминала частоделают это (но не всегда), а su
никогда.
(Помните, что su
не выделяет новый pty, поэтому он также не может добавить запись utmp — в противном случае вы получите несколько записей для одного и того же tty, что может запутать несколько программы.)
Я не знаю никакого способа изменить терминал, чтобы он принимал все символы. Управляющие символы являются особенностью терминала, и обычно программа обязана обращать внимание на тип терминала, создавать правильные управляющие символы для функций терминала, которые она хочет использовать, и экранировать любые управляющие символы, которые она хочет напечатать.
Информацию о том, как изменить программу Python, чтобы она это делала, можно найти, например, в этом вопросе на stackoverflow.
В командной оболочке вы можете использовать, например, tr
для преобразования управляющих символов в другие символы ASCII (но не в символы юникода). Смотрите этот вопрос об альтернативах, которые могут использовать символы Юникода.
Юникод определяет группу управляющих изображений для отображения управляющих символов, например, возврат каретки - это ␍
. Если вы никогда не слышали о ♪
, представляющем CR, а если и слышали, то это чисто случайное совпадение в каком-то шрифте, который вы случайно используете.
И в оболочке вы не просто cat
двоичный файл, а используете hexdump -C
или подобное для его изучения.
Программа showconsolefont
может отображать 256 различных (или 512 различных ...) глифов одновременно на консоли Linux. Но он делает это с помощью системного вызова (который работает только для подключений к консольному устройству). На странице руководства об этом не упоминается.
Но глифов (которые используются для отображения символов) - это не то же самое, что символов . Вы можете отобразить символ, напечатав его на терминале, и терминал отобразит его на глиф. Не существует escape-последовательности, которая могла бы указать консоли Linux обрабатывать управляющие символы как печатные.
Например, showconsolefont
на самом деле не записывает управляющие символы для ячеек 0–31. Он отображает печатных символов в диапазон 0–31, используя (как вы уже догадались) системный вызов.
Дополнительная литература: