Categorygithub.com/fd0/grobi
modulepackage
0.6.0
Repository: https://github.com/fd0/grobi.git
Documentation: pkg.go.dev

# README

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

# Functions

No description provided by the author
BuildCommandOutputRow return a sequence of calls to `xrandr` to configure all named outputs in a row, left to right, given the currently active Outputs and a list of output names, optionally followed by "@" and the desired mode, e.g.
DetectOutputs runs `xrandr`, rescans the outputs and returns the parsed outputs.
DisableOutputs returns a call to `xrandr` to switch off the specified outputs.
Generates the monitor id from the edid.
GetOutputs runs `xrandr` and returns the parsed output.
No description provided by the author
No description provided by the author
RandrParse returns the list of outputs parsed from the reader.
RunCommand runs the given command or prints the arguments to stdout if globalOpts.DryRun is true.
No description provided by the author
No description provided by the author

# Structs

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Config holds all configuration for grobi.
No description provided by the author
GlobalOptions contains all global options.
Mode is an output mode that may be active or default.
Output encapsulates a physical output with detected modes.
Rule is a rule to configure outputs.

# Type aliases

Modes is a list of Mode.
Outputs is a list of outputs.