Jump to content

Solid/Projects/ScreenManagement/Design

From KDE Community Wiki

This document outlines functionality, user interface design and considerations for improvements of screen management in Plasma.

Terms

  • screen: the combination of outputs
  • output: an output is a monitor connection to the system, it usually has the following properties:
    • connected: cable plugged in or not
    • enabled: used for displaying content, disconnected outputs can't be
    • list of modes: each mode is a resolution (screen width and height pixels) and a refresh rate (for example 60Hz)
    • position: the relative position to the top-left corner of the whole screen (useful only for multiscreen setups)
    • current mode: the currently set mode
    • preferred mode: the preferred mode, usually one of the highest resolution with a pleasant refresh rate
  • mode: a resolution (screen width and height pixels) and a refresh rate (for example 1920x1080 at 60Hz)

Usage examples

Here are some examples of what kind of scenarios kscreen serves.

Static Workstation

The user has a more or less static setup, for example two monitors next to each other on a desktop computer.

After installation, the user has to set the relative position of the displays, so the mouse cursor leaves one and enters another output on the physically adjacent edges. Ideally, he does this once, from then on, settings are stored and adjusted on login.

Docking Station

A laptop that is sometimes connected to a docking station with additional monitors connected.

Docking stations are basically multiple connections in one. Docking station-connected monitors are essentially the same as directly connected monitors, through HDMI, VGA, etc.. They're usually identified as DisplayPort connections. An interesting detail about docked monitors is that they might not show up until connected, so they might be either displayed, but disconnected (and thus not enabled), connected and enabled, or not present at all. Not displaying disconnected displays in the UI of course solved this dichotomy, at the technical level, it's handled correctly.

Kscreen restores previously saved settings when this docking station (and monitor) is connected. The use may close the lid of the laptop, in that case, all screen contents moves to the external monitor. (There's a setting to suspend the machine regardless, in that case, screen content isn't changed. Output connections are reconsidered post-resume and restored.

Beamer

A projector is connected to a laptop to hold a presentation.

The key thing here is that an application such as Okular or libreoffice should use the projector and laptop display correctly. The fullscreen presentation goes to the primary monitor, preview and notes on the laptop screen. It shouldn't move an open email client or other application to the projector when it's plugged in, for example.

How KScreen works

To understand how kscreen solves the above problems, it's helpful to understand how it roughly works under the hood. The user-visible components running on the user's system are a system settings module and a daemon that watches hardware changes and restores previously set configurations.

Systemsettings module

The config module in system settings is located under "Display and Monitor" -> "Display Configuration". It offers a drag-and-drop ui to position and set up displays. It allows to configure:

  • Relative position of outputs (useful only for multiscreen)
  • "Primary display" (used for the "main" Plasma panel)
  • Per output:
    • enabled / disabled
    • resolution (list of width / height combinations, usually between 3 and 20 possible sizes
    • orientation: normal, rotated 90 degrees left and right, upside down
    • refresh rate: usually two or three possible rates, e.g. 30Hz, 60Hz, depends on the resolution

It also offers:

  • display output identifier: this will show the output's name on each enabled output as on-screen display
  • scale display: a custom display scaling factor, opens a new window to set scaling factor with preview
  • unify outputs: this will pick the highest common resolution for all enabled outputs connected, and place them on top of each other