Як автоматично змінювати фон терміналу на основі імені ssh хоста?


9

Як можна прогресивно змінити колір тла вікна терміналу, виходячи з імені хоста, на який ти впадаєш?

тобто коли я перебуваю у вбудованих системах на виробничому обладнання, я хочу, щоб фон термінала змінився на червоний - щоб "підтримувати обізнаність", на якому сервері я перебуваю. Наявність просто імені хоста в PS1 не завжди є достатнім.

Я використовую gnome-terminal, але прийняв би будь-яке дієве рішення під Linux.

Відповіді:


7

Ви можете використовувати ssh LocalCommand для випромінення послідовності відтворення ANSI для зміни кольору тла та мати розділ на хост (або шаблон хоста), щоб вибрати відповідний колір, якому ви хочете відповідати віддаленому хосту.

Якщо ваші виробничі сервери дотримуються конвенції про іменування, наприклад "починається з prod", ви можете спробувати наступний фрагмент у вашому файлі ~ / .ssh / config: Host prod* PermitLocalCommand yes LocalCommand printf "\x1b[41m\x1b[2JPRODUCTION SYSTEM [%n]\n\n"

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

Після підключення до хоста, який відповідає шаблону, відповідний printf буде виконуватися локально, змінивши колір фону на червоний ([41m вибирає червоний колір як колір фону, [2J частина перефарбує весь екран оновленим кольором фону. Див. https://en.wikipedia.org/wiki/ANSI_escape_code для ще багатьох варіантів)

Найбільша неприємність щодо цього підходу полягає в тому, що колір фону зберігається під час виходу з сеансу ssh; Немає аналога LocalCommand, який би запускався на відключення (про що я знаю). Псевдонім або сценарій обгортки оболонки для ssh може викликати printf "\x1b[0m"скидання. З іншого боку, встановлення кольору фону через LocalCommand означає, що ви отримаєте набір кольорів, навіть якщо ssh не запускається через скрипт обгортки або псевдонім.


Відмінна відповідь! Єдине, що я бачу, але яке є суттєвим, полягає в тому, що зміна кольору залишається лише для першого "екрана". Як тільки команди введені, а екран прокручується вгору, він переходить від червоного назад до чорного. Можливо, управління кольором gnome-terminal переважає послідовність аварійної передачі ANSI? Чи знаєте ви вирішення проблеми?
Mtl Dev

Чи можливо зробити щось подібне до змінної підказки PS1 на хості SSH?
Mtl Dev

Скидання може бути спричинене послідовностями або у вашій змінній запиту PS1, або якщо у вас є команди, подібні lsдо псевдоніму, ls --color=autoі воно включає послідовність скидання '<ESC> [0m'. Щоб продовжувати це, вам, ймовірно, потрібно буде встановити різні профілі gnome-терміналу та пройти маршрут сценарію обгортки, вибравши ім’я профілю на основі імені хоста та звернувшисьgnome-terminal --profile=$PROFILE_NAME -e ssh $HOST &
PKapp

Ви абсолютно праві: якщо ls --colourв PS1 у мене є АБО послідовність скидання, будь-яка інша буде змінювати попередні налаштування кольору ansi. Тож я розгляну реалізацію запропонованого рішення сценарію обгортки, що теж є чудовою ідеєю! Мерсі боку!
Mtl Dev

Просто так відомо іншим: додавання printf до ~ / .ssh / config, як видається, порушує rsync. Тут пов’язані деталі: serverfault.com/questions/267154/…
Mtl Dev
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.