KDE Konsole Backgrounds and ssh
If you are a GUI-oriented person, you need not read this. But if you are like me, you make heavy use of the console. If you are managing many machines as well as your own Linux workstation, it’s VERY important to know where your console session is.
Too many times in the past I had wanted to bring down my workstation, and would type “shutdown” or “reboot” in the console window, only to find out to my horrors that the console was really a remote session to one of my web servers serving up hundreds of web sites.
Whoops!
Well, that prompted me into developing a solution where I can tell at a glance where I happened to be logged in. This way, I wouldn’t be in danger of issuing dangerous commands on the wrong server. And if you are working for someone else, it also keeps you from being FIRED!
I use KDE to do my development and administration, and I have fallen in love with Konsole. Konsole, despite its quirks, has a lot of nice features that makes it a shoe-in for what I am talking about.
My approach now is to create login bash scripts to begin a session with whatever machine I need to ssh into, and have that script also do something nice to the Konsole background in the process.
I also develop a lot of websites, as well as other things. Sometimes, it’s helpful to change the background when I go into emacs so that I have the proper contrast for syntax coloring, etc. Same approach works there as well.
The secret to my machinations? A little script I wrote called kschemaset. It does all the “magic” in resetting the Konsole background, and is actually derived from a similar script that didn’t do everything I needed. But in the fine tradition of opensource, I grabbed it and enhanced it over time. It currently does require you to either create images or acquire images for your backgrounds, but eventually I wish to create a more comprehensive opensource package that will do all that magic for you automatically. But for now, it’s a lot of fun to come up with a cute background that represents the server you are working on! I recommend choosing either very light pastel colors or very dark colors with low contrast, because you want to be able to read the text without killing your eyes.
You don’t have to create any artwork at all, actually, and many may elect to do it that way. It’s all up to how you want to proceed.
The first step is to install the kschemaset script somewhere where it can execute. There are actually other related scripts involved, and they are all available from here. Typically, I create a local bin directory to my login account and alter the .bashrc file to add it to the PATH environment variable. Since you are obviously well adept at such things if you are interested, I won’t bother with holding your hand here.
The next step involved is to create Konsole schemes to reflect the servers you wish to work on. All kschemaset does is invoke a schema for the duration of the session, and restore the old schema when the session is concluded. Eventually, not only do I want to automate the creation of new Konsole schemas, but also the images used for the backgrounds. But for now you can do this by hand — or automate these steps yourself. If you do, let me know so I don’t wind up reinventing your wheel!
Konsole has one annoying problem that seems not to have been fixed in recent times — when you add a new schema, any Konsoles that were open prior to the addition tend to get “confused” and may start displaying the wrong schema. The workaroud for this is to either to manually select the schema for those Konsoles out of sync, or to restart them. Hopefully this problem will be fixed soon.
Now, you simply create scripts based on kschemaset that will launch your new sessions, and change not only the background, but the tab text as well, on the fly, and to reset everything to the pre-existing schema and tab text when you’re done. I’ve even did this with emacs to give me a flat-black background to do my editing on. The possibilities are endless.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #!/bin/bash # Set the schema of the currently-running Konsole # Based on konsoledcopschema # So running script can know this is where it's running # (to enable scripts to enable kschemaset via recursion) export kschemaset=1 . kconfuns getKonsoleInfo getAppInfo ${*} shift if [[ ! ${appSchema} ]] ; then echo "(schema $appName not found)" fi export -f ksetSchema getKonsoleInfo getAppInfo if [ "${inKonsole}" == "1" ] && [[ ${appSchema} ]] ; then # dcop $konsole konsole reparseConfiguration dcop $konsole $session setSchema "${appSchema}" dcop $konsole $session setSchema "${appSchema}" # testing -- may not have gone through the first time if [ -n "${appName}" ] ; then dcop $konsole $session renameSession "${origSession}: ${appName}" fi if [ -n "${*}" ] ; then # run the command and reset to prveious schema. ${*} dcop $konsole $session setSchema "${origSchema}" dcop $konsole $session renameSession "${origSession}" fi else kschemaset=2 ${*} fi |
And now for the next script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #!/bin/bash # Konsole functions. Include with ". kconfuns" kloc=~/.kde/share/apps/konsole/ getKonsoleInfo() { # Make sure we're in Konsole if [ -n "${KONSOLE_DCOP}" ] ; then export inKonsole='1' export konsole=`echo $KONSOLE_DCOP | cut -d\( -f 2 | cut -d, -f1` export session=`dcop $konsole konsole currentSession` export origSchema=`dcop $konsole $session schema` export origSession=`dcop $konsole $session sessionName` else export inKonsole='0' fi } getAppInfo() { export appName="${1}" export appSchema=`ls -1 $kloc | egrep "${appName}\."` } ksetSchema() { dcop $konsole $session setSchema $1.schema } ksetSessionName() { dcop $konsole $session renameSession "$*" } |
And here is an example of lauching an ssh session using kschemaset:
1 2 3 | #!/bin/bash # Log on to the Polaris Web Server kschemaset Polaris ssh -t youraccount@yourserver.yourdomain.com $* |
And it’s that simple!

