Нет, вам не нужно запускать оконный менеджер, чтобы позволить X-клиенту работать. Некоторые системы предоставляют возможность просто запускать терминал при запуске, и из него вы можете запускать дополнительные программы, включая оконные менеджеры. Некоторым установкам киосков, которые хотят, чтобы работало только одно приложение, оконный менеджер не нужен. Некоторые реализации X для Microsoft Windows избегают диспетчера окон X, позволяя операционной системе управлять окнами.
Без оконного менеджера вам обычно нужно указывать геометрию в программах, чтобы не все было размещено в верхнем левом углу.
В X оконный менеджер — это просто еще один X-клиент. В то время это было необычно, но упростило использование разных оконных менеджеров.
Другой способ взглянуть на этот вопрос — заметить, что вы можете менять оконные менеджеры на лету, поэтому есть время между остановкой первого и получением управления вторым, но поскольку все ваши приложения не аварийно завершают работу, они надо уметь работать без.
Переменная TERM
используется для поиска возможностей терминала/эмулятора и правильных кодов для отправки функций управления терминалом, таких как изменение цвета, перемещение курсора или очистка экрана.
Теоретически тип терминала, идентифицируемый переменной TERM
, будет точно описан описанием типа терминала, расположенным в дереве каталогов /usr/share/terminfo/
. На практике эмулятор терминала может иметь ошибки, из-за которых его поведение отклоняется от спецификации типа.
(Сами спецификации типа терминала также могут содержать ошибки, но это очень старая технология, и большинство ошибок давно устранено.)
По аналогии, терминалы будут говорить на своем (с )родном языке; приложения обычно не говорят об этом напрямую,но используйте базу данных terminfo как набор словарей/разговорников для связи с терминалами. Переменная окружения TERM определяет, какой словарь/разговорник использовать.
Если значение TERM неверно лишь немного, т. е. указывает тип терминала, который не совсем корректен, но достаточно похож, все может в основном работать, возможно, только с ограниченной функциональностью, например, имея только 16 доступных цветов вместо 256, как сказал Берндбауш в комментарии к вопросу.
Вы можете увидеть на экране несколько ненужных символов, если программа попытается использовать функцию, которой нет в вашем реальном типе терминала. Если ошибка имеет другой вид (, т.е. описание типа терминала не включает функцию, которая на самом деле есть у вашего терминала ), тогда программа будет вести себя так, как будто на вашем терминале эта функция недоступна.
Но если значение TERM совершенно неверно (, указывающее совершенно не связанный тип терминала ), то такие вещи, как очистка экрана и другие базовые функции, будут недоступны, и любая попытка их использования, скорее всего, приведет к созданию мусора. символов на экране, потому что программа отправляет коды управления терминалом в формате, который эмулятор терминала фактически не распознает. В этом состоянии использование, например,. обычные текстовые редакторы (вместо старых -школьных линейных -ориентированных редакторов, таких как классические ex
или ed
), будут очень трудны или невозможны, пока значение TERM не будет исправлено.
Если значение TERM полностью отсутствует, большинство программ, которые в нем нуждаются, примут значение по умолчаниюdumb
:очень древний терминал с крайне ограниченными возможностями и даже может иметь принтер вместо экрана. В этой ситуации вы не получите мусорных символов, но так же, как и при совершенно неправильной настройке TERM,использование обычных текстовых редакторов или чего-либо, что создает текст -на основе полноэкранного -отображения (опускания -вниз или всплывающего меню -поверх существующего представления, например )на окно терминала будет невозможно.
Пример использования очень старого терминала см. в видео CuriousMarc на YouTube :https://youtu.be/2XLZ4Z8LpEE?t=501
Обратите внимание, что в видео на самом деле было конкретное значение TERM tty33
, доступное в Linux, хотя CuriousMarc agetty
установил его для него вместо прямого назначения переменной TERM
. Значение dumb
может быть даже более голым -костей, чем это!
Поскольку этот материал типа TERM был разработан для охвата многих старых технологий, которые не обязательно имели что-либо, что можно было бы использовать в качестве механизма определения типа, изначально не было условий для автоматического -определения типа терминала.
Для жестких -последовательных терминалов системный администратор должен был настроить правильный тип терминала при добавлении процесса getty
для каждого последовательного порта, подключенного к новому терминалу. Для модемных линий система может быть настроена так, чтобы запрашивать у пользователя правильный тип терминала в /etc/profile
или подобное, если сеанс не был обнаружен как не -интерактивный.
Были некоторые усовершенствования для автоматического -определения типа терминала, но они не были надежными для всех обстоятельств (, поскольку было слишком много различных старых типов терминалов ), поэтому автоматическое -определение оставалось необязательным. функция, которую можно включить, если администратор сочтет, что она того стоит.
Позже, когда разрабатывались методы удаленного доступа, основанные на сетевом -протоколе -, одной из добавленных функций была возможность автоматической передачи некоторой дополнительной информации от клиента к удаленному хосту при подключении, значение TERM, вероятно, среди первый из них.«И было великое ликование».
PuTTY использует только этот параметр конфигурации «тип терминала» для переменной среды по умолчанию TERM
, используемой PuTTY -клиентом -ssh -при запросе псевдо -терминал на удаленном -сервере .
Использование этого параметра для определения терминальных последовательностей, которые PuTTY --терминал -эмулятор распознает и как он их интерпретирует, было бы довольно глупо --и на самом деле PuTTY не делать этого .
На самом деле, несмотря на то, что поведение PuTTY аналогично терминалам, для которых были написаны эти описания, оно не является ни надмножеством, ни точным совпадением ни для того, ни для другого.
Есть несколько проблем, когда описание терминала не соответствует терминалу:
Рекомендуемые описания терминала для PuTTY: "замазка" и "замазка -256цвет" . Использование infocmp для демонстрации различий служит иллюстрацией :
.comparing putty to putty-256color. comparing booleans. ccc: T:F. comparing numbers. colors: 8, 256. pairs: 64, 65536. comparing strings. initc: '\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x', NULL. setab: '\E[4%p1%dm', '\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m'. setaf: '\E[3%p1%dm', '\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m'.
Сравнение «замазки» с linux показывает, что у каждого из них есть функции, которых нет у другого, и что некоторые общие функции отличаются:
comparing putty to linux. comparing booleans. bw: T:F. eo: F:T. hs: T:F. AX: F:T. XT: T:F. comparing numbers. ncv: 22, 18. comparing strings. acsc: '``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~', '++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~'. cbt: '\E[Z', NULL. civis: '\E[?25l', '\E[?25l\E[?1c'. cnorm: '\E[?25h', '\E[?25h\E[?0c'. cud1: '\ED', '\n'. cuu1: '\EM', '\E[A'. cvvis: NULL, '\E[?25h\E[?8c'. dim: NULL, '\E[2m'. dispc: '%?%p1%{8}%=%t\E%%G\342\227\230\E%%@%e%p1%{10}%=%t\E%%G\342\227\231\E%%@%e%p1%{12}%=%t\E%%G\342\231\0\E%%@%e%p1%{13}%=%t\E%%G\342\231\252\E%%@%e%p1%{14}%=%t\E%%G\342\231\253\E%%@%e%p1%{15}%=%t\E%%G\342\230\274\E%%@%e%p1%{27}%=%t\E%%G\342\206\220\E%%@%e%p1%{155}%=%t\E%%G\340\202\242\E%%@%e%p1%c%;', NULL. dsl: '\E]0;\007', NULL. enacs: '\E(B\E)0', '\E)0'. flash: '\E[?5h$<100/>\E[?5l', '\E[?5h$\E[?5l'. fsl: '^G', NULL. ich: NULL, '\E[%p1%d@'. ich1: NULL, '\E[@'. indn: '\E[%p1%dS', NULL. is2: '\E7\E[r\E[m\E[?7h\E[?1;4;6l\E[4l\E8\E>\E]R', NULL. ka1: '\EOq', NULL. ka3: '\EOs', NULL. kb2: '\EOr', '\E[G'. kc1: '\EOp', NULL. kc3: '\EOn', NULL. kcub1: '\EOD', '\E[D'. kcud1: '\EOB', '\E[B'. kcuf1: '\EOC', '\E[C'. kcuu1: '\EOA', '\E[A'. kent: '\EOM', NULL. kf0: '\EOy', NULL. kf1: '\E[11~', '\E[[A'. kf2: '\E[12~', '\E[[B'. kf3: '\E[13~', '\E[[C'. kf4: '\E[14~', '\E[[D'. kf5: '\E[15~', '\E[[E'. kind: '\E[B', NULL. kmous: '\E[', NULL. rs1: NULL, '\Ec\E]R'. rs2: '\E<\E["p\E[50;6"p\Ec\E[?3l\E]R\E[?1000l', NULL. s0ds: '\E[10m', NULL. s1ds: '\E[11m', NULL. s2ds: '\E[12m', NULL. sgr: '\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;', '\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;m%?%p9%t\016%e\017%;'. smcup: '\E[?47h', NULL. smkx: '\E[?1h\E=', NULL. tsl: '\E]0;', NULL. TS: '\E]0;', NULL. XM: '\E[?1006;1000%?%p1%{1}%=%th%el%;', NULL. kp1: '\EOq', NULL. kp2: '\EOr', NULL. kp3: '\EOs', NULL. kp4: '\EOt', NULL. kp5: '\EOu', NULL. kp6: '\EOv', NULL. kp7: '\EOw', NULL. kp8: '\EOx', NULL. kp9: '\EOy', NULL. kpADD: '\EOl', NULL. kpDIV: '\EOQ', NULL. kpDOT: '\EOn', NULL. kpMUL: '\EOR', NULL. kpNUM: '\EOP', NULL. kpSUB: '\EOS', NULL. kpZRO: '\EOp', NULL. xm: '\E[<%i%p3%d;%p1%d;%p2%d;%?%p4%tM%em%;', NULL.
Сравнение "putty -256color" и xterm -256color показывает, что PuTTY не (например )реализует большинство функций -комбинаций клавиш, которые предоставляет xterm:
comparing putty-256color to xterm-256color. comparing booleans. OTbs: F:T. bw: T:F. ccc: F:T. hs: T:F. km: F:T. mc5i: F:T. npc: F:T. xon: T:F. AX: F:T. comparing numbers. cols: NULL, 80. lines: NULL, 24. ncv: 22, NULL. U8: 1, NULL. comparing strings. acsc: '``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~', '``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~'. clear: '\E[H\E[J', '\E[H\E[2J'. cnorm: '\E[?25h', '\E[?12l\E[?25h'. cud1: '\ED', '\n'. cuu1: '\EM', '\E[A'. cvvis: NULL, '\E[?12;25h'. dim: NULL, '\E[2m'. dispc: '%?%p1%{8}%=%t\E%%G\342\227\230\E%%@%e%p1%{10}%=%t\E%%G\342\227\231\E%%@%e%p1%{12}%=%t\E%%G\342\231\0\E%%@%e%p1%{13}%=%t\E%%G\342\231\252\E%%@%e%p1%{14}%=%t\E%%G\342\231\253\E%%@%e%p1%{15}%=%t\E%%G\342\230\274\E%%@%e%p1%{27}%=%t\E%%G\342\206\220\E%%@%e%p1%{155}%=%t\E%%G\340\202\242\E%%@%e%p1%c%;', NULL. dsl: '\E]0;\007', NULL. enacs: '\E(B\E)0', NULL. fsl: '^G', NULL. ich: NULL, '\E[%p1%d@'. initc: NULL, '\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\'. invis: NULL, '\E[8m'. is2: '\E7\E[r\E[m\E[?7h\E[?1;4;6l\E[4l\E8\E>\E]R', '\E[!p\E[?3;4l\E[4l\E>'. kDC: NULL, '\E[3;2~'. kEND: NULL, '\E[1;2F'. kHOM: NULL, '\E[1;2H'. kIC: NULL, '\E[2;2~'. kLFT: NULL, '\E[1;2D'. kNXT: NULL, '\E[6;2~'. kPRV: NULL, '\E[5;2~'. kRIT: NULL, '\E[1;2C'. ka1: '\EOq', '\EOw'. ka3: '\EOs', '\EOy'. kb2: '\EOr', '\EOu'. kc1: '\EOp', '\EOq'. kc3: '\EOn', '\EOs'. kend: '\E[4~', '\EOF'. kf0: '\EOy', NULL. kf1: '\E[11~', '\EOP'. kf13: '\E[25~', '\E[1;2P'. kf14: '\E[26~', '\E[1;2Q'. kf15: '\E[28~', '\E[1;2R'. kf16: '\E[29~', '\E[1;2S'. kf17: '\E[31~', '\E[15;2~'. kf18: '\E[32~', '\E[17;2~'. kf19: '\E[33~', '\E[18;2~'. kf2: '\E[12~', '\EOQ'. kf20: '\E[34~', '\E[19;2~'. kf21: NULL, '\E[20;2~'. kf22: NULL, '\E[21;2~'. kf23: NULL, '\E[23;2~'. kf24: NULL, '\E[24;2~'. kf25: NULL, '\E[1;5P'. kf26: NULL, '\E[1;5Q'. kf27: NULL, '\E[1;5R'. kf28: NULL, '\E[1;5S'. kf29: NULL, '\E[15;5~'. kf3: '\E[13~', '\EOR'. kf30: NULL, '\E[17;5~'. kf31: NULL, '\E[18;5~'. kf32: NULL, '\E[19;5~'. kf33: NULL, '\E[20;5~'. kf34: NULL, '\E[21;5~'. kf35: NULL, '\E[23;5~'. kf36: NULL, '\E[24;5~'. kf37: NULL, '\E[1;6P'. kf38: NULL, '\E[1;6Q'. kf39: NULL, '\E[1;6R'. kf4: '\E[14~', '\EOS'. kf40: NULL, '\E[1;6S'. kf41: NULL, '\E[15;6~'. kf42: NULL, '\E[17;6~'. kf43: NULL, '\E[18;6~'. kf44: NULL, '\E[19;6~'. kf45: NULL, '\E[20;6~'. kf46: NULL, '\E[21;6~'. kf47: NULL, '\E[23;6~'. kf48: NULL, '\E[24;6~'. kf49: NULL, '\E[1;3P'. kf50: NULL, '\E[1;3Q'. kf51: NULL, '\E[1;3R'. kf52: NULL, '\E[1;3S'. kf53: NULL, '\E[15;3~'. kf54: NULL, '\E[17;3~'. kf55: NULL, '\E[18;3~'. kf56: NULL, '\E[19;3~'. kf57: NULL, '\E[20;3~'. kf58: NULL, '\E[21;3~'. kf59: NULL, '\E[23;3~'. kf60: NULL, '\E[24;3~'. kf61: NULL, '\E[1;4P'. kf62: NULL, '\E[1;4Q'. kf63: NULL, '\E[1;4R'. khome: '\E[1~', '\EOH'. kind: '\E[B', '\E[1;2B'. kri: '\E[A', '\E[1;2A'. kspd: '^Z', NULL. mc0: NULL, '\E[i'. mc4: NULL, '\E[4i'. mc5: NULL, '\E[5i'. meml: NULL, '\El'. memu: NULL, '\Em'. mgc: NULL, '\E[?69l'. nel: '\r\n', NULL. oc: '\E]R', '\E]104\007'. ritm: NULL, '\E[23m'. rmacs: '^O', '\E(B'. rmcup: '\E[2J\E[?47l', '\E[?1049l\E[23;0;0t'. rmm: NULL, '\E[?1034l'. rmpch: '\E[10m', NULL. rs1: NULL, '\Ec\E]104\007'. rs2: '\E'. s0ds: '\E[10m', NULL. s1ds: '\E[11m', NULL. s2ds: '\E[12m', NULL. sgr: '\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;', '%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m'. sgr0: '\E[m\017', '\E(B\E[m'. sitm: NULL, '\E[3m'. smacs: '^N', '\E(0'. smcup: '\E[?47h', '\E[?1049h\E[22;0;0t'. smglr: NULL, '\E[?69h\E[%i%p1%d;%p2%ds'. smm: NULL, '\E[?1034h'. smpch: '\E[11m', NULL. tsl: '\E]0;', NULL. u8: '\E[?6c', '\E[?%[;0123456789]c'. Cr: NULL, '\E]112\007'. Cs: NULL, '\E]12;%p1%s\007'. Ms: NULL, '\E]52;%p1%s;%p2%s\007'. Se: NULL, '\E[2 q'. Ss: NULL, '\E[%p1%d q'. TS: '\E]0;', NULL. kDC3: NULL, '\E[3;3~'. kDC4: NULL, '\E[3;4~'. kDC5: NULL, '\E[3;5~'. kDC6: NULL, '\E[3;6~'. kDC7: NULL, '\E[3;7~'. kDN: NULL, '\E[1;2B'. kDN3: NULL, '\E[1;3B'. kDN4: NULL, '\E[1;4B'. kDN5: NULL, '\E[1;5B'. kDN6: NULL, '\E[1;6B'. kDN7: NULL, '\E[1;7B'. kEND3: NULL, '\E[1;3F'. kEND4: NULL, '\E[1;4F'. kEND5: NULL, '\E[1;5F'. kEND6: NULL, '\E[1;6F'. kEND7: NULL, '\E[1;7F'. kHOM3: NULL, '\E[1;3H'. kHOM4: NULL, '\E[1;4H'. kHOM5: NULL, '\E[1;5H'. kHOM6: NULL, '\E[1;6H'. kHOM7: NULL, '\E[1;7H'. kIC3: NULL, '\E[2;3~'. kIC4: NULL, '\E[2;4~'. kIC5: NULL, '\E[2;5~'. kIC6: NULL, '\E[2;6~'. kIC7: NULL, '\E[2;7~'. kLFT3: NULL, '\E[1;3D'. kLFT4: NULL, '\E[1;4D'. kLFT5: NULL, '\E[1;5D'. kLFT6: NULL, '\E[1;6D'. kLFT7: NULL, '\E[1;7D'. kNXT3: NULL, '\E[6;3~'. kNXT4: NULL, '\E[6;4~'. kNXT5: NULL, '\E[6;5~'. kNXT6: NULL, '\E[6;6~'. kNXT7: NULL, '\E[6;7~'. kPRV3: NULL, '\E[5;3~'. kPRV4: NULL, '\E[5;4~'. kPRV5: NULL, '\E[5;5~'. kPRV6: NULL, '\E[5;6~'. kPRV7: NULL, '\E[5;7~'. kRIT3: NULL, '\E[1;3C'. kRIT4: NULL, '\E[1;4C'. kRIT5: NULL, '\E[1;5C'. kRIT6: NULL, '\E[1;6C'. kRIT7: NULL, '\E[1;7C'. kUP: NULL, '\E[1;2A'. kUP3: NULL, '\E[1;3A'. kUP4: NULL, '\E[1;4A'. kUP5: NULL, '\E[1;5A'. kUP6: NULL, '\E[1;6A'. kUP7: NULL, '\E[1;7A'. ka2: NULL, '\EOx'. kb1: NULL, '\EOt'. kb3: NULL, '\EOv'. kc2: NULL, '\EOr'. kp1: '\EOq', NULL. kp2: '\EOr', NULL. kp3: '\EOs', NULL. kp4: '\EOt', NULL. kp5: '\EOu', '\EOE'. kp6: '\EOv', NULL. kp7: '\EOw', NULL. kp8: '\EOx', NULL. kp9: '\EOy', NULL. kpADD: '\EOl', '\EOk'. kpCMA: NULL, '\EOl'. kpDIV: '\EOQ', '\EOo'. kpMUL: '\EOR', '\EOj'. kpNUM: '\EOP', NULL. kpSUB: '\EOS', '\EOm'. rmxx: NULL, '\E[29m'. smxx: NULL, '\E[9m'.