DISPER(1)

NAME
disper - on-the-fly display switcher

SYNOPSIS
disper [options] (-l|-s|-c|-e|-p|-i)

DESCRIPTION
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.

OPTIONS

--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

ACTIONS

Select exactly one of the following actions

-l, --list
    list the attached displays

-s, --single
    only enable the primary display

-S, --secondary
    only enable the secondary display

-c, --clone
    clone displays

-e, --extend
    extend displays

-p, --export
    export current settings to standard output

-i, --import
    import current settings from standard input

-C, --cycle
    cycle through the list of cycle stages

FILES
$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.
#PREFIX#/share/disper/hooks/
    Directory containing system hooks. User hooks take preference of system hooks or plugins.

CYCLE
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.

PLUGINS
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 #PREFIX#/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 (#VERSION#).

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 #PREFIX#/share/disper/hooks/.

AUTHOR
Written by Willem van Engen.

SEE ALSO
xrandr(1), nvidia-settings(1)