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

  1. 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
  1. 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