Change profiles automatically in Tilix when connecting to SSH hosts

I use Tilix as my main terminal app on Ubuntu. I like it mainly because it’s easy to use and shows multiple sessions in tiles and tabs, so it’s easy to switch between multiple servers without too much fuss

Tilix is also pretty customizable. I just needed to have the “profile” automatically switch according to the server/machine I switch to. This can be done according to the documentation per https://gnunn1.github.io/tilix-web/manual/profileswitch/ but I wanted something configured locally, not sent to the remote system.

So I just added a function that wraps my ssh command. Here’s how it looks in my .bashrc

ssh() { 
	SSHAPP=`which ssh`;   
	ARGS=$@;   
	echo "switching to $ARGS"; 
	printf "\033]7;file://%s/\007" "$ARGS";   
	$SSHAPP $ARGS; 
}

This sets up the hostname of machine you’re logging into as the title. That’s your trigger. What remains is to create a profile and assign that profile to automatically switch when the trigger (hostname:directory, user can also be added) is set.

Go to Profiles > Edit Profile > Advanced (tab) and under Match add the hostname.


That’s about it. I’m going to add a new profile with a RED background now for my production machines! too much?

Update (Jan 8, 2020)

I noticed that I have also added a Match for my localhost hostname in the Default profile, so that the profile would revert to that once I logged off a remote host.

Another thing I needed was to create a special trigger if I wanted to use a wildcard match for hostnames (ie. if I wanted to switch profile on all my AWS instances via Session Manager). And match that special hostname (aws-instance below for example). Here’s my ssh bash function now:

ssh () {
     SSHAPP=/usr/bin/ssh 
     ARGS=$@ 
     if [[ $ARGS == i-* ]]
     then
         echo "switching to AWS instance"
         printf "\033]7;file://%s/\007" "aws-instance"
     else
         echo "switching to $ARGS"
         printf "\033]7;file://%s/\007" "$ARGS"
     fi
     $SSHAPP $ARGS
 }

Similar Posts:




4 Comments

Nice tip. Works (almost) perfect. I’m using ZSH (don’t know if that’s related) and when the ssh session terminates the automatic profile remains active. Is there a way to unset the remote hostname so that the profile switches back to the default one?

replacing the SSHAPP line in the function code worked on my ZSH:

ssh () {
SSHAPP=/usr/bin/ssh
ARGS=$@
echo "switching to $ARGS"
printf "\033]7;file://%s/\007" "$ARGS"
$SSHAPP $ARGS
}

Leave a Reply

Your email address will not be published.