Controlando el brillo del teclado y pantalla en un MacBook con NixOS y XMonad


22 de febrero de 2026

Cuando instalas NixOS en un MacBook Pro, el control de brillo no viene gratis. No hay teclas dedicadas que funcionen out-of-the-box como en macOS. Hay que currarselo.

Aqui documento como tengo configurado el control de brillo de pantalla y del teclado en mi MacBook Pro 13,2 (2016) con XMonad.

Lo que necesitas

Un solo paquete: brightnessctl. Controla tanto la pantalla como el teclado.

environment.systemPackages = [ pkgs.brightnessctl ];

Para que funcione sin root, una regla udev que abra permisos al backlight:

services.udev.extraRules = ''
  ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="intel_backlight",
    RUN+="${pkgs.coreutils}/bin/chmod 666 /sys/class/backlight/intel_backlight/brightness"
'';

Y el parametro de kernel para que use el driver nativo de Apple:

boot.kernelParams = [ "acpi_backlight=native" ];

Descubriendo los dispositivos

Lo primero es ver que dispositivos de brillo tienes:

brightnessctl --list

En el MacBook Pro 13,2 aparecen dos:

Brillo de pantalla

Control manual:

brightnessctl set 50%    # Poner al 50%
brightnessctl set +5%    # Subir 5%
brightnessctl set 5%-    # Bajar 5%

En XMonad, como el MacBook no tiene teclas de brillo dedicadas (las F-keys estan remapeadas con keyd), uso Shift + teclas de volumen:

-- Shift + Volumen Abajo = bajar brillo
, ("S-<XF86AudioLowerVolume>", spawn "brightnessctl set 5%-")
-- Shift + Volumen Arriba = subir brillo
, ("S-<XF86AudioRaiseVolume>", spawn "brightnessctl set +5%")

Logica: las teclas de volumen estan al lado de las de brillo en un teclado Apple. Shift las convierte en control de brillo. Facil de recordar.

Backlight del teclado

El backlight del teclado en este MacBook es binario en la practica: o lo quieres encendido o apagado. No tiene mucho sentido tenerlo a medio gas.

Control manual:

brightnessctl --device='spi::kbd_backlight' set 100%  # Encender
brightnessctl --device='spi::kbd_backlight' set 0      # Apagar

Para el toggle, un script simple (scripts/toggle-kbd-backlight):

#!/usr/bin/env bash
cur=$(brightnessctl --device=spi::kbd_backlight get)
if [ "$cur" -eq 0 ]; then
    brightnessctl --device=spi::kbd_backlight set 100%
else
    brightnessctl --device=spi::kbd_backlight set 0
fi

Y en XMonad, Shift + Eject hace el toggle:

, ("S-<XF86Eject>", spawn "/home/passh/dotfiles/scripts/toggle-kbd-backlight")

Eject es la tecla que en macOS expulsa discos. En NixOS no hace nada, asi que la reciclamos. Al arrancar XMonad, el backlight se apaga automaticamente para no gastar bateria:

spawn "brightnessctl --device='spi::kbd_backlight' set 0 2>/dev/null"

El 2>/dev/null es para que no moleste en maquinas que no tienen ese dispositivo (como mi workstation de sobremesa).

El detalle que importa: el nombre del dispositivo

Si buscas en internet como controlar el backlight del teclado en un MacBook con Linux, la mayoria de guias dicen que el dispositivo se llama apple::kbd_backlight. En el MacBook Pro 13,2 con NixOS, el dispositivo real es spi::kbd_backlight.

La forma segura de saberlo:

brightnessctl --list | grep kbd

Esto me costo un rato de depuracion. El script funcionaba desde terminal, pero el keybinding de XMonad no hacia nada. Al final era una combinacion de: nombre incorrecto del dispositivo, la virgula con el path, y que XMonad necesitaba un rebuild de NixOS para actualizar el xmonad.hs (gestionado por home-manager, que genera un symlink al nix store).

Resumen de keybindings

Atajo Accion
Shift + Volumen Abajo Bajar brillo pantalla 5%
Shift + Volumen Arriba Subir brillo pantalla 5%
Shift + Eject Toggle backlight teclado

Todo el codigo esta en mi repo de dotfiles.

Comparte este post:

Es tu post

Estas seguro? Esto no se puede deshacer.

Comentarios (0)

Sin comentarios todavia. Se el primero!

Deja un comentario