Skip to main content

A Python tool to manage and configure multi-monitor setups using EDID information, allowing users to apply predefined screen layouts with ease.

Project description

screenman

A Python tool to manage and configure multi-monitor setups using EDID information, allowing users to apply predefined screen layouts with ease.

Setup

$ screenman --help
Usage: screenman [OPTIONS]

  Console script for screenman.

Options:
  --log-level TEXT  Set the logging level (e.g., DEBUG, INFO, WARNING, ERROR,
                    CRITICAL)
  --log-file TEXT   Set the log file path.
  --print-info      Print the connected screens and the corresponding
                    layout.If no layout is defined, the default layout 'auto'
                    is used.
  --rescan-pci      Rescan PCI bus before applying layout. Useful for
                    dock/display detection issues after resume.
  --mirror          Mirror the internal (eDP) display to the external display.
  --mirror-off      Revert mirroring and apply the normal layout.
  --help            Show this message and exit.

When wanting to setup a new screen layout, you can use the --print-info flag to get the connected screens information. This information can be used to create a new screen layout.

$ screenman --print-info
<HDMI-2, UID: DL51145435704, primary: True, modes: 13, conn: True, rot: normal, enabled: True, res: (1920, 1080)>
Layout: auto

From that we can create our toml configuration file with the following content:

# the hierarchy of the configuration file is as follows:
# layouts.<layout_name>.<screen_uid>
[layouts.single_baetylus.DL51145435704]
primary = true
mode = [1920, 1080]
position = [0, 0]
rotation = "normal"

A more advanced screenman.toml configuration file can be found in the examples directory.

Mirroring

For presentations or other scenarios where you want to mirror your internal (eDP) display to an external screen:

# Start mirroring — scales the internal display to match the external resolution
screenman --mirror

# Revert to your normal layout
screenman --mirror-off

Usage

I have screenman --log-file ~/.local/logs/screenman.log --log-level DEBUG mapped to a keybinding.

If you can't install screenman with your package manager, you can also run it with uv:

uv tool run screenman --help

Configuration

The configuration file can be stored in one of the following paths:

  • Current working directory
  • Home directory
  • User configuration directory (roaming)
  • User configuration directory for "screenman" (non-roaming)
  • Site configuration directory

Installation

Dependencies

Install edid-decode.

pip release version

pip install screenman

pip live version

pip install git+https://github.com/Jimmy2027/screenman.git

portage

screenman is available via Jimmy's overlay. Either enable the repo or copy the ebuild to your local overlay.

Then run:

emerge -av screenman

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

screenman-0.1.3.tar.gz (20.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

screenman-0.1.3-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file screenman-0.1.3.tar.gz.

File metadata

  • Download URL: screenman-0.1.3.tar.gz
  • Upload date:
  • Size: 20.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for screenman-0.1.3.tar.gz
Algorithm Hash digest
SHA256 2c65e0b75ee604f822ac1cdf5884b85bd6bd4fd429af4df0f57dba680112c997
MD5 3cf941cf8d5b95a6c7304c7d989b5795
BLAKE2b-256 d8b04e643e6f9e6ab34d58bd59df2dd62d56958f83e8012945f468799fad9fa3

See more details on using hashes here.

Provenance

The following attestation bundles were made for screenman-0.1.3.tar.gz:

Publisher: release.yaml on Jimmy2027/screenman

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screenman-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: screenman-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 12.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for screenman-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 87ddecb2a4f84f7f97f941f294d89bad1870936e28745ba238ffdd1af27a44be
MD5 a73d430a41cb07fda3205f86f549fd1d
BLAKE2b-256 2fbae1a91a980fd3612b98968eaa6b5ba1b05889307e0884795bf932435f2ba7

See more details on using hashes here.

Provenance

The following attestation bundles were made for screenman-0.1.3-py3-none-any.whl:

Publisher: release.yaml on Jimmy2027/screenman

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page