Automatically get different terminal colors each time I open terminal
Solution 1:
One option could be using xfce4-terminal
. It's very similar to default Ubuntu terminal (which is gnome-terminal
) and many of it's dependency packages use gtk component, which makes it a suitable alternative.
First install it with
sudo apt-get install xfce4-terminal
Then open it, Go to Edit -> Preferences , Select Colors Tab and check the option that says, Vary the background color for each Tab, and Now exit.
Make the default terminal xfce4-terminal
or change the shortcut of Ctrl-Alt-T
to open it.
Now, each time you open, you will be presented with different color palette.
Useful Links:
- How do I change global hotkeys / keyboard shortcuts?
Solution 2:
Functional Version
Instructions:
This script considers that you are using gnome-terminal, which is the default Ubuntu terminal.
Before running the script, open the gnome-terminal and create some profiles (Edit>Preference>Profiles) with different settings as you wish (background color, text color, ..). You can name them Profile1, Profile2, Profile3 and so on. Create enough profiles to cover the quantity of terminals that will be opened, but if a higher number of terminals are opened, the default profile will be used.
The script creates a file ~/.Bash_Color_Changer, which it depends on, since it will tell the script if the terminal was opened regularly or after a call on .bashrc.
Add the script to the end of your ~/.bashrc file.
Script:
Add to .bashrc
:
#Change color according to the number of Bash shells opened
#Creates the .Bash_Color_Changer file if it's not present
if ! [ -f ~/.Bash_Color_Changer ]; then
echo ORIGINAL > ~/.Bash_Color_Changer
fi
#Array holding the name of the profiles: Substitute it for the names you're using
Color_counter=(Profile1 Profile2 Profile3)
#Finds out the number of opened bashs counting the lines containing "bash"
#in the pstree function. (-c deactivates compact display to avoid it showing
#lines with "2*[bash]" instead of one for each bash)
Number_of_bashs=$(($(pstree -c | grep "bash" | wc -l)-1))
#Checks if the terminal being opened was opened by the user or by
#the script, and act according to it
if [ $(cat ~/.Bash_Color_Changer) = ORIGINAL ]; then
if ((Number_of_bashs < ${#Color_counter[*]})); then
echo COPY > ~/.Bash_Color_Changer
gnome-terminal --tab-with-profile-internal-id=${Color_counter[${Number_of_bashs}]}
exit
fi
else
echo ORIGINAL > ~/.Bash_Color_Changer
fi
Tested but not extensively. Enjoy!
Solution 3:
Haha, very interesting. I might try doing this as well. I mostly only run multiple terminals and a browser.
So I looked around and found this - https://github.com/sos4nt/dynamic-colors. A very neat little project that helps you achieve a part of what you want.
Now, in the directory colorschemes/
of that project, you'll see that it currently has 4 colour schemes. You can add as many as you need/want.
So to get every terminal to choose a different color-scheme, I would add a function to my .bash_profile
or .bashrc
or wherever, such that the function does two things:
- Figures out how many terminals are currently running
- Issue a
dynamic-colors switch colorscheme-name
command based on (1).
Hope this helps!
P.S. I would write a script for you, but I hate spoon-feeding and I'm lazy af. :)
Solution 4:
Konsole actually supports this functionality natively. Konsole is really powerful and highly customizable.
If you don't have Konsole then simply sudo apt install konsole
- Go to Settings
- Konsole Settings
- Select the Appearance tab
- Select your color scheme
- Select "Edit" on the right
- There's a box to set "Vary the background color for each tab"
On top of that, if you're working on three servers at the same time you can include some nifty aliases shown here