/grobi

Automatically configure monitors/outputs for Xorg via RANDR

Primary LanguageGoBSD 2-Clause "Simplified" LicenseBSD-2-Clause

Build Status

grobi

This program watches for changes in the available outputs (e.g. when a monitor is connected/disconnected) and will automatically configure the currently used outputs via RANDR according to configurable profiles.

Installation

Grobi requires Go version 1.11 or newer to compile. To build grobi, run the following command:

$ go build

Afterwards please find a binary of grobi in the current directory:

$ ./grobi --help
Usage:
  grobi [OPTIONS] <command>

Application Options:
  -v, --verbose   Be verbose (false)
  -C, --config=   Read config from this file
  -n, --dry-run   Only print what commands would be executed without actually
                  runnig them
  -i, --interval= Number of seconds between polls, set to zero to disable
                  polling (5)
  -p, --pause=    Number of seconds to pause after a change was executed (2)
  -l, --logfile=  Write log to file

Help Options:
  -h, --help      Show this help message

Available commands:
  apply    apply a rule
  update   update outputs
  version  display version
  watch    watch for changes

Configuration

Have a look at the sample configuration file provided at doc/grobi.conf. By default, grobi uses the XDG directory standard to search for the config file. Most users will probably put the config file to ~/.config/grobi.conf.

If you have any questions, please open an issue on GitHub.

There is also a sample systemd unit file you can run as a user. This requires that the PATH and DISPLAY environment variables can be accessed, so run the following command in e.g. your ~/.xsession file just before starting the window manager:

systemctl --user import-environment DISPLAY PATH

Run the command once to import the environment for the current session, then execute the following commands to install and start the unit:

mkdir ~/.config/systemd/user
cp doc/grobi.service ~/.config/systemd/user
systemctl --user enable grobi
systemctl --user start grobi

You can then use systemctl to check the current status:

systemctl --user status grobi

Compatibility

Grobi follows Semantic Versioning to clearly define which versions are compatible. The configuration file and command-line parameters and user-interface are considered the "Public API" in the sense of Semantic Versioning.

Development

Release New Version

Rough steps for releasing a new version:

  • Update version number in cmd_version.go, remove the -dev suffix
  • Commit and tag version
  • Add -dev suffix to version in cmd_version.go