gpm
GPM(8) GPM(8)
NAME
gpm - a cut and paste utility and mouse server for virtual consoles
SYNOPSIS
gpm [ options ]
DESCRIPTION
This package tries to be a useful mouse server for applications running
on the Linux console. It is based on the "selection" package, and some
of its code comes from selection itself. This package is intended as a
replacement for "selection" as a cut-and-paste mechanism; it also pro-
vides additional facilities. The "selection" package offered the first
cut-and-paste implementation for Linux using two mouse buttons, and the
cut buffer is still called "selection buffer" or just "selection"
throughout this document. The information below is extracted from the
texinfo file, which is the preferred source of information.
The `gpm' executable is meant to act like a daemon (thus, `gpmd' would
be a better name for it). This section is meant to describe the com-
mand-line options for `gpm', while its internals are outlined in the
next section.
Due to restrictions in the `ioctl(TIOCLINUX)' system call, `gpm' must
be run by the superuser. The restrictions have been added in the last
1.1 kernels to fix a security hole related to selection and screen
dumping.
The server can be configured to match the user's taste, and any appli-
cation using the mouse will inherit the server's attitude. From release
1.02 up to 1.19.2 is was possible for any user logged on the system
console to change the mouse feeling using the -q option. This is no
longer possible for security reasons.
As of 0.97 the server program puts itself in the background. To kill
`gpm' you can just reinvoke it with the `-k' cmdline switch, although
`killall gpm' can be a better choice.
SPECIAL COMMANDS
Version 1.10 adds the capability to execute special commands on certain
circumstances. Special commands default to rebooting and halting the
system, but the user can specify his/her personal choice. The capabil-
ity to invoke commands using the mouse is a handy one for programmers,
because it allows to issue a clean shutdown when the keyboard is locked
and no network is available to restore the system to a sane state.
Special commands are toggled by triple-clicking the left and right but-
ton -- an unlikely event during normal mouse usage. The easiest way to
triple-click is pressing one of the buttons and triple-click the other
one. When special processing is toggled, a message appears on the con-
sole (and the speaker beeps twice, if you have a speaker); if the user
releases all the buttons and presses one of them again within three
seconds, then the special command corresponding to the button is exe-
cuted.
The default special commands are:
left button
Reboot the system by signalling the init process
middle button (if any)
Execute `/sbin/shutdown -h now'
right button
Execute `/sbin/shutdown -r now'
The `-S' command line switch enables special command processing and
allows to change the three special commands. To accept the default com-
mands use `-S ""' (i.e., specify an empty argument). To specify your
own commands, use a colon-separated list to specify commands associated
to the left, middle and right button. If any of the commands is empty,
it is interpreted as `send a signal to the init process'. This particu-
lar operation is supported, in addition to executing external commands,
because sometimes bad bugs put the system to the impossibility to fork;
in these rare case the programmer should be able to shutdown the system
anyways, and killing init from a running process is the only way to do
it.
As an example, `-S ":telinit 1:/sbin/halt"', associates killing init to
the left button, going single user to the middle one, and halting the
system to the right button.
System administrators should obviously be careful about special com-
mands, as gpm runs with superuser permissions. Special commands are
best suited for computers whose mouse can be physically accessed only
by trusted people.
COMMAND LINE OPTIONS
Available command line options are the following:
-a accel
Set the acceleration value used when a single motion event is
longer than delta (see `-d').
-A [limit]
Start up with selection pasting disabled. This is intended as a
security measure; a plausible attack on a system seems to be to
stuff a nasty shell command into the selection buffer (`rm -rf
/') including the terminating line break, then all the victim
has to do is click the middle mouse button .. As of version
1.17.2, this has developed into a more general aging mechanism;
the gpm daemon can disable (age) selection pasting automatically
after a period of inactivity. To enable this mode just give the
optional limit parameter which is interpreted as the time in
seconds for which a selection is considered valid and pastable.
As of version 1.15.7, a trivial program called `disable-paste'
is provided. The following makes a good addition to `/etc/pro-
file' if you allow multiple users to work on your console.
`case $( /usr/bin/tty ) in
/dev/tty[0-9]*) /usr/bin/disable-paste ;;
esac'
-b baud
Set the baud rate.
-B sequence
Set the button sequence. `123' is the normal sequence, `321' can
be used by left-handed people, and `132' can be useful with two-
button mice (especially within Emacs). All the button permuta-
tions are allowable.
-d delta
Set the delta value. When a single motion event is longer than
delta, accel is used as a multiplying factor. (Must be 2 or
above)
-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.
-g number
With glidepoint devices, emulate the specified button with tap-
ping. number must be `1', `2', or `3', and refers to the button
number before the `-B' button remapping is performed. This
option applies to the mman and ps2 decoding. No button is emu-
lated by default because the ps2 tapping is incompatible with
some normal ps2 mice
-h Print a summary of command line options.
-i interval
Set interval to be used as an upper time limit for multiple
clicks. If the interval between button-up and button-down events
is less than limit, the press is considered a double or triple
click. Time is in milliseconds.
-k Kill a running gpm. This can be used by busmouse users to kill
gpm before running X (unless they use `-R' or the single-open
limitation is removed from the kernel).
-l charset
Choose the `inword()' look up table. The charset argument is a
list of characters. `-' is used to specify a range and `\ ' is
used to escape the next character or to provide octal codes.
Only visible character can appear in charset because control
characters can't appear in text-mode video memory, whence selec-
tion is cut.
-m filename
Choose the mouse file to open. It defaults to `/dev/mouse'.
-M Enable multiple mode. The daemon will read two different mouse
devices. Any subsequent option will refer to the second device,
while any preceding option will be used for the first device.
This option automatically forces the repeater (`-R') option on.
-o list-of-extra-options
The option works similary to the ``-o'' option of mount; it is
used to specify a list of ``extra options'' that are specific to
each mouse type. The list is comma-separated. The options `dtr',
`rts' or `both' are used by the serial initialization to toggle
the modem lines like, compatibly with earlier gpm versions; note
however that using -o dtr associated with non-plain-serial mouse
types may now generate an error.
-p Forces the pointer to be visible while selecting. This is the
behaviour of `selection-1.7', but it is sometimes confusing.
The default is not to show the pointer, which can be confusing
as well.
-r number
Set the responsiveness. A higher responsiveness is used for a
faster cursor motion.
-R name
Causes `gpm' to act as a repeater: any mouse data received while
in graphic mode will be produced on the fifo `/dev/gpmdata' in
protocol name. In principle, you can use the same names as for
the `-t' option, although repeating into some protocols may not
be implemented for a while. In addition, you can specify `raw'
as the name, to repeat the mouse data byte by byte, without any
protocol translation. If name is omitted, it defaults to `msc'.
Using gpm in repeater mode, you can configure the X server to
use its fifo as a mouse device. This option is useful for bus-
mouse owners to override the single-open limitation. It is also
an easy way to manage those stupid dual-mode mice which force
you to keep the middle button down while changing video mode.
The option is forced on by the `-M' option.
-s number
Set the sample rate for the mouse device.
-S commands
Enable special-command processing, and optionally specify custom
commands as a colon-separated list. See above for a detailed
description of special commands.
-t name
Set the mouse type. Use `-t help' to get a list of allowable
types. Since version 1.18.1, the list also shows which protocols
are available as repeaters (see -R above), by marking them with
an asterisk (``*'').
-v Print version information and exit.
-V verbosity increment
Raise or decrease 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'). The argument is optional and
its default value is 1. Default verbosity level is 5
(`LOG_NOTICE').
-2 Force two buttons. This means that the middle button, if any,
will be taken as it was the right one.
-3 Force three buttons. By default the mouse is considered to be a
2-buttons one, until the middle button is pressed. If three but-
tons are there, the right one is used to extend the selection,
and the middle one is used to paste it. Beware: if you use the
`-3' option with a 2-buttons mouse, you won't be able to paste
the selection.
OPERATION
To select text press the left mouse button and drag the mouse. To
paste text in the same or another console, press the middle button.
The right button is used to extend the selection, like in `xterm'.
Two-button mice use the right button to paste text.
Double and triple clicks select whole word and whole lines. Use of the
`-p' option is recommended for best visual feedback.
If a trailing space after the contents of a line is highlighted, and if
there is no other text on the remainder of the line, the rest of the
line will be selected automatically. If a number of lines are selected,
highlighted trailing spaces on each line will be removed from the
selection buffer.
Any output on the virtual console holding the selection will clear the
highlighted selection from the screen, to maintain integrity of the
display, although the contents of the paste buffer will be unaffected.
The selection mechanism is disabled if the controlling virtual console
is placed in graphics mode, for example when running X11, and is re-
enabled when text mode is resumed. (But see BUGS section below.)
BUGS
The `gpm' server may have problems interacting with X: if your mouse is
a single-open device (i.e. a bus mouse), you should kill `gpm' before
starting X, or use the `-R' option (see above). To kill `gpm' just
invoke `gpm -k'. This problem doesn't apply to serial mice.
Two instances of gpm can't run on the same system. If you have two mice
use the `-M' option (see above).
While the current console is in graphic mode, `gpm' sleeps until text
mode is back (unless `-R' is used). Thus, it won't reply to clients.
Anyways, it is unlikely that mouse-eager clients will spur out in hid-
den consoles.
AUTHORS
Andrew Haylett <ajh@gec-mrc.co.uk> (the original selection code)
Alessandro Rubini <rubini@linux.it> (new features)
Ian Zimmerman <itz@speakeasy.org> (co-maintainer)
Many many contributors, to both selection and gpm.
MAINTAINERS
The maintainers are Alessandro Rubini and Ian Zimmerman. The develop-
ment mailing list (and the CVS tree) are hosted by Prosa Srl, which we
thank. The mailing list can be reached as gpm@prosa.it. More informa-
tion on the list and CVS is in the README file part of the source dis-
tribution of gpm.
FILES
/dev/mouse The default mouse device
/var/run/gpm.pid The PID of the running gpm
/dev/gpmctl A control socket for clients
/dev/gpmdata The fifo written to by a repeater (`-R') daemon.
SEE ALSO
mev(1) A sample client for the gpm daemon.
gpm-root(1) An handler for Control-Mouse events.
The info file about `gpm', which gives more complete information and
explains how to write a gpm client.
4th Berkeley Distribution July 2000 GPM(8)