Crates.io | cctv |
lib.rs | cctv |
version | 0.8.1 |
created_at | 2025-05-02 08:21:15.784498+00 |
updated_at | 2025-08-29 21:50:16.33507+00 |
description | Terminal interface for CoolerControl |
homepage | |
repository | https://gitlab.com/coolercontrol/cctv |
max_upload_size | |
id | 1657437 |
size | 214,908 |
A terminal client for CoolerControl.
:warning: Requires the CoolerControl service daemon to be running either locally or remotely, see Configuration.
[[TOC]]
Clone the git repo and build with cargo. Requires a working Rust installation.
git clone https://gitlab.com/coolercontrol/cctv.git
cd cctv
cargo build --release
cargo run --release
There are no packages for distributions yet but you can download and install the latest binary artifact built from master or build from source yourself.
curl -LOJ --clobber --output-dir "/tmp" \
https://gitlab.com/api/v4/projects/69657520/packages/generic/master/latest/cctv
sudo install -Dm 755 /tmp/cctv -t /usr/bin
Install with cargo. Requires a working Rust installation.
cargo install --git https://gitlab.com/coolercontrol/cctv.git
cctv
is also published to crates.io. Note that the version there may be slightly outdated.
cargo install cctv
Make sure $HOME/.cargo/bin
is in your path:
# Bash users
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# zsh users
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
Usage: cctv [OPTIONS]
TUI client for CoolerControl
Options:
--list-modes, -l Lists all available modes.
--activate-mode <mode-name>, -a <mode-name> Activates the specified mode.
--daemonize Do not launch the TUI and daemonize cctv.
--activate-previous-mode, -p Activates the previously active mode.
--dump Dump information about the system to stdout as json.
--help, -h Shows this help message.
If no options are passed, the application will launch into the TUI.
The dump
command is meant to be used with jq
. To get
the name of the currently active mode:
cctv --dump | jq -r '.state.current_mode_uid as $uid | .modes[] | select(.uid == $uid) | .name'
Feel free to reach out to request shortcuts for commonly used operations.
For the differences between working
and saved
changes or edit
and normal
modes,
refer to editing profiles.
Keys | Page | Mode | Action |
---|---|---|---|
Down, e, j | All | Normal | Select next item |
Up, i, k | All | Normal | Select previous item |
Right, o, l | All | Normal | Go to the next page |
Left, n, h | All | Normal | Go to the previous page |
R | All | Normal | Refresh app data |
s | All | Normal | Toggle legend visibility |
q | All | Normal | Quit |
Ctrl+b | All | Normal | Toggle dock visibility. You can still use relevant keybindings when the dock is hidden. |
a | Devices | Normal | Toggle between the default and the alternative chart |
Enter | Modes | Normal | Activate currently highlighted mode |
D | Profiles | All | Discard working changes |
E | Profiles | Normal | Enter edit mode |
A | Profiles | Normal | Apply saved changes to daemon |
Esc | Profiles | Edit | Exit edit mode |
Enter | Profiles | Edit | Save working changes |
Right, o, l | Profiles | Edit | Move cursor right |
Left, n, h | Profiles | Edit | Move cursor left |
Backspace | Profiles | Edit | Delete one character |
digits, space, dot, comma, [, ] | Profiles | Edit | Insert the character |
Profile editing is a work-in-progress. There's experimental support for manipulating graph and fixed profiles.
:warning: Take a backup of your config before editing - there may be breakages.
There are two input modes: edit and normal. Normal mode is the default.
When you enter edit mode you will see a popup populated with the current settings.
Edits are in one of three states: working, saved, and applied.
State | Description |
---|---|
Working | Changes made but not saved within cctv . Visible only in the text box. |
Saved | Changes saved in cctv but not submitted to CoolerControl. Used for graph drawing, ineffective until applied. |
Applied | Final changes successfully sent to the daemon. |
:light_bulb: Working changes are preserved (without being saved) when moving between edit and normal modes.
Changes are validated when moving between stages.
From | To | Validation |
---|---|---|
Working | Saved | All syntactically correct changes are accepted. |
Saved | Applied | All changes deemed valid by the daemon are accepted. |
There are no guard rails beyond these. You will be notified of any errors. Lack of a notification indicates success.
:light_bulb: To discard saved changes: press 'R' to sync cctv
with the daemon.
:warning: Changes made in cctv
require a page refresh to be reflected in the GUI.
The reverse is also true.
cctv
will listen for server side events both when daemonized and in interactive mode.
It will send desktop notifications when it receives an alert.
Configuration is optional. cctv
will attempt to construct configurations from
below locations, in order of precedence:
coolercontrold
configuration fileThis means that if you're overriding CoolerControl's defaults, cctv
will
automatically pick some of them up. But you can still override them specifically for
cctv
with the environment variables e.g. to have cctv
connect to a remote
CoolerControl instance instead of your local daemon.
Note that there's currently no SSL or IPv6 support.
Environment Variable | Description | Default |
---|---|---|
CCTV_DAEMON_PORT |
Port CoolerControl is listening on. | 11987 |
CCTV_DAEMON_ADDRESS |
Address CoolerControl is listening on. | 127.0.0.1 |
CCTV_DAEMON_CONFIG_FILE_PATH |
Path to CoolerControl's config file. | /etc/coolercontrol/config.toml |
CCTV_TIME_RANGE |
Time range in seconds for device charts. | 60 |
CCTV_USERNAME |
CoolerControl username. | Internal default |
CCTV_PASSWORD |
CoolerControl password. | Internal default |
CCTV_NO_SPLASH |
Skips splash screen. | false |