Изменить фон терминала из скрипта bash независимым от платформы и среды рабочего стола способом?

Изменить фон терминала из скрипта bash независимым от платформы и среды рабочего стола способом?

Как изменить цвет фона терминала таким образом, чтобы использовался ТОЛЬКО протокол терминала и не зависел от ЛЮБОЙ конфигурации (например, «профилей»), хранящейся в конкретной терминальной программе или среде, в которой она работает?

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

Быстрый и авторитетный ответ на эффект "это невозможно" будет оценен как решение. Однако такой ответ будет принят только от эксперта, который знает терминальные протоколы досконально и может подтвердить отсутствие такой функции.

решение1

Это невозможно. Я не эксперт, который знает терминальные протоколы досконально, но я знаю о существовании терминалов, которые не имеют возможности изменить цвет фона. Это касается, например, глупых терминалов, таких как предоставленныеожидатьили M-x shellв Emacs. Это также касается большинства аппаратных терминалов, но в настоящее время ими мало кто пользуется.

Большинство эмуляторов терминала имеют возможность изменить цвет фона. Эмуляторы терминала в целом копируют xterm для интерфейса между приложением и терминалом, поэтому, когда вам нужна такая функция, попробуйте способ xterm и ожидайте, что он будет работать на некоторых, но не на всех эмуляторах терминала. Посмотритепоследовательности управления xtermи посмотрите, подходит ли вам один из них.

Для изменения цвета фона всего терминала естьOSC 11; color BEL, то есть

printf '\e]11;%s\a' "$color"

Это работает в xterm, urxvt, gnome-terminal, konsole и lxterm, но не в rxvt, xfce4-terminal, terminator или Emacs M-x term. Изменение цвета фона сохраняется после сброса терминала. Вы также можете изменить цвет переднего плана, заменив 11;его на 10;.

Это, конечно, цвет фона по умолчанию. На любом терминале, который поддерживает эту последовательность escape, и на большинстве других терминалов, которые поддерживают цвета в любом случае, вы можете переключить цвет фона для отображаемого впоследствии текста с помощью \e[41m(для красного).

Если escape-последовательность не поддерживается в терминале, то у вас нет способа узнать это. Вы можете попробовать найти escape-последовательность, которая запрашивает терминал и которая поддерживается в том же наборе терминалов, но обычно такой последовательности нет.

Переключение на обратное видео с помощью, \e[?5hвероятно, работает на большинстве терминалов, но это не переживает сброс терминала. Вы можете сделать это, а затем установить цвет переднего плана, таким образом, будет визуальный эффект на большинстве терминалов.

Связанный контент