Add installation script, default state file, and update README for Acer RGB control
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
|||||||
rgb
|
rgb
|
||||||
acer-rgb-cli
|
acer-rgb-cli
|
||||||
|
acer-rgbd
|
||||||
6
Makefile
6
Makefile
@@ -25,6 +25,12 @@ install: acer-rgbd acer-rgb
|
|||||||
sudo install -Dm755 acer-rgb.sh /usr/local/bin/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.service /etc/systemd/system/acer-rgbd.service
|
||||||
sudo install -Dm644 acer-rgbd.socket /etc/systemd/system/acer-rgbd.socket
|
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 daemon-reload
|
||||||
sudo systemctl enable --now acer-rgbd.service
|
sudo systemctl enable --now acer-rgbd.service
|
||||||
|
|||||||
80
README.md
Normal file
80
README.md
Normal 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
18
acer-rgb
Executable 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
|
||||||
@@ -342,6 +342,10 @@ static bool load_and_apply_all(std::array<Settings,3>& states) {
|
|||||||
if (hid_write_feature(newState, hwerr)) {
|
if (hid_write_feature(newState, hwerr)) {
|
||||||
states[idx] = newState;
|
states[idx] = newState;
|
||||||
any = true;
|
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
3
state.default
Normal 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
|
||||||
Reference in New Issue
Block a user