disper - on-the-fly display switcher
disper [options] (-l|-s|-c|-e|-p|-i)
Disper re-routes your screen output to one or more connected
displays. For example when giving a presentation, all one wants is that the
beamer, which has just been connected, is able to show whatever you
prepared.
There is the option to either clone all detected displays, or
extend the desktop to them. Resolutions are automatically detected by
default. For cloning, the highest resolution supported by all displays
devices is chosen; for extending every display device gets its preferred or
highest supported resolution. For special setups requiring more detailed
control, one can still use the vendor-supplied display configuration
utilities.
- --version
- show program's version number and exit
- -h, --help
- show this help message and exit
- -v, --verbose
- show what's happening
- -q, --quiet
- be quiet and only show errors
- -r RESOLUTION,
--resolution=RESOLUTION
- set resolution, e.g. "800x600", or "auto" to detect
the display's preferred resolution, "max" to use the maximum
resolution advertised, or "off" to disable the display entirely.
For extend it is possible to enter a single resolution for all displays or
a commaseparated list of resolutions (one for each display). Beware that
many displays advertise resolutions they can not fully show, so
"max" is not advised.
- -d DISPLAYS,
--displays=DISPLAYS
- comma-separated list of displays to operate on, or "auto" to
detect; the first is the primary display.
- -t DIRECTION,
--direction=DIRECTION
- where to extend displays: "left", "right",
"top", or "bottom"
- --scaling=SCALING
- flat-panel scaling mode: "default", "native",
"scaled", "centered", or
"aspect-scaled"
- --plugins=PLUGINS
- comma-separated list of plugins to enable. Special names: "user"
for all user plugins in ~/.config/disper/hooks; "all" for all
plugins found; "none" for no plugins.
- --cycle-stages=CYCLE_STAGES
- colon-separated list command-line arguments to cycle through;
"-S:-c:-s" by default
$XDG_CONFIG_HOME/disper/config or
~/.config/disper/config or ~/.disper/config
Default command-line options to include at each disper
invocation. Multiple lines are concatenated, and lines starting with
#
are ignored. A typical example might include:
# enable all plugins in ~/.config/disper/hooks
--plugins=user
# cycle over clone and extend
--cycle-stages='-c : -e'
$XDG_CONFIG_HOME/disper/hooks/ or ~/.config/disper/hooks/ or
~/.disper/hooks/
Directory containing user hooks. These can be enabled
with the --plugins option.
/usr/share/disper/hooks/
Directory containing system hooks. User hooks take
preference of system hooks or plugins.
There is a possibility to cycle between different setups with a
single disper invocation using the option --cycle. The options to
cycle through are specified by the option --cycle-stages, which
consists of a colon-separated list of disper options. To alternate, for
example, between clone and extend, one could use
disper --cycle-stages='-e : -c' --cycle
Currently the last selected stage is stored in the file
$XDG_CONFIG_HOME/disper/last_cycle_stage (actually the file
last_cycle_stage in the directory of the last configuration file read).
This means that when display configuration is modified by something else than
disper (for example by restarting the computer), cycling will continue from
where it was last time, not necessarily from the current display
configuration. This is something that may change in the future.
It is possible to execute user-supplied hooks on display switch,
for example to display a notification or change the wallpaper. Which ones
are enabled is specified by the --plugins option. System hooks are
located in /usr/share/disper/hooks/ while user hooks should be placed
in $XDG_CONFIG_HOME/disper/hooks (or ~/.config/disper/hooks/
or ~/.disper/hooks/).
Each hook is an executable file (which includes scripts). The
following environment variables are available when invoked:
- DISPER_VERSION
- Version of disper (0.3.1).
- DISPER_LOG_LEVEL
- Log level: 0 (quiet), 1 (normal) or 2 (verbose).
- DISPER_STAGE
- Execution stage: prepare or switch. Most plugins will only
need to act on the switch stage, which is just after the display
switch has happened. Please make sure to execute an action only on
switch for future compatibility. (There are ideas for import
and export as well.)
- DISPER_DISPLAYS
- Space-separated list of displays that have output. These names may be
slightly different from what disper uses internally because they have to
be valid environment variable names. (e.g. DFP_0 CRT_0)
- DISPER_LAYOUT
- One of: clone, top, right, bottom or
left.
- DISPER_BB_RESOLUTION
- Size of full bounding box (e.g. 1024x768).
For each of DISPER_DISPLAYS the resolution of the
corresponding display is supplied as well. If only DFP-0 would be attached,
DISPER_DISPLAYS would contain just DFP_0 and the following variables
would be set as well:
- DISPER_RESOLUTION_DFP_0
- Resolution of display DFP-0 (e.g. 1024x768).
If you want to write your own hook you can also look at the ones
supplied with disper in /usr/share/disper/hooks/.
Written by Willem van Engen.