aboutsummaryrefslogtreecommitdiffstats
path: root/doc/info/mds.texinfo
diff options
context:
space:
mode:
Diffstat (limited to 'doc/info/mds.texinfo')
-rw-r--r--doc/info/mds.texinfo290
1 files changed, 192 insertions, 98 deletions
diff --git a/doc/info/mds.texinfo b/doc/info/mds.texinfo
index 05ec173..48c138d 100644
--- a/doc/info/mds.texinfo
+++ b/doc/info/mds.texinfo
@@ -131,7 +131,7 @@ Rather than one, possibly modular, process --- a monolithic
process --- @code{mds} is comprised of many small servers,
each exchangable and responsible for one thing.
-@cpindex{Goals of @command{mds}}
+@cindex Goals of @command{mds}
@command{mds}'s goal is neither security, performance nor
a perfect graphical experience. @command{mds} is all
about flexibility and freedom 0@footnote{The freedom to run
@@ -198,10 +198,10 @@ of crashing.
@node Layers
@section Layers
-@cpindex{Layers, architecture}
-@cpindex{Architectural layers}
-@cpindex{Kernel}
-@cpindex{Master server}
+@cpindex Layers, architecture
+@cpindex Architectural layers
+@cpindex Kernel
+@cpindex Master server
The @command{mds} display server in architectured in
three layers. The first layer is called the kernel.
The kernel is responsible for acquiring a display
@@ -218,10 +218,10 @@ the domain socket for communication with the display
server, it is not responsible for using it, that
mission falls to the master server.
-@cpindex{Master server}
-@cpindex{Message passing, coordination}
-@cpindex{Communication, coordination}
-@cpindex{Interprocess communication, coordination}
+@cpindex Master server
+@cpindex Message passing, coordination
+@cpindex Communication, coordination
+@cpindex Interprocess communication, coordination
The second layer is the master server. The master
server has two responsibilities: coordinating
message passing between other servers and clients
@@ -230,9 +230,9 @@ distinction between servers and clients, the
distinction is purely semantic.} and starting
other servers.
-@cpindex{Starting of servers}
-@cpindex{Servers, starting}
-@pgindex{@file{mdsinitrc}}
+@cpindex Starting of servers
+@cpindex Servers, starting
+@pgindex @file{mdsinitrc}
The third layer is the other servers and clients.
protocolwise there is no specification on how
they are started. But in the reference
@@ -254,10 +254,10 @@ of the display server.
@node Interprocess Communication
@section Interprocess Communication
-@cpindex{Message passing, mechanism}
-@cpindex{Communication, mechanism}
-@cpindex{Interprocess communication, mechanism}
-@cpindex{Master server}
+@cpindex Message passing, mechanism
+@cpindex Communication, mechanism
+@cpindex Interprocess communication, mechanism
+@cpindex Master server
Intrinsic to @command{mds} is a powerful
interprocess communication mechanism. Servers
and clients connect to the display server by
@@ -277,12 +277,12 @@ Multicast a message.
Join or leave a multicast group.
@end itemize
-@cpindex{Multicast groups}
-@cpindex{Client ID assignment}
-@cpindex{ID assignment}
-@cpindex{Assignment of ID}
-@cpindex{Disconnection}
-@cpindex{Master server}
+@cpindex Multicast groups
+@cpindex Client ID assignment
+@cpindex ID assignment
+@cpindex Assignment of ID
+@cpindex Disconnection
+@cpindex Master server
Upon assignment of an ID the master server
will automatically place the client in a
multicast group for that specific client.
@@ -293,11 +293,11 @@ a client is disconnected it will send out a
message to a specific multicast group that
the client, refered to by it's ID, have closed.
-@cpindex{Message passing, message structure}
-@cpindex{Communication, message structure}
-@cpindex{Interprocess communication, message structure}
-@cpindex{Message structure, message passing}
-@cpindex{Master server}
+@cpindex Message passing, message structure
+@cpindex Communication, message structure
+@cpindex Interprocess communication, message structure
+@cpindex Message structure, message passing
+@cpindex Master server
A message in the @command{mds} protocol is
comprised of two parts: headers and a payload.
When a client joins a multicast group it is
@@ -309,13 +309,13 @@ could be used for logging, possibly spying and
networking.}. Thus a message is automatically
multicasted to groups indicated by its headers.
-@cpindex{Interceptions, message passing}
-@cpindex{Message passing, message modification}
-@cpindex{Communication, message modification}
-@cpindex{Interprocess communication, message modification}
-@cpindex{Message modification, message passing}
-@cpindex{Master server}
-@cpindex{Multicast groups}
+@cpindex Interceptions, message passing
+@cpindex Message passing, message modification
+@cpindex Communication, message modification
+@cpindex Interprocess communication, message modification
+@cpindex Message modification, message passing
+@cpindex Master server
+@cpindex Multicast groups
The multicast groups and receiving of message
is called interceptions. The interesting
property of interceptions is that they may
@@ -336,10 +336,10 @@ the message to make it empty. A consumed
message will not be send to any further
clients or servers in the interception list.
-@cpindex{Interception priority, message passing}
-@cpindex{Priority, interception, message passing}
-@cpindex{Message consumption, message passing}
-@cpindex{Consumption, interception, message passing}
+@cpindex Interception priority, message passing
+@cpindex Priority, interception, message passing
+@cpindex Message consumption, message passing
+@cpindex Consumption, interception, message passing
To make this mechanism sensible, a server or
client can set a priority when it registers
for interception (does not need to be
@@ -358,14 +358,14 @@ same priority the order in which they will
receive the message, of those recipients,
is arbitrary.
-@pgindex{@command{mds-vt}}
-@cpindex{Virtual terminal, switching}
-@cpindex{Switching virtual terminal}
-@cpindex{Dual-connection, message passing}
-@cpindex{Message passing, dual-connection}
-@cpindex{Communication, dual-connection}
-@cpindex{Interprocess communication, dual-connection}
-@cpindex{Reflexive connection, message passing}
+@pgindex @command{mds-vt}
+@cpindex Virtual terminal, switching
+@cpindex Switching virtual terminal
+@cpindex Dual-connection, message passing
+@cpindex Message passing, dual-connection
+@cpindex Communication, dual-connection
+@cpindex Interprocess communication, dual-connection
+@cpindex Reflexive connection, message passing
An interesting property of this mechanism
is demonstrated in the @command{mds-vt}
server. Unlike most servers @command{mds-vt}
@@ -399,18 +399,18 @@ and wait for a reply from all of them.
@node Application Design
@chapter Application Design
-@cpindex{Application design}
-@cpindex{Client design}
-@cpindex{Guildlines, applications}
-@cpindex{Toolkit guildlines}
+@cpindex Application design
+@cpindex Client design
+@cpindex Guildlines, applications
+@cpindex Toolkit guildlines
When creating graphical @command{mds} applications,
there are some guildlines you should follow.
@itemize @bullet
@item
-@cpindex{Client-side decoration}
-@cpindex{Server-side decoration}
-@cpindex{Decoration, guildlines}
+@cpindex Client-side decoration
+@cpindex Server-side decoration
+@cpindex Decoration, guildlines
@b{Do not create client-side decoration}. Some
users do not want decorations or wants minimal
decorations. Windows should look similar, server-side
@@ -426,10 +426,10 @@ of oversight from developers, client-side decoration
tends to work poorly with tiling window managers.
@item
-@cpindex{Memorisation of size and position}
-@cpindex{Position, memorisation}
-@cpindex{Size, memorisation}
-@pgindex{@command{mds-posmem}}
+@cpindex Memorisation of size and position
+@cpindex Position, memorisation
+@cpindex Size, memorisation
+@pgindex @command{mds-posmem}
@b{Do not remember size and position}. Some users
do not want their programs to remember their size
and position. There is also a risk that your
@@ -460,11 +460,11 @@ time they were closed.
@node Environment Variables
@section Environment Variables
-@cpindex{Environment variables}
-@vrindex{@env{DISPLAY}}
-@vrindex{@env{MDS_DISPLAY}}
-@cpindex{Display server identification}
-@cpindex{Identification, display server}
+@cpindex Environment variables
+@vrindex @env{DISPLAY}
+@vrindex @env{MDS_DISPLAY}
+@cpindex Display server identification
+@cpindex Identification, display server
A crucial task of any display server is letting child
processes know which display server they should
connect to. @command{X.org} does this by setting the
@@ -474,10 +474,10 @@ is empty if the display is one the local machine.
In this tradition @command{mds} does the same thing
with the environment variable @env{MDS_DISPLAY}.
-@cpindex{Environment variables}
-@vrindex{@env{MDS_PGROUP}}
-@cpindex{Display server process group}
-@cpindex{Process group, display server}
+@cpindex Environment variables
+@vrindex @env{MDS_PGROUP}
+@cpindex Display server process group
+@cpindex Process group, display server
@command{mds} also creates a new process group and
export the new process group ID to the environment
variable @command{MDS_PGROUP}. This process group
@@ -489,13 +489,13 @@ servers collectively.
@node Signals
@section Signals
-@cpindex{Signals}
-@cpindex{Re-executing servers}
-@cpindex{Updating, online}
-@cpindex{Online updating}
-@cpindex{Version update}
-@sgindex{@code{SIGUSR1}}
-@sgindex{@code{SIGUPDATE}}
+@cpindex Signals
+@cpindex Re-executing servers
+@cpindex Updating, online
+@cpindex Online updating
+@cpindex Version update
+@sgindex @code{SIGUSR1}
+@sgindex @code{SIGUPDATE}
@command{mds} servers can re-execute into an
updated version of their binary. This can be
used to update display server online after
@@ -507,24 +507,24 @@ If the operating system defines a signal named
@code{SIGUPDATE}, this signal is used
instead of @code{SIGUSR1}.
-@cpindex{Signals}
-@cpindex{Memory release, automatic}
-@cpindex{Memory release, forced}
-@cpindex{Automated memory release}
-@cpindex{Forcing memory release}
-@cpindex{Releasing memory}
-@sgindex{@code{SIGDANGER}}
-@sgindex{@code{SIGRTMIN + 1}}
+@cpindex Signals
+@cpindex Memory release, automatic
+@cpindex Memory release, forced
+@cpindex Automated memory release
+@cpindex Forcing memory release
+@cpindex Releasing memory
+@sgindex @code{SIGDANGER}
+@sgindex @code{SIGRTMIN + 1}
If you need servers to free up allocated
memory that they do not use, send the signal
@code{SIGDANGER}, or if not defined
@code{SIGRTMIN + 1}. Unimportant servers
may choose to die on @code{SIGDANGER}.
-@sgindex{@code{SIGINFO}}
-@sgindex{@code{SIGRTMIN + 2}}
-@cpindex{State dump}
-@cpindex{Statistics dump}
+@sgindex @code{SIGINFO}
+@sgindex @code{SIGRTMIN + 2}
+@cpindex State dump
+@cpindex Statistics dump
Server may also choose to support the signal
@code{SIGINFO}, or if not defined
@code{SIGRTMIN + 2}. It is not expected
@@ -534,8 +534,8 @@ is send by a user to the server, if she wants
the server to dump information about the
server's state or statistics to the TTY.
-@sgindex{@code{SIGRTMIN}}
-@cpindex{No-operation signal}
+@sgindex @code{SIGRTMIN}
+@cpindex No-operation signal
All servers configured to be interrupted
when the signal @code{SIGRTMIN} is received.
No further action is taked. This may be used
@@ -544,8 +544,8 @@ being interrupted. It can also be used by
the server to interrupt itself from another
thread.
-@pgindex{@command{valgrind}}
-@sgindex{@code{SIGRTMAX}}
+@pgindex @command{valgrind}
+@sgindex @code{SIGRTMAX}
@command{valgrind} uses @code{SIGRTMAX} for
its own internal stuff. Therefore servers must
not use @code{SIGRTMAX} as it is hence
@@ -556,9 +556,9 @@ unavailable when running under @command{valgrind}.
@node Filesystem
@section Filesystem
-@cpindex{Interprocess communication, filesystem}
-@cpindex{Filesystem}
-@cpindex{Kernel}
+@cpindex Interprocess communication, filesystem
+@cpindex Filesystem
+@cpindex Kernel
The @command{mds} kernel creates two directories
for the @command{mds} servers to use: one for
runtime data and one for temporary data.
@@ -578,10 +578,10 @@ For example if the display server index is zero,
temporary data may be stored in
@file{/tmp/.@{system-directory@}.mds/0.data}
-@cpindex{Re-executing servers}
-@cpindex{Updating, online}
-@cpindex{Online updating}
-@cpindex{Version update}
+@cpindex Re-executing servers
+@cpindex Updating, online
+@cpindex Online updating
+@cpindex Version update
As defined by @code{SHM_PATH_PATTERN} in
@file{<libmdsserver/config.h>}, when a server
re-executes itself it will marshal its state to
@@ -1059,6 +1059,9 @@ any other character, or multiple LF:s.
@node mds-respawn
@section @command{mds-respawn}
+@pgindex @command{mds-respawn}
+@cpindex Respawning servers, automatic
+@cpindex Crash resilience
@command{mds-respawn} is a utility intended to be used
in @file{$@{XDG_CONFIG_HOME@}/mdsinitrc}. It will spawn
a selected set of servers. If a server it spawns exits
@@ -1068,10 +1071,13 @@ line:
@table @option
@item --alarm=SECONDS
+@opindex @option{--alarm}
Schedule @command{mds-respawn} to die in @var{SECONDS}
seconds. At most 1 minute.
@item --interval=SECONDS
+@opindex @option{--interval}
+@sgindex @code{SIGUSR2}
Spawned servers that die twice with @var{SECONDS}
seconds should stop respawning until the signal
@code{SIGUSR2} is send to @command{mds-respawn}.
@@ -1082,12 +1088,17 @@ Commands for servers to spawn are specified within
curly braces. Each of the braces must be alone its
its own argument. For example:
+@opindex @option{--initial-spawn}
@example
mds-respawn --interval=5 \
@{ mds-foo --initial-spawn @} \
@{ mds-bar --initial-spawn @} &
@end example
+@cpindex Server supervision
+@cpindex Supervision of servers
+@opindex @option{--initial-spawn}
+@opindex @option{--respawn}
will spawn and supervise the servers @command{mds-foo}
and @command{mds-bar}. Both spawned with the
argument @option{--initial-spawn}. When a server is
@@ -1096,6 +1107,7 @@ in its argument list will be replaced by
@option{--respawn} to let the server know it is being
respawned.
+@sgindex @code{SIGTERM}
A server is considered to exit with a failure status
unless it exits with the return value 0 or is terminated
by the signal @code{SIGTERM}.
@@ -1105,6 +1117,11 @@ by the signal @code{SIGTERM}.
@node mds-reg
@section @command{mds-reg}
+@pgindex @command{mds-reg}
+@cpindex List protocols
+@cpindex Protocols, listing
+@opindex @option{--list}
+@opindex @option{--wait}
@command{mds-reg} is a utility that can be used to list
available protocols provided by running servers. It can
also wait for a set of protocols to become available. To
@@ -1121,38 +1138,48 @@ protocols.
@node mds-clip
@section @command{mds-clip}
+@pgindex @command{mds-clip}
+@cpindex Clipboard
@command{mds-clip} is a utility that can be used to
review the clipboards on the display and manipulate them.
@command{mds-clip} recognises the following options:
@table @option
@item --push
+@opindex @option{--push}
Push non-option arguments from the command line into
the clipboard.
@item --expire=SECONDS
+@opindex @option{--expire}
+@opindex @option{--push}
Can be used with @option{--push}. The clip will not
removed after @var{SECONDS} seconds.
@item --pop
+@opindex @option{--pop}
Pop items from the clipboard whose indices are listed
in the command line as non-option arguments. The first
index is 1.
@item --clear
+@opindex @option{--clear}
Pop all items in the clipboard.
@item --list
+@opindex @option{--list}
List items in the clipboard whose indices are listed
in the command line as non-option arguments. The first
index is 1. If no indicies are specified, all clips
will be listed.
@item --size
+@opindex @option{--size}
Print the size of the clipboard, the number of clips
in the clipboard.
@item --capacity
+@opindex @option{--capacity}
Print the capacity of the clipboard, the number of
clips the clipboard can hold. If both @option{--size}
and @option{--capacity} is used, the size will be
@@ -1160,15 +1187,21 @@ printed on the first line and the capacity will be
printed on the second line.
@item --resize=CAPACITY
+@opindex @option{--resize}
Change the capaciy of the clipboard to @var{CAPACITY}
clips.
@item --stdin
+@opindex @option{--stdin}
+@opindex @option{--push}
Can be used with @option{--push}. If used, the clip
that should be placed on the top of the clipboard
stack should be read from stdin.
@item --delimiter=DELIMITER
+@opindex @option{--delimiter}
+@opindex @option{--list}
+@opindex @option{--stdin}
Can be used with @option{--stdin} or @option{--list}.
If used with @option{--stdin}, an line containing
only @var{DELIMITER} will delimit two values that
@@ -1178,14 +1211,17 @@ will delimit two values in the output. The default
delimiter for @option{--list} is an empty line.
@item -1
+@opindex @option{-1}
Use the primary clipboard, that is, the text copy
clipboard. This is the default clipboard.
@item -2
+@opindex @option{-2}
Use the secondary clipboard, that is, the text
selection clipboard.
@item -3
+@opindex @option{-3}
Use the tertiary clipboard, that is, the non-text
copy clipboard.
@end table
@@ -1195,6 +1231,8 @@ copy clipboard.
@node mds-screenshot
@section @command{mds-screenshot}
+@pgindex @command{mds-screenshot}
+@cpindex Screenshooting
@command{mds-screenshot} is a simple utility, and
reference implementation thereof, that can take a
screeenshot of either the display, a monitor, or a
@@ -1205,46 +1243,58 @@ following options:
@table @option
@item --monitor
+@opindex @option{--monitor}
Take screenshot of the monitor. The rat will
be used to select monitor.
@item --monitor=WINDOW_ID
+@opindex @option{--monitor}
Take screenshot of the monitor whose root window's
window ID is @var{WINDOW_ID} or has another window
in it whose window ID is @var{WINDOW_ID}.
@item --embed
+@opindex @option{--embed}
Take a screenshot of an embedded window.
The rat will be used to select window.
@item --embed=WINDOW_ID
+@opindex @option{--monitor}
Take a screenshot of an embedded window whose
window ID is @var{WINDOW_ID}.
@item --window
+@opindex @option{--window}
Take a screenshot a window.
The rat will be used to select window.
@item --window=WINDOW_ID
+@opindex @option{--window}
Take a screenshot of a window whose
window ID is @var{WINDOW_ID}.
@item --decoration
+@opindex @option{--decoration}
Include the window's decoration, if used together
with @option{--window}. Ignored if used without
@option{--window}.
@item --cursor
+@opindex @option{--cursor}
Include the rat cursor in the screenshot.
@item --gamma
+@opindex @option{--gamma}
Include the effects of gamma ramps in the screenshot.
@item --low-gamma=LOW_PRIORITY
+@opindex @option{--low-gamma}
Include the effects of gamma ramps with a priority
above @var{LOW_PRIORITY} in the screenshot.
@item --high-gamma=HIGH_PRIORITY
+@opindex @option{--high-gamma}
+@opindex @option{--low-gamma}
Include the effects of gamma ramps with a priority
below @var{HIGH_PRIORITY} in the screenshot. If used
together with @option{--low-gamma=LOW_PRIORITY},
@@ -1255,10 +1305,16 @@ will be used.
Optionally, you can add a non-option argument that
specifies the pathname of the saved file.
+@opindex @option{--window}
+@opindex @option{--monitor}
+@opindex @option{--embed}
If neither @option{--monitor}, @option{--embed} or
@option{--window} is used, a screenshot will be
taked of the display. That is, all monitors.
+@opindex @option{--gamma}
+@opindex @option{--low-gamma}
+@opindex @option{--high-gamma}
In case of mirrored outputs, one of the potential
outputs will be selected arbitrarily if
@option{--gamma}, @option{--low-gamma} or
@@ -1271,6 +1327,9 @@ outputs.
@node mds-slay
@section @command{mds-slay}
+@pgindex @command{mds-slay}
+@cpindex Process killing
+@cpindex Killing processes
@command{mds-slay} a utility that can be used to
kill a process by it window or identify the window
ID of a window. @command{mds-slay} recognises the
@@ -1278,34 +1337,42 @@ following options:
@table @option
@item --embed
+@opindex @option{--embed}
Kill an embedded window.
The rat will be used to select window.
@item --embed=WINDOW_ID
+@opindex @option{--embed}
Kill an embedded window whose
window ID is @var{WINDOW_ID}.
@item --window
+@opindex @option{--window}
Kill a window.
The rat will be used to select window.
@item --window=WINDOW_ID
+@opindex @option{--window}
Kill a window whose
window ID is @var{WINDOW_ID}.
@item --signal=SIGNAL
+@opindex @option{--signal}
Send the signal @var{SIGNAL} to the
process owning the selected window.
@item --no-signal
+@opindex @option{--no-signal}
Do not send a signal; only identify the
window.
@item --keep-cursor
+@opindex @option{--keep-cursor}
Do not change the cursor to a kill cursor.
@item --print
-The the ID of the selected window.
+@opindex @option{--print}
+Print the ID of the selected window.
@end table
@@ -1313,6 +1380,10 @@ The the ID of the selected window.
@node mds-chvt
@section @command{mds-chvt}
+@pgindex @command{mds-chvt}
+@pgindex @command{chvt}
+@cpindex Virtual terminal, switching
+@cpindex Switching virtual terminal
@command{mds-chvt} is a utility similar to the command
@command{chvt} from the @command{kbd} project. However,
@command{mds-chvt} has setuid and therefore does not
@@ -1323,6 +1394,7 @@ recognises the following options:
@table @option
@item --switch=VT
+@opindex @option{--switch}
Switch to the virtual terminal with the index @var{VT}.
@end table
@@ -1330,6 +1402,12 @@ Switch to the virtual terminal with the index @var{VT}.
@node mds-kbdc
@section @command{mds-kbdc}
+
+@pgindex @command{mds-kbdc}
+@cpindex Keyboard layouts, compile
+@cpindex Compile keyboard layouts
+@cpindex Compose tables, compile
+@cpindex Compile compose tables
@command{mds-kbdc} is the program used to compile
keyboard layouts and compose tables.
@@ -1340,7 +1418,10 @@ TODO how to use mds-kbdc
@node External Utilities
@section External Utilities
-Servers let you use the option @command{--on-init-fork}
+@cpindex Background processes
+@opindex @option{--on-init-fork}
+@pgindex @file{mdsinitrc}
+Servers let you use the option @option{--on-init-fork}
to put the process in the background when it has been
initialised. This can used to spawn that depend on each
other in linear order. For example, if @command{mds-bar}
@@ -1353,6 +1434,11 @@ mds-foo --on-init-fork
mds-bar &
@end example
+@opindex @option{--on-init-fork}
+@opindex @option{--on-init-sh}
+@pgindex @command{mds-respawn}
+@pgindex @command{cmdipc}
+@pgindex @command{ipcmd}
This will start @command{mds-bar} when @command{mds-foo}
has been initialised. However if one of them crashes,
that server will not respawn; to fix this @command{mds-respawn}
@@ -1375,11 +1461,15 @@ cmdipc -Srk $S # Remove the semaphore.
mds-respawn @{ mds-bar @} & # Spawn `mds-bar`.
@end example
+@pgindex @command{mds-reg}
This is however seldom necessary as @command{mds-reg} can
often be used instead, with more abstraction as you would
only need to specify what servers need to wait for, not
what they provide.
+@pgindex @command{setpgrp}
+@cpindex Display server process group
+@cpindex Process group, display server
Another useful command (and package) is @command{setpgrp}.
@command{mds} puts itself an all its children in a new
process group. However you may want to put processes that
@@ -1392,6 +1482,10 @@ to starta process in a new process group.
@node Servers
@chapter Servers
+@pgindex @command{mds}
+@pgindex @command{mds-server}
+@cpindex Kernel
+@cpindex Master server
An @command{mds} display server instance is comprised of
multiple small servers that each implements a small part
of the display server's functionallity. This chapter will