2.8 KiB
2.8 KiB
Chromebook Volume Buttons Driver
Hardware volume button driver for Chromebook devices with non-functional side-mounted volume controls.
Free and Open Source Software
This project is completely free and open source.
My Hardware
Primary Target:
- Lenovo IdeaPad Flex 5i Chromebook Gen 8
- Codename: Taeko (Google Brya family)
- Processor: Intel Core i3-1215U
- BIOS: MrChromebox custom firmware
- OS: Nyarch Linux
GPIO Configuration:
- Volume Down: GPIO 3 (EC:EC_VOLDN_BTN_ODL)
- Volume Up: GPIO 4 (EC:EC_VOLUP_BTN_ODL)
- Chip: /dev/gpiochip1 (cros-ec-gpio)
Features
- Real-time volume button detection via GPIO polling
- Automatic key repeat after 0.8 second hold
- Repeat interval: 100ms
- Systemd service for automatic startup
- Low CPU overhead (80ms polling interval)
Prerequisites
Required packages:
sudo pacman -S python-evdev libgpiod
Python dependencies:
- python-gpiod (>= 2.2.0)
- python-evdev (>= 1.9.0)
Installation
Quick Installation
git clone https://gitea.legion-muyue.fr/Muyue/chromebook-volume-buttons.git
cd chromebook-volume-buttons
sudo bash install.sh
Manual Installation
- Copy the script to system location:
sudo cp volume_buttons.py /usr/local/bin/chromebook-volume-buttons
sudo chmod +x /usr/local/bin/chromebook-volume-buttons
- Install systemd service:
sudo cp chromebook-volume-buttons.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable chromebook-volume-buttons.service
sudo systemctl start chromebook-volume-buttons.service
Usage
The service starts automatically on boot. Manual control:
# Check status
sudo systemctl status chromebook-volume-buttons.service
# View live logs
sudo journalctl -u chromebook-volume-buttons.service -f
# Restart service
sudo systemctl restart chromebook-volume-buttons.service
# Stop service
sudo systemctl stop chromebook-volume-buttons.service
# Disable auto-start
sudo systemctl disable chromebook-volume-buttons.service
Development
Testing Without Service
Run the script directly for debugging:
sudo python3 volume_buttons.py
Press Ctrl+C to stop.
Modifying Timing
Edit the following constants in volume_buttons.py:
self.HOLD_DELAY = 1.0 # Seconds before repeat
self.REPEAT_INTERVAL = 0.2 # Seconds between repeats
POLL_INTERVAL = 0.05 # GPIO polling interval
Hardware Variations
If your Chromebook model differs, check GPIO mappings:
sudo gpioinfo
Look for volume button GPIO lines and update constants in the script:
VOLUME_DOWN_PIN = 3 # Update if different
VOLUME_UP_PIN = 4 # Update if different
References
- ChromiumOS EC GPIO Documentation
- Linux GPIO Userspace API (libgpiod)
- Python evdev Documentation
- MrChromebox Firmware
Author
Muyue