rstartd.real [-c _c_o_n_f_i_g_f_i_l_e_n_a_m_e]
_R_s_t_a_r_t_d is an implementation of a Remote Start "helper" as defined in "A Flexible Remote Execution Protocol Based on rrsshh".
This document describes the peculiarities of _r_s_t_a_r_t_d and how it is configured.
_R_s_t_a_r_t_d has a hierarchy of configuration files which are executed in
order when a request is made. They are:
global config per-user ("local") config global per-context config per-user ("local") per-context config config from request
_R_s_t_a_r_t_d starts by reading and executing the global config file. This file will normally specify the locations of the other configuration files and any systemwide defaults.
_R_s_t_a_r_t_d will then read the user's local config file, default name $HOME/.rstart.
_R_s_t_a_r_t_d will then start interpreting the request.
Presumably one of the first lines in the request will be a CONTEXT line. The context name is converted to lower case.
_R_s_t_a_r_t_d will read the global config file for that context, default name
/etc/X11/rstart/contexts/
It will then read the user's config file for that context, default name
$HOME/.rstart.contexts/
(If neither of these exists, _r_s_t_a_r_t_d aborts with a Failure message.)
_R_s_t_a_r_t_d will finish interpreting the request, and execute the program
specified.
This allows the system administrator and the user a large degree of control
over the operation of _r_s_t_a_r_t_d. The administrator has final say, because
the global config file doesn't need to specify a per-user config file.
If it does, however, the user can override anything from the global file,
and can even completely replace the global context config files.
The config files have a somewhat more flexible format than requests do;
they are allowed to contain blank lines and lines beginning with "#"
are comments and ignored. (#s in the middle of lines are data, not comment
markers.)
Any commands run are provided a few useful pieces of information in
environment variables. The exact names are configurable, but the supplied
defaults are:
Generic commands are searched for in several places: (defaults)
Each of these directories should have a file called @List that gives
the names and descriptions of the commands in that directory in the
format specified for ListGenericCommands.
DETACH is implemented by redirecting file descriptors 0,1, and 2 to
/dev/null and forking before executing the program.
CMD is implemented by invoking $SHELL (default /bin/sh) with "-c" and
the specified command as arguments.
POSIX-UMASK is implemented in the obvious way.
The authorization programs are run in the same context as the target
program - same environment variables, path, etc. Long term this might
be a problem.
In the X context, GENERIC-CMD Terminal runs xterm.
In the OpenWindows context, GENERIC-CMD Terminal runs cmdtool.
In the X context, GENERIC-CMD LoadMonitor runs xload.
In the OpenWindows context, GENERIC-CMD LoadMonitor runs perfmeter.
GGEENNEERRIICC--CCMMDD LLiissttCCoonntteexxttss lists the contents of @List in both the
system-wide and per-user contexts directories. It is available in
all contexts.
GGEENNEERRIICC--CCMMDD LLiissttGGeenneerriiccCCoommmmaannddss lists the contents of @List in the
system-wide and per-user commands directories, including the
per-context subdirectories for the current context. It is available
in all contexts.
CCOONNTTEEXXTT NNoonnee is not implemented.
CCOONNTTEEXXTT DDeeffaauulltt is really dull.
For installation ease, the "contexts" directory in the distribution contains
a file "@Aliases" which lists a context name and aliases for that context.
This file is used to make symlinks in the contexts and commands directories.
All MMIISSCC values are passed unmodified as environment variables.
One can mistreat _r_s_t_a_r_t_d in any number of ways, resulting in anything
from stupid behavior to core dumps. Other than by explicitly running
programs I don't think it can write or delete any files, but there's
no guarantee of that. The important thing is that (a) it probably won't
do anything REALLY stupid and (b) it runs with the user's permissions,
so it can't do anything catastrophic.
@List files need not be complete; contexts or commands which are dull
or which need not or should not be advertised need not be listed.
In particular, per-user @List files should not list things which are in
the system-wide @List files. In the future, perhaps ListContexts and
ListGenericCommands will automatically suppress lines from the
system-wide files when there are per-user replacements for those lines.
Error handling is OK to weak. In particular, no attempt is made to
properly report errors on the exec itself. (Perversely, exec errors
could be reliably reported when detaching, but not when passing the
stdin/out socket to the app.)
If compiled with -DODT1_DISPLAY_HACK, _r_s_t_a_r_t_d will work around a bug in
SCO ODT version 1. (1.1?) (The bug is that the X clients are all compiled
with a bad library that doesn't know how to look host names up using DNS.
The fix is to look up a host name in $DISPLAY and substitute an IP address.)
This is a trivial example of an incompatibility that _r_s_t_a_r_t can hide.
$RSTART_CONTEXT the name of the context
$RSTART_GLOBAL_CONTEXTSthe global contexts directory
$RSTART_LOCAL_CONTEXTSthe local contexts directory
$RSTART_GLOBAL_COMMANDSthe global generic commands directory
$RSTART_LOCAL_COMMANDSthe local generic commands directory
$RSTART_{GLOBAL,LOCAL}_CONTEXTS should contain one special file, @List,
which contains a list of the contexts in that directory in the format
specified for ListContexts. The supplied version of ListContexts will
cat both the global and local copies of @List.
per-user per-context directory ($HOME/.rstart.commands/
(Yes, this means you can't have an all-contexts generic command with the
same name as a context. It didn't seem like a big deal.)
CONFIGURATION KEYWORDS
There are several "special" _r_s_t_a_r_t keywords defined for _r_s_t_a_r_t_d
configuration. Unless otherwise specified, there are no defaults; related
features are disabled in this case.
NOTES
When using the C shell, or any other shell which runs a script every
time the shell is started, the script may get run several times.
In the worst case, the script may get run tthhrreeee times:
By rsh, to run _r_s_t_a_r_t_d
By _r_s_t_a_r_t_d, to run the specified command
By the command, eg _x_t_e_r_m
_r_s_t_a_r_t_d currently limits lines, both from config files and requests, to
BUFSIZ bytes.
SEE ALSO
rstart(1), rsh(1), A Flexible Remote Execution Protocol Based on rrsshh
AUTHOR
Jordan Brown, Quarterdeck Office Systems