Add installation script, default state file, and update README for Acer RGB control

This commit is contained in:
Fernando Crespo
2026-01-30 16:59:42 -03:00
parent 4c1c7a5477
commit 44cfb84a5f
6 changed files with 113 additions and 1 deletions

1
.gitignore vendored
View File

@@ -1,2 +1,3 @@
rgb
acer-rgb-cli
acer-rgbd

View File

@@ -25,6 +25,12 @@ install: acer-rgbd acer-rgb
sudo install -Dm755 acer-rgb.sh /usr/local/bin/acer-rgb
sudo install -Dm644 acer-rgbd.service /etc/systemd/system/acer-rgbd.service
sudo install -Dm644 acer-rgbd.socket /etc/systemd/system/acer-rgbd.socket
# install default state only if it doesn't already exist
@if [ ! -f /var/lib/acer-rgbd/state.txt ]; then \
sudo install -Dm644 state.default /var/lib/acer-rgbd/state.txt; \
else \
echo "/var/lib/acer-rgbd/state.txt already exists — leaving it in place"; \
fi
sudo systemctl daemon-reload
sudo systemctl enable --now acer-rgbd.service

80
README.md Normal file
View File

@@ -0,0 +1,80 @@
# acer-lighting
Small tools to control Acer laptop RGB zones and a daemon that persists/apply states.
## Build
- Build the daemon only:
```sh
make acer-rgbd
```
- Build the CLI (used for manual commands and test targets):
```sh
make acer-rgb-cli
```
Or build everything with:
```sh
make build
```
## Install
Install the daemon, helper script and systemd units:
```sh
sudo make install
```
The `install` target will:
- Copy `acer-rgbd` to `/usr/local/bin/acer-rgbd` and `acer-rgb` to `/usr/local/bin/acer-rgb`.
- Install systemd unit and socket under `/etc/systemd/system/` and enable/start the service.
- Create `/var/lib/acer-rgbd/state.txt` with an initial "all green" state so the daemon applies green on first start.
If you need to undo the install:
```sh
sudo make uninstall
```
## Usage
- Send commands to the daemon using the `acer-rgb` helper (it talks to the daemon socket):
```sh
acer-rgb SET dev=keyboard hidraw=/dev/hidraw2 effect=static bright=100 r=0 g=255 b=0 zone=all
acer-rgb GET
```
- You can also use the CLI binary for direct HID control (for testing):
```sh
sudo ./acer-rgb-cli /dev/hidraw2 keyboard static --brightness 100 --rgb 0 255 0 --zone all
```
## State file
The daemon persists three lines (keyboard, lid, button) in `/var/lib/acer-rgbd/state.txt`. Editing that file (as root) changes the values the daemon will reapply on start.
## Logs & troubleshooting
View the daemon logs with:
```sh
journalctl -u acer-rgbd.service -f
```
If you modify the state file and want the daemon to reapply immediately, restart it:
```sh
sudo systemctl restart acer-rgbd.service
```
## Notes
- The installer writes an initial all-green state (keyboard/lid/button) to `/var/lib/acer-rgbd/state.txt` so newly installed systems show green LEDs by default.
- Running the daemon requires root privileges (or appropriate udev rules) to access the HID device.

18
acer-rgb Executable file
View File

@@ -0,0 +1,18 @@
#!/usr/bin/env bash
set -euo pipefail
SOCK="/run/acer-rgbd.sock"
if [[ $# -lt 1 ]]; then
echo "Usage:"
echo " acer-rgb GET"
echo " acer-rgb SET hidraw=/dev/hidraw2 dev=keyboard effect=static bright=80 r=255 g=0 b=0 zone=all"
exit 2
fi
cmd="$*"
if command -v socat >/dev/null 2>&1; then
printf "%s\n" "$cmd" | socat - UNIX-CONNECT:"$SOCK"
else
printf "%s\n" "$cmd" | nc -U "$SOCK"
fi

View File

@@ -342,6 +342,10 @@ static bool load_and_apply_all(std::array<Settings,3>& states) {
if (hid_write_feature(newState, hwerr)) {
states[idx] = newState;
any = true;
} else {
// couldn't apply to hardware now (device may not exist yet), keep desired state
std::println("[WARN] failed to apply to hw for dev {}: {}", device_to_str(newState.device), hwerr);
states[idx] = newState;
}
}

3
state.default Normal file
View File

@@ -0,0 +1,3 @@
SET dev=keyboard hidraw=/dev/hidraw2 effect=static bright=100 r=0 g=255 b=0 zone=all
SET dev=lid hidraw=/dev/hidraw2 effect=static bright=100 r=0 g=255 b=0
SET dev=button hidraw=/dev/hidraw2 effect=static bright=100 r=0 g=255 b=0