Bagaimana cara mengubah latar belakang terminal secara otomatis, berdasarkan nama host ssh?


9

Bagaimana seseorang dapat secara progresif mengubah warna latar belakang jendela terminal, berdasarkan nama host yang Anda ssh masuki?

yaitu ketika saya ssh'd menjadi sistem embedded langsung pada perangkat keras produksi, saya berharap latar belakang terminal berubah menjadi merah - untuk "menjaga kesadaran" dari server mana saya berada. Memiliki hanya nama host di PS1 tidak selalu cukup.

Saya menggunakan terminal gnome, tetapi akan menerima solusi apa pun yang bisa diterapkan di Linux.

Jawaban:


7

Anda dapat menggunakan Perintah Lokal ssh untuk memancarkan urutan pelarian ANSI untuk mengubah warna latar belakang, dan memiliki bagian per host (atau pola host) untuk memilih warna yang sesuai yang Anda ingin sesuai dengan host jarak jauh.

Jika server produksi Anda mengikuti konvensi penamaan seperti "dimulai dengan prod", Anda dapat mencoba cuplikan berikut di file ~ / .ssh / config Anda: Host prod* PermitLocalCommand yes LocalCommand printf "\x1b[41m\x1b[2JPRODUCTION SYSTEM [%n]\n\n"

Jika tidak ada konvensi penamaan yang berguna untuk menggunakan pola wildcard, Anda bisa mendaftarkan nama host yang dipisahkan oleh spasi. Anda dapat membuat blok Host tambahan dengan nilai warna dan string yang berbeda untuk berbagai server non-produksi lainnya.

Setelah menghubungkan ke host yang cocok dengan pola, printf yang sesuai akan dieksekusi secara lokal, mengubah warna latar belakang menjadi merah ([41m memilih merah sebagai warna latar belakang, bagian [2J mengecat seluruh layar dengan warna latar yang diperbarui. Lihat https://en.wikipedia.org/wiki/ANSI_escape_code untuk banyak opsi lainnya)

Gangguan terbesar tentang pendekatan ini adalah bahwa warna latar belakang tetap ada pada sesi ssh; Tidak ada mitra untuk LocalCommand untuk dijalankan pada putuskan sambungan (yang saya tahu). Skrip pembungkus alias atau shell untuk ssh dapat dipanggil printf "\x1b[0m"sebagai reset. Di sisi lain, mengatur warna latar belakang melalui LocalCommand berarti Anda akan mendapatkan warna yang ditetapkan walaupun ssh tidak dijalankan melalui skrip pembungkus atau alias.


Jawaban Luar Biasa! Satu-satunya masalah yang saya lihat, yang merupakan masalah penting, adalah perubahan warna tetap hanya untuk "layar" pertama. Segera setelah perintah dimasukkan, dan layar bergulir ke atas, itu berubah dari merah menjadi hitam. Mungkin gnome-terminal color control mengesampingkan urutan pelarian ANSI? Apakah Anda tahu solusinya?
Mtl Dev

Apakah mungkin untuk melakukan sesuatu yang serupa, dengan variabel prompt PS1 pada host SSH mungkin?
Mtl Dev

Reset dapat disebabkan oleh urutan di salah satu variabel prompt PS1 Anda, atau jika Anda memiliki perintah seperti lsalias ls --color=autodan itu termasuk urutan reset '<ESC> [0m'. Untuk tetap bertahan, Anda mungkin perlu menyiapkan profil gnome-terminal yang berbeda, dan pergi rute skrip wrapper, memilih nama profil berdasarkan nama host, dan memohongnome-terminal --profile=$PROFILE_NAME -e ssh $HOST &
PKapp

Anda benar: Jika saya ls --colourATAU urutan reset di PS1, satu saja akan menimpa pengaturan warna ansi sebelumnya. Jadi saya akan melihat penerapan solusi skrip wrapper yang Anda usulkan, yang juga merupakan ide bagus! Terima kasih banyak!
Mtl Dev

Hanya agar yang lain sadar: menambahkan printf ke ~ / .ssh / config tampaknya memecah rsync. Detail terkait di sini: serverfault.com/questions/267154/…
Mtl Dev
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.