So, as seen in my previous post on customizing the QGIS UI, it's now
possible to completely customize the QGIS interface, adding or removing
items as you choose. You can save some layouts, and apply them as
needed. It all comes built into QGIS, presented in a handy visual
interface. This lets you check and uncheck boxes to activate and
deactivate various items on the screen. Which is great, if your own
machine is all you need to worry about.
But let's say you're in a situation where there's more than one user.
Say, for example, that you're teaching a class on GIS concepts. You want
all the students to keep up with what you're doing, so you'd like only
the tools necessary for that class to be on the screen. In fact, you
want everyone's QGIS to be configured exactly the same way as yours, and
in more ways than just the UI.
In that case, there are two handy files to know about: QGIS.conf and
QGISCUSTOMIZATION.conf. In Linux, you'll find them under
/home/your_user_name/.config/QuantumGIS/. (If you've done something
interesting with your install, or you're using another OS, you may have
to search for those two files.)
When QGIS loads, it takes a look at those files to configure itself.
What's great about this is that, for the most part, these files are
written in plain English. The format goes more or less like this:
[Customizable Thing]
aspect_of_customizable_thing=some_property
Or, to name an example:
[locale]
userLocale=en_ZA
With some exceptions, these are all easily human-readable, and hence,
modifiable.
QGISCUSTOMIZATION.conf contains only one set of customization options,
called (surprisingly) Customization. This is the set of options that
is used to activate or deactivate various parts of the UI. The options
themselves are all in this format:
some\element\on\the\interface=state
For example:
StatusBar\mCoordsEdit=true
StatusBar\mCoordsLabel=false
... which will let your UI display your cursor's current geographic
coordinates in the status bar, but not precede the coordinate display
area with the (useless) "Coordinates:" label.
But here's something (arguably) even more interesting: the contents of
QGIS.conf, the main configuration file. This goes beyond just the UI,
and influences literally every customizable aspect of QGIS! Even
including your database connections:
[PostgreSQL]
connections\foo\service=
connections\foo\host=localhost
connections\foo\port=5432
connections\foo\database=foo
connections\foo\username=foo_user
connections\foo\password=foo_password
connections\foo\publicOnly=false
connections\foo\geometryColumnsOnly=false
connections\foo\allowGeometrylessTables=true
connections\foo\sslmode=1
connections\foo\saveUsername=true
connections\foo\savePassword=true
connections\foo\estimatedMetadata=false
And your plugins:
[PythonPlugins]
plugin_installer=true
fTools=true
mapfile_tools=false
mapserver_export=false
And the list goes on. You can explore these files yourself, of course:
what they contain depends greatly on what all you've done in your
current install of QGIS.
But you don't even need to edit them by hand to gain a benefit from
them. If you know where they are, and there's a standard setup on all
the computers you'd like to customize, it's easy enough to throw a bash
script out there that will configure all the machines en masse. For
instance, say you've got a directory that looks like this:
batch_customize.sh .config/standard_qgis_install/QGIS.conf
.config/standard_qgis_install/QGISCUSTOMIZATION.conf
Then all that would need to be in batch_customize.sh is this:
#!/bin/bash
cp -r .config /home/*
... to be run on all the machines that need to be customized. Obviously,
if you're using not-UNIX, this will have to look a bit different, but
the same idea applies. You can set QGIS up in a standard way for a given
purpose, and distribute this setup around easily. Following which, all
the machines you have applied this process on will have a standardized
QGIS setup. You might even want to put this folder on a network location
somewhere, and configure all the computers to copy those files over on
startup, which will minimize your maintenance.
Either way, if you want to apply a setup to a whole set of computers,
there's no need to go from machine to machine to do it by hand. Just use
the config files strategically, and you'll cut down on the effort
required. And, since these files contain everything that can possibly be
configured, you can be assured that the setup is identical on all
machines. Problem solved! :)