Add installation script, default state file, and update README for Acer RGB control
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
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 -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
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)) {
|
||||
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
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