Automatically get different terminal colors each time I open terminal
Solution 1
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 2
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:
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
Related videos on Youtube
kpie
Updated on September 18, 2022Comments
-
kpie almost 2 years
I often find myself opening three terminals and I really like the look and feel of having distinct color palettes on each.
I have a few color palettes saved and I would like the default to progress through my saved profiles each time I open a terminal, so that if I open 3 they are each different colors without me having to manually change profile on 2.
Any thoughts?
Thanks!
-
Admin almost 8 yearsJust edited my answer with a script that does what you want. It should be added to the ./bashrc file. Hope it suits your need!
-
-
theabhinavdas almost 8 years@VishnuKumar, yep, this is what first came to mind though it might not be the best solution. glad you like it.
-
kpie almost 8 years+1 for an ok answer, I really don't want to fight with "works" but this answer requires that I use the proprietary style definitions used my the dynamic-colors project, additionally (and this is what really got me) it doesn't support opacity : ( I feel like the answer should involve some combination of the
gnome-terminal --load-config=FILE
-
theabhinavdas almost 8 years@kpie, haha. No fair, opacity wasn't mentioned in the question. Also, it is difficult to set opacity from command line and depends a lot on a lot of things. Also, this question may be answered in various ways, but I thought my answer was pretty convenient (if only for me, haha) :)
-
kpie almost 8 yearsI hope I can make up for knit picking by providing the required scripts... github.com/Krewn/stylingTerminalOnOpen And I should specify it doesn't support variable opacity, the color schemes will maintain the opacity of your default profile.
-
kpie almost 8 years+1 for an ok answer but I don't have konsole. @<MemoryAddress>'s answer supports more terminal interfaces (any that support OSC escape sequences). But yours is easier to use. I'll give the bounty to whoever has the most up votes in a couple days. Thanks for your answer!
-
Matt O. almost 8 yearsYou'd be surprised how many people would actually comment on here telling me I need to tell you how to install it -_-
-
kpie almost 8 yearsDid you read the comments on teh other ans?
-
Matt O. almost 8 yearsI did. Maybe I'm missing something but you're looking for variable opacity and something that doesn't require aliases. Konsole achieves both of those, but I'm not sure about the escape sequences.
-
kpie almost 8 yearsI meant that if I'm writing even a tiny bash script it is safe to assume I know about apt, no?
-
Matt O. almost 8 yearshaha I get it. Don't blame me, after having enough nutty people on here suggest edits I just do it automatically. I'm not trying to insult your intelligence.
-
IanC almost 8 yearsIdea for tomorrow is adding a conditional for
exit
based on some file like~/bashcolor.txt
. It could have a line to say if the bash being opened is the "original" or the "copy". So ifcat ~/bashcolor.txt
returns "ORIGINAL" theexit
command is run andecho COPY > ~/bashcolor.txt
. Else, the exit doesn't run but the file goes back to original (echo ORIGINAL > ~/bashcolor.txt
). It would solve the flashing terminal issue. -
IanC almost 8 yearsFun script to make, might even use it myself :) Any improvements suggestions are welcome!
-
Admin almost 8 yearsThis works in trusty +1
-
kpie almost 8 yearsI made 1 change in my version... This way it keeps cycling when you open more terminals than you have profiles.
Number_of_bashs=$(($(($(pstree -c | grep "bash" | wc -l)-1))%${#Color_counter[@]}))
-
IanC almost 8 yearsNice! It didn't came to my mind to use modulus to keep the iteration cyclic :p
-
Admin about 3 yearsThanks ... I just upgraded my OS and was immediately dissatisfied with the terminal app because each new tab had the same colors. (Having different bg colors really helps you make sure you're not typing in the wrong terminal!) So I installed Konsole and could not find the setting for random colors ... it's well hidden for some reason.