streamdeckd

command module
v0.0.0-...-e5ec26e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 31, 2023 License: BSD-3-Clause Imports: 1 Imported by: 0

README

Streamdeckd

Installation
  • create the file /etc/udev/rules.d/50-elgato.rules with the following config
SUBSYSTEM=="input", GROUP="input", MODE="0666"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", MODE:="666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0063", MODE:="666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006c", MODE:="666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="006d", MODE:="666", GROUP="plugdev"  
  • run sudo udevadm control --reload-rules to reload the udev rules

Then xdotool will be required to simulate keypresses, to install this run:

Arch

sudo pacman -S xdotool

Debian based

sudo apt install xdotool

Configuration
Manual configuration

Warning:

If you are updating from v1.0.0, the config file is now being set in the location as below, instead of where it used to be, in the home dir, either consider moving the config file to that dir, or running streamdeckd with the -config flag, which allows you to point to a config file in a custom location


The configuration file streamdeckd uses is a JSON file found at $XDG_CONFIG_HOME/.streamdeck-config.json

An example config would be something like:

{
  "modules": [
    "/home/user/module.so"
  ],
  "decks": [
    {
      "serial": "AB12C3D45678",
      "pages": [
        [
          {
            "switch_page": 1,
            "icon": "~/icon.png"
          }
        ]
      ]
    }
  ]
}

At the top is the list of custom modules, these are go plugins in the .so format, following that is the list of deck objects, each represents a different streamdeck device, and contains its serial, and its list of pages

The outer array in a deck is the list of pages, the inner array is the list of button on that page, with the buttons going in a right to left order.

The actions you can have on a button are:

  • command: runs a native shell command, something like notify-send "Hello World"
  • keybind: simulates the indicated keybind via xdtotool
  • url: opens a url in your default browser via xdg
  • brightness: set the brightness of the streamdeck as a percentage
  • switch_page: change the active page on the streamdeck
D-Bus

There is a D-Bus interface built into the daemon, the service name and interface for D-Bus are com.unixstreamdeck.streamdeckd and com/unixstreamdeck/streamdeckd respectively, and is made up of the following methods/signals

Methods
  • GetConfig - returns the current running config
  • SetConfig - sets the config, without saving to disk, takes in Stringified json, returns an error if anything breaks
  • ReloadConfig - reloads the config from disk
  • GetDeckInfo - Returns information about all the active streamdecks in the format of
[
  {
    "icon_size": 72,
    "rows": 3,
    "cols": 5,
    "page": 0,
    "serial": "AB12C3D45678"
  }
]
  • SetPage - Set the page on the streamdeck to the number passed to it, returns an error if anything breaks
  • CommitConfig - Commits the currently active config to disk, returns an error if anything breaks
  • GetModules - Get the list of loaded modules, and the config fields those modules use
  • PressButton - Simulates a button press on the streamdeck device, consumes a device serial, and a key index
Signals
  • Page - sends the number of the page switched to on the StreamDeck
Custom Modules

To create custom modules, I suggest looking at the gif, counter, and time modules in the example handlers package in streamdeckd, they should be in a file with the GetModule method as shown below

Loading Modules into streamdeckd

Modules require a method on them in the main package called "GetModule" that returns an instance of handler.Module e.g

package main

type CustomIconHandler struct {
	
}
...

type CustomKeyHandler struct {
	
}
...

func GetModule() handlers.Module {
	return handlers.Module{
		Name: "CustomModule", // the name that will be used in the icon_handler/key_handler field in the config, and that will be shown in the handler dropdown in streamdeckui
		NewIcon: func() api.IconHandler { return &CustomerIconHandler{}}, // Method to create a new instance of the Icon handler, if left empty, streamdeckui will not include it in the icon handler fields
		NewKey: func() api.KeyHandler { return &CustomerKeyHandler{}}, // Method to create a new instance of the Key Handler, if left empty, streamdeckui will not include it in the key handler fields
		IconFields: []api.Field{ // list of fields to be shown in streamdeckui when the icon handler is selected
			{
				Title: "Icon", // name of field to show in UI
				Name: "icon", // name of field that will be included in the iconHandlerFields map
				Type: "File" // type of input to show on streamdeckui, options are Text, File, TextAlignment, and Number
				FileTypes: []string{".png", ".jpg"} // Allowed file types if a File input type is used
			}
		},
		KeyFields: []api.Field{}, // Same as IconFields
	}
}

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL