Locking down a user and/or do not launch additional copies of one app

Duncan 1i5t5.duncan at cox.net
Thu Jul 19 11:32:10 BST 2012

Chuck Burns posted on Thu, 19 Jul 2012 00:27:07 -0500 as excerpted:

> My little girl has her own login (she's 5) and she manages to unlock the
> widgets, remove taskbar from the panel, and then launches her games.
> Over and over.. since she doesn't see them running any more.
> Is there any way of:
> a) Making it where she can't unlock the widgets without a password
> and
> b) Prevent launching any of the kdegames more than once? If you try to
> launch another, the one that is already running is brought back into
> view, ala Restore Window ?
> I'm not above scripting this behavior if it's even possible.  Thanks

Given that you mentioned scripting, it's certainly possible, at least the 
multiple running instances bit (b).

I don't know about (a), tho it is of course possible to set the various 
config files read-only, so at least the changed config can't be saved and 
a new login brings back the saved config.

With reasonably new versions of kde4 (I'm not sure when it was 
introduced, but kde 4.5 or so seems about right, maybe the possibility 
was their before that, but without anything implementing it), it's also 
possible to javascript plasma, and in fact, if your version of kde/plasma 
has (with widgets unlocked) the option to add panel, default panel, what 
that function actually does is invoke a javascript that adds an empty 
panel and adds the default set of widgets, etc, to it.  I remember 
reading about this on the blogs when they were first implementing it.  
However, you'd probably have to ask on the plasma list for more details 
or just investigate that script and create your own, but see below for 
additional resources to check first.

Back to (b).

There is a command-line application called wmctrl (window-manager 
control), that is likely in your distro's package tree (I installed and 
use it in my own scripts here on gentoo, for instance).  This app lets 
you bash/shell-script various window actions, generally matched on window 
title.  You can resize and place windows, minimize, maximize, close, move 
them to different virtual desktops, add or delete virtual desktops, 
switch the current virtual desktop, etc.

wmctrl homepage:  http://tomas.styblo.name/wmctrl/

FWIW, there's another app, wmiface, with similar but more advanced 
functionality, actually developed by a kde dev, Lubos Lunak, and hosted 
at kde-apps.org.  However, while it does have more advanced 
functionality, it's more suited to those who think in C/C++ type code 
even when they're shell scripting, as you'll see if you try reading its 
documentation (manpage, etc).  I tried it, but decided wmctrl did what I 
needed and was easier for me to use, so uninstalled this app and kept 
wmctrl.  FWIW wmiface is also available in gentoo, but I'd guess it's 
less commonly available in distros than wmctrl.

wmiface homepage:


What you'd do here, would be to create a wrapper script that when 
launched, uses wmctrl (or wmiface) to try to match an existing window for 
that app and bring it forward and into focus.  If no existing window 
matches, it would launch a new instance of the app.  With wmctrl and even 
a bit of basic shell-scripting knowledge, this should be reasonably 
simple.  Of course, don't forget to set the executable bit on your 
scripts, but if you know anything about scripting, that's already a given.

Next, you edit the menu entries for the desired apps (kmenuedit does 
this, run it from krunner or kickoff, or from the context menu of the 
various launch menu widgets, kickoff, classic kmenu, etc), pointing them 
at the wrapper script instead of the original kde app, so when they're 
launched, the script raises and activates the app's main window if it 
exists (switching to a different virtual desktop if necessary to do so, 
or bringing the app onto the current virtual desktop if desired 
instead... tho you can ignore this bit if your daughter hasn't discovered 
virtual desktops yet), and launches a new instance of the app, if not.

Alternatively and perhaps easier for someone who you might prefer to have 
a more limited launcher, you can delete kickoff/classic-menu/lancelot 
plasmoids and replace them with one of several icon-based app-launchers, 
changing it to point to the wrapper script instead of editing the menu.

Yet another (system level, root privs required) alternative would involve 
moving the actual binaries from their normal location in, probably, /usr/
bin, to a different directory not on the normal path (say /usr/wrapped-
bin), replacing them with the wrapper-scripts, which could then launch 
them via absolute path (/usr/wrapped-bin/kpat, for example).

FWIW, this type of wrapper script is a reasonably common solution to this 
sort of problem, and one I use regularly here, tho generally to solve 
different problems.  For instance, I have two separate instances of claws-
mail, one for handling my mail (after kmail akonadified and got hugely 
buggy, so I had to dump it), one (with the feed plugin) as my feed 
reader.  Most folks would just use the one instance for both, but I 
wanted my feeds handled separately.  So I have wrapper scripts for both 
instances, one that sets up a few environmental vars to point claws at 
the mail dir, one that sets them up differently to point it at the feeds 
dir and keep the two from interfering with each other.  Similarly, I use 
pan for news (nntp), but have three different instances and wrapper 
scripts for it, one for text groups (mostly mailing lists followed as 
newsgroups, including this one, via gmane's list2news service), one for 
binaries, and one for testing, as I'm a regular on the pan lists and 
sometimes need to check posts that are giving people trouble, without 
screwing up my normal pan config.  Wrapper scripts are thus a quite 
common generally routine solution to such issues.

Additional resources:


... has a number of additional resources you may find useful.  In 
particular, there's a whole mini-site's worth of pages on kde system 
administration that's WELL worth reading.


The sections on the file system, kde and xdg hierarchy, and environmental 
variables have been QUITE some help here, in understanding and 
customizing my configuration.

But the kiosk information should be more direct to what you're trying to 
do here, since the idea is to lock down settings in a public kiosk 
environment, and that's basically what you're interested in doing for 
your daughter, as well.  I won't link that specifically here as there are 
several kiosk related links under user and group profiles, plus the kiosk 
tool under tools, at the above sysadmin link.  So several pages/links for 
that, at the above.

Additionally, there's more information on the plasma desktop javascripting 
I mentioned above.  That's covered here:


Someday I need to read thru that and see what I can make use of from 
it...  I'm more a shell-scripter than a javascripter, but with the 
examples and such, I could probably do something with it, at least...

Meanwhile, the plasma techbase section moved to the community.kde.org 
wiki, and can be found here:


Duncan - List replies preferred.   No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master."  Richard Stallman

This message is from the kde mailing list.
Account management:  https://mail.kde.org/mailman/listinfo/kde.
Archives: http://lists.kde.org/.
More info: http://www.kde.org/faq.html.

More information about the kde mailing list