This page explains some rudimentary details about how to go
about modifying the Dashboard user interface that runs ESI. Dashboard is
a very versatile tool with many visible and hidden functions, so this is
far from an extensive tutorial. Rather it is more a repository for information
gained by making small changes to Dashboard over the course of the years.
A true Dashboard manual was never supplied by Lick Observatory.
You should be able to make modifications in your local directory as any
esi user (e.g., from ~esieng/work). However, the 'official'
/kroot files are owned by the kics account.
cp /kroot/Versions/kss/esi/ktui/1.0/esi.dbd ./esi45.dbd
(or some other unique name; to copy the working version).
obsr -sd esi.kwd ./esi45.dbd
to bring up the copy. In the "-sd" keys, "s" indicates "safe" mode
where actual control of the motors is supposed to be inhibited. IT IS NOT!!
The "d" stands for "developer" mode, in which you can edit the GUI.
(Note that the esi.kwd file should be found in the /kroot
path if nonexistent in the current directory.)
Make changes and save. See the "Features" section below for details.
To save the layout, click the "Save..." button on the top menu bar (towards
the right). "Layout as..." and provide a new name for the revised layout.
Apparently you cannot write over your original layout file. Let's assume
that you saved the new layout as "esi46.dbd".
Start up the new GUI as a user would:
obsr esi.kwd ./esi46.dbd
Make sure your changes are there and working properly.
Once satisfied, make another copy of the original esi.dbd and then copy
the new one on top of it.
To officially release the esi.dbd file into the /kroot
tree, do the following. Note that problems occur when trying to "commit"
these changes from Keck into the CVS repository (which resides at Lick);
they have not yet been resolved, hence this workaround.
login to kanaha as kics
... rename the old copy of esi.dbd to something like esi.dbd.12may2003
... copy your working copy to this directory
cp -p ~esieng/work/esi46.dbd ./esi.dbd
retry your fix from the workspace pulldown menu to verify that it works
from the default /kroot tree
(e.g., from "ESI Control Menu -> Subcomponents ... -> Dashboard")
document your changes on this webpage in the section, "Gory Details" (until
CVS is accessible!)
Selecting properties of a widget
Shift-click on the gray border of the widget to bring up the
properties window. This contains the widget name (automatically assigned,
so don't change it!), foreground and background colors, (x,y) position,
text, and the linked command(s).
When finished, click the "COMMIT" button at the bottom of the Properties
One way to do this is shift-click the widget border to bring up the
Properties Edit window, and change the property "text".
Deleting an object
Shift-click the widget border to bring up the Properties Edit window,
then select the 'DELETE OBJECT' button.
Possible Problems, Gotcha's
In most cases, this will not be applicable, but if necessary, trying to
save the esi.kwd file is not easy!
The dashboard gui tool does not let you save the esi.kwd file
as some other name (e.g., as esitest.kwd) via the "Save As..."
option. It will give you a tcl error similar to
"Error: can not find channel
You will have to manually edit this file and 'release' it like the esi.dbd
Gory details (A history of mods to esi.dbd)
Removal of ESI IONPUMP references (14May2003)
Because of the new ion pump work that will be released in June 2003
(WDahl, etal), references to the ESI
IONPUMP keyword were removed from the observer's and the OA's dashboard
guis. Removed relevant IONPUMP buttons from the 'Tricorder' display
and the 'environmental' Alarms category. The esi.kwd
file was untouched.
STOP or PANIC button
This button (named "G260 Anonymous", and graphic 99) was changed from
"STOP" to "PANIC" on 25 September 2002. The command it calls is "panicStop
The command this executes is "resetESI," which lives on kanaha in
This was changed to "resetESI ; acceptCurr esi ; set WANTMODE \$ESIMODE"
in an attempt to do the equivalent of a "Clear Desired" after initialization