GNU Info

Info Node: (gpm.info)gpm-root

(gpm.info)gpm-root


Next: hltest Prev: Emacs Support Up: Demo Clients
Enter node , (file) or (file)node

The "gpm-root" program
======================

   The program `gpm-root' is designed to handle Control-Mouse events to
draw menus on the background of the current tty. The actual menus are
described by a configuration file in the user's home directory.

   Please note that `gpm-root' needs to run with Linux 1.1.73 or newer,
because previous kernels lack some screen handling capabilities
required by the program.

   The program uses the files `/dev/vcs*' to draw to the console screen.
These are available only from kernel 1.1.81 onward. If you miss those
device nodes, you should create them using `create_vcs' in the
distribution directory. The tool won't run with kernels older than
1.1.81, because they lacked a full screen dump/restore capability.

   Available command line options are the following:

`-m NUMBER'
     Choose the modifier to use (by default: `control'). The modifier
     can be provided either as a number or as a symbolic string.
     Allowed strings are `shift', `anyAlt', `leftAlt', `rightAlt',
     `control'.

`-u'
     Deny using user-specific configuration files. With this option on,
     only `/etc/gpm-root.conf' will be used as a source of
     configuration information. This option is intended for those
     system administrators who fear security could be broken by this
     daemon. Things should be sufficiently secure, but if you find a
     hole please tell me about it.

`-D'
     Do not automatically enter background operation when started, and
     log messages to the standard error stream, not the syslog
     mechanism.  This is useful for debugging; in previous releases it
     was done with a compile-time option.

`-V VERBOSITY INCREMENT'
     Raise the maximum level of messages that will be logged.  Thus a
     positive argument has the effect of making the program more
     verbose.  One can also give a negative argument to hush the
     program; however, note that due to getopt(3) rules a negative
     argument must follow the option with no space betwixt (that is,
     `-V-1' but not `-V -1').  Note: Program Arguments.
  The argument is optional and its default value is 1.

   Each time a menu is drawn, the configuration file is reparsed if it
has changed. This allows modification of personal setup without
reinvoking the daemon.

   The actual configuration file is better introduced by an example:

     # sample configuration file for gpm-root
     # edit it to suit your taste
     
     button 2 {
       name "system status"
       foreground red
       background black
       border yellow
       head bright yellow
     
       ""          f.nop
       "load: "    f.load
       "free:"     f.free
       "---------" f.nop
       "disk usage" f.bgcmd  "du | sort -rn > /tmp/du"
     }
     
     button 3 {
       name "jump"
     
       foreground black
       background red
       border bright yellow
       head bright yellow
     
       "tty1"  f.jptty  "1"
       "tty2"  f.jptty  "2"
       "tty3"  f.jptty  "3"
       "tty4"  f.jptty  "4"
       "tty5"  f.jptty  "5"
       "tty6"  f.jptty  "6"
         ""        f.nop
         "more of them..." {
               "tty 17" f.jptty  "17"
               }
      }

   The syntax for the file won't be described here, being it quite
apparent from the example above. Blanks and newlines are unused in
parsing the file, and the layout of the file is free. Comments are
allowed in the file: any hash mark (`#') found at the beginning of the
line or after white space makes the parser discard anything up to the
next line. To insert quotes (`"') in strings precede them with a
backslash.

   Note that recursive menus are allowed, to any level of recursion.

   Keywords belong to three groups: the button keyword, the cfg
keywords and the action keywords. They are all described in the table
below:

`button NUMBER MENU'
     The `button' keyword is used to introduce a menu. It is followed
     by the number of the relevant button (1=left, 2=middle, 3=right),
     an open brace, a menu and a closed brace.  A menu is made up of
     cfg statements, followed by action statements. Cfg statements can
     come in any order, while the order of action statements tells the
     actual order in which actions will appear on the screen, top to
     bottom.

   The following statements belong to the cfg set.

`name STRING'
     If the `name' keyword is present, the specified STRING will be
     used as the name for the current menu.

`background COLOR'
     This statements is used to specify the background color to be used
     in the current menu. The COLOR can be specified with one of the
     eight canonical strings `black', `red', `cyan' etc. The background
     defaults to black.

`foreground COLOR'
     This statements is used to specify the foreground color for menu
     items. Its value defaults to `white'.  An optional `bright'
     keyword can appear before the actual color.

`border COLOR'
     `border' is used to specify the border color for the menu. Its
     value defaults to `white'.  An optional `bright' keyword can
     appear before the actual color.

`head COLOR'
     `head' is used to specify the foreground color for the title of
     the menu. Its value defaults to `white'.  An optional `bright'
     keyword can appear before the actual color.

   The following statements belong to the action set.

`STRING f.fgcmd CMDSTRING'
     When the mouse button is released above the corresponding menu
     item, the CMDSTRING is pasted in the keyboard queue of the current
     console. This is not yet implemented.

`STRING f.bgcmd CMDSTRING'
     When the mouse button is released above the corresponding menu
     item, a shell (`/bin/sh') is forked to execute the specified
     command, with `stdin' connected to `/dev/null', and `stdout',
     `stderr' connected to the active console.

`STRING f.jptty TTYNUMBER'
     When the mouse button is released above the corresponding menu
     item, the console is switched to the one specified. The TTYNUMBER
     must be specified as a string. Any tty can be reached this way,
     even those which are not accessible via the keyboard.

`STRING f.mktty TTYNUMBER'
     When the mouse button is released above the corresponding menu
     item, an unused console is selected, and `/sbin/mingetty' is
     executed in it. The current console is switched to the newly
     opened console. I use this command to save kernel memory by
     opening a single console through `/etc/inittab' and requesting the
     others only when i need to login.

`STRING WHOLE-MENU'
     A menu can directly follow the label string.  When the mouse
     pointer leaves the menu frame at the level of STRING, a second
     menu is posted on screen.

`STRING f.lock'
     When the mouse button is released above the corresponding menu
     item, the keyboard and the screen are locked, and only the locking
     user or the superuser can unlock them. This is not yet implemented.

`STRING f.load'
     The current loadavg when the menu is posted is concatenated to
     STRING to build the actual message displayed on screen. Nothing
     happens at button release.

`STRING f.free'
     The free memory and swap when the menu is posted is concatenated
     to STRING to build the actual message displayed on screen. Nothing
     happens at button release.

`STRING f.time'
     The current time is formatted with strftime(3), according to
     STRING. The resulting string is the actual message displayed on
     screen. Nothing happens at button release.

`STRING f.pipe CMDLINE'
     When the mouse pointer leaves the menu frame at the level of
     STRING, a message box is posted on screen showing the last ten
     lines of the output of CMDLINE. CMDLINE is executed by `/bin/sh'.
     This is not yet implemented.

`STRING f.nop'
     This does nothing, it only displays STRING on the menu.

   The `HOME', `LOGNAME' and `USER' environment variables are setup to
the values for the invoking user before spawning an external process
(`f.bgcmd', `f.pipe'). The current directory is always `/'.

   Known bugs have been fixed. In particular, if you invoke `gpm-root'
right after `gpm', it will delay a few seconds before trying to connect
to the daemon.


automatically generated by info2www version 1.2.2.9