Bisakah saya mengubah latar belakang terminal berdasarkan nama host?

17

Saya ingin perubahan warna latar belakang terminal berdasarkan nama host. Alasan saya untuk ini adalah terutama untuk memiliki dan cara ekstra untuk mengingatkan diri saya sendiri di server mana, jadi saya tidak melakukan sesuatu yang bodoh.

Apakah ada cara saya dapat menggunakan latar belakang terong standar jika saya menggunakan komputer lokal saya, lalu ganti merah jika saya ssh menjadi server web produksi, atau host lain yang dapat saya tentukan?

chris
sumber
Satu ide, skrip perubahan ke variabel lingkungan yang menangani pengaturan terminal. Buat skrip untuk setiap tempat yang biasanya Anda ssh dan sertakan perubahan pada pengaturan dalam skrip itu, berikut adalah panduan yang dapat membantu: cyberciti.biz/faq/… - dengan cara ini Anda bisa menjalankan skrip yang tidak hanya akan terhubung untuk Anda, tetapi akan menyesuaikan terminal untuk sesi khusus itu.
MaQleod
1
Ada pertanyaan yang sama di situs ubuntu: askubuntu.com/questions/13705/... Pikiran, saya tidak menyalahkan Anda, saya juga tidak menemukannya pada awalnya :)
Stefano

Jawaban:

9

Anda dapat menggunakan opsi perintah lokal ssh / config untuk menjalankan perintah setiap kali alias digunakan. saya menggunakan

host hostname
    user myusername
    localcommand xtermcontrol --bg '#abc'

Ini tergantung pada xtermcontrol dan istilah Anda menjadi xterm. Agaknya ada aplikasi lain untuk istilah lain.

Satu-satunya masalah dengan pendekatan ini adalah bahwa hal itu terjadi ketika Anda memanggil ssh. Tidak ada yang bisa membatalkan perubahan warna. Saya sudah melakukannya dengan membungkus fungsi di sekitar ssh, tetapi itu memiliki kelemahan juga.

function ssh() {
  FG=$(xtermcontrol --get-fg)
  BG=$(xtermcontrol --get-bg)
  $(which ssh) "$@"
  xtermcontrol --fg="$FG"
  xtermcontrol --bg="$BG"
}
Valadil
sumber
7

Tampaknya tidak ada fungsi gnome-terminaluntuk menambahkan tab baru ke jendela yang ada dari baris perintah. Tetapi ada beberapa opsi untuk mencapai apa yang Anda inginkan.

Per Profil Perintah

Buat gnome-terminalprofil baru untuk setiap host yang akan Anda masuki SSH. Jika Anda hanya memiliki beberapa host yang terhubung secara teratur, ini mungkin yang paling sederhana. Setiap profil dapat memiliki judul yang berbeda, warna latar depan, warna latar belakang, perintah kustom dan pengaturan lainnya yang ditentukan. Kemudian Anda dapat menggunakan File -> Open Tabuntuk membuka tab baru dengan profil yang dipilih.

Profil yang Dapat Digunakan Kembali

Buat gnome-terminalprofil baru yang akan digunakan untuk membuka jendela baru setiap kali Anda ingin terhubung ke host SSH yang berbeda (berdasarkan jawaban AskUbuntu ini yang ditunjukkan Stefano ). Ini akan bekerja dengan baik jika Anda sering terhubung ke berbagai host. Ini tidak akan memungkinkan Anda untuk membedakan antara gnome-terminaljendela yang berbeda di mana Anda terhubung ke host yang berbeda hanya pada warna latar belakang / latar depan, tetapi Anda akan memiliki judul yang berbeda per jendela.

  1. Buat gnome-terminalprofil baru ( File -> New Profile) berdasarkan Defaultprofil dan sebut "RemoteHost" (perhatikan, tidak ada spasi di "RemoteHost" untuk membuat perintah lebih mudah).
  2. Di bawah Title and Commandtab, ubah:
    1. Initial title: untuk "Remote Host"
    2. When terminal commands set their own titles: untuk Replace initial title
  3. Di bawah Colorstab, ubah:
    1. Hapus centang Use colors from system theme
    2. Build-in schemes: untuk Custom
    3. Text color:dan Background color:warna yang Anda pilih. Ingatlah bahwa beberapa perintah (seperti ls) menggunakan warna untuk output mereka dan Anda tidak ingin memilih warna yang akan membuat sulit untuk membaca output.
  4. Klik pada Closetombol untuk menyimpan profil baru Anda.
  5. Sekarang Anda dapat membuka gnome-terminaljendela baru untuk setiap host SSH jarak jauh menggunakan perintah gnome-terminal --window-with-profile=RemoteHost -t "Some Remote SSH Host" -x ssh user@somehost. The -tpilihan menetapkan gnome-terminaljudul jendela dan -xpilihan mengeksekusi sisa baris perintah di terminal. Anda bahkan dapat membuat aliasuntuk mempersingkat penekanan tombol total.

Garis komando

Saya menemukan entri blog ini dengan skrip berikut yang menggunakan perintah xdotooldan wmctrl(mereka tidak diinstal secara default di Ubuntu, jadi Anda mungkin perlu menginstalnya terlebih dahulu) untuk menggunakan gnome-terminal Ctrl+ Shift+ tpintasan keyboard untuk membuka tab baru di gnome-terminaljendela saat ini . Itu dapat dimodifikasi untuk membuka tab baru dengan profil tertentu dan menjalankan beberapa perintah untuk Anda.

#!/bin/bash
# Path: /usr/local/bin/gnome-terminal
if [ "x$*" != "x" ]; then
  /usr/bin/gnome-terminal "$@"
else
  pgrep -u "$USER" gnome-terminal | grep -qv "$$"
  if [ "$?" == "0" ]; then
    WID=`xdotool search --class "gnome-terminal" | head -1`
    xdotool windowfocus $WID
    xdotool key ctrl+shift+t
    wmctrl -i -a $WID
  else
    /usr/bin/gnome-terminal
  fi
fi

Lain

Anda bisa menjadi kreatif dan mencoba beberapa hal lain.

Jawaban SuperUser ini pada dasarnya menggunakan sedikit akrobat "script-fu" untuk membuat gnome-terminalprofil sementara yang digunakan untuk membuka jendela baru. Ini dapat dimodifikasi untuk Anda gunakan.

Anda mungkin dapat menggunakan Tanya Jawab StackOverflow ini dan lebih banyak lagi akrobat "script-fu" untuk mengubah gnome-terminaljudul secara dinamis setiap kali Anda SSH menjadi host jarak jauh. Itu tidak akan sekokoh perubahan warna latar / latar depan, tetapi akan lebih baik daripada Terminaljudul standar sepanjang waktu.

Dan Cruz
sumber
6

Ini akan bekerja di Gnome, JIKA Anda bersedia menggunakan jendela terminal gnome baru untuk setiap sesi ssh.

  1. Buat profil baru (dengan warna latar berbeda) yang disebut "Remote"

  2. Masukkan yang berikut ini ke .bash_aliases, atau.bashrc

    ### add to .bash_aliases, for differentiating between local and remote hosts 
    sshhelper() {
       gnome-terminal --window-with-profile=Remote -x bash -c "ssh $1";
    }
    alias sshc=sshhelper
    

Sekarang sshc remote-machinemembuka baru sesi gnome-terminal dengan "Remote" profil. ini akan membedakan antara profil lokal dan jarak jauh.

Untuk mengakomodasi beberapa profil / host, buat beberapa profil dan tempatkan sesuatu seperti ini di .bash_aliases:

### add to .bash_aliases, for differentiating between multiple remote hosts
sshhelper() {
    HOST=`echo $1 | cut -d'@' -f2`

    case $HOST in
        Production )  PROFILE="Red" ;;
        Test )        PROFILE="Green" ;;
        # ... if you have more cases ...
        *)           PROFILE="Default" ;;
    esac

    gnome-terminal --window-with-profile=$PROFILE -x bash -c "ssh $1";
}

# alias ssh=sshhelper    # this will "override" the ssh command, but may break other stuff!
alias sshc=sshhelper

Sekarang sshc Productionakan membuka jendela sesi baru menggunakan profil "Merah", sshc Testakan membuka jendela sesi baru menggunakan profil "Hijau", dan host lain akan menggunakan Profil "Default".

peonikel
sumber
2

Mengumpulkan semua informasi dari situs stack *** di sini adalah solusi paling sederhana yang saya temukan untuk terminal mint mate + mate (sama seperti untuk gnome).

  1. Di terminal pasangan, tentukan profil kedua, dengan latar belakang berbeda.
  2. Periksa apakah kunci default berfungsi Alt + PageDown / Alt + PageUp harus mengubah profil, dan latar belakang juga.
  3. sudo apt get install xdotool

Sekarang Anda dapat memodifikasi / etc / ssh / ssh_config, sehingga dapat mengubah profil setelah setiap sesi ssh dibuat:

Host *
  PermitLocalCommand yes
  LocalCommand xdotool key Alt+Page_Down

Sekarang, setelah setiap koneksi ssh dibuat di terminal, profil akan berubah dan Anda tidak akan pernah memasukkan pembaruan sql yang tidak diinginkan ke basis data produksi lagi :)

Namun, tidak ada solusi mudah untuk mencapai kembali ke profil default setelah koneksi ssh ditutup. Tapi ini terlihat cukup bagi saya, dan saya tidak menggali untuk info lebih lanjut.

Lukasz Frankowski
sumber