Can't adjust screen brightness on Lenovo laptop (XFCE) - brightness controls unresponsive

Hi Manjaro community,

I’m having persistent issues adjusting screen brightness on my Lenovo laptop running Manjaro XFCE. The brightness keys don’t respond, and I’ve tried multiple solutions without success. Here’s my diagnostic information:

System Information:

System:
  Host: conatus Kernel: 5.15.185-1-MANJARO arch: x86_64 bits: 64 compiler: gcc
    v: 15.1.1
  Desktop: Xfce v: 4.20.1 Distro: Manjaro base: Arch Linux
Machine:
  Type: Laptop System: LENOVO product: 20366 v: Lenovo Z40-70
    serial: <superuser required>
  Mobo: LENOVO model: Lancer 4A5 v: 31900059WIN serial: <superuser required>
    UEFI: LENOVO v: 9BCN91WW date: 07/21/2015
CPU:
  Info: dual core model: Intel Core i5-4210U bits: 64 type: MT MCP
    arch: Haswell rev: 1 cache: L1: 128 KiB L2: 512 KiB L3: 3 MiB
  Speed (MHz): avg: 2394 min/max: 800/2700 cores: 1: 2394 2: 2394 3: 2394
    4: 2394 bogomips: 19161
  Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx
Graphics:
  Device-1: Intel Haswell-ULT Integrated Graphics vendor: Lenovo driver: i915
    v: kernel arch: Gen-7.5 bus-ID: 00:02.0
  Device-2: Syntek Lenovo EasyCamera driver: uvcvideo type: USB
    bus-ID: 2-6:4
  Display: x11 server: X.org v: 1.21.1.18 driver: X: loaded: modesetting
    dri: crocus gpu: i915 resolution: 1: 1920x1080~60Hz 2: 1366x768~60Hz
  API: OpenGL Message: Unable to show GL data. glxinfo is missing.
  Info: Tools: de: kscreen-doctor,xfce4-display-settings x11: xprop,xrandr

Brightness Control Diagnostics

  1. Available backlight interfaces:
ls /sys/class/backlight/
intel_backlight

  1. Current brightness values:
cat /sys/class/backlight/intel_backlight/{brightness,max_brightness}
10
937

3 Manual brightness adjustment test:

# Attempt to increase brightness
echo 100 | sudo tee /sys/class/backlight/intel_backlight/brightness
100
# Verify change
cat /sys/class/backlight/intel_backlight/brightness 
10
# But screen brightness doesn't actually change

  1. Installed brightness tools:
pacman -Q | grep -E 'xbacklight|brightnessctl|light'
brightnessctl 0.5.1-3
lightdm 1:1.32.0-6
lightdm-gtk-greeter 1:2.0.9-1
lightdm-gtk-greeter-settings 1.2.3-3
nano-syntax-highlighting 2022.11.02.r102.gbb94603-1
xorg-xbacklight 1.2.4-1
zsh-syntax-highlighting 0.8.0-1

  1. Keypress detection test (output when pressing brightness keys):
    
xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
233 XF86MonBrightnessUp # That's the key but it's not detected by xev
232 XF86MonBrightnessDown

What I’ve Tried

  • Various udev rules for permissions
  • Multiple tools (xbacklight, brightnessctl, manual sysfs writes)
  • Different keyboard shortcut configurations in XFCE
  • Checking for conflicting services

Current Behavior

  • Brightness keys are detected (show in xev)
  • Can write to brightness file but changes don’t affect actual display
  • No error messages in journal/dmesg

Would appreciate any guidance on:

  • Why sysfs changes don’t affect actual brightness
  • How to properly debug the brightness control pipeline
  • Any Lenovo-specific considerations

Note: I used Deepseek in order to help me fix this in MATE, but it just kept getting worse with script after script. So I’m back at XFCE. I tried to fall back to a default state but oh my, it felt like an unnecessary detour for such a “small” problem. The whole thing was like getting out of a toxic relationship (yes, I know I did that myself in the end :sweat_smile:).

Thank you!

Maybe take a look at:

        acpi_backlight= [HW,ACPI]
                        { vendor | video | native | none }
                        If set to vendor, prefer vendor-specific driver
                        (e.g. thinkpad_acpi, sony_acpi, etc.) instead
                        of the ACPI video.ko driver.
                        If set to video, use the ACPI video.ko driver.
                        If set to native, use the device's native backlight mode.
                        If set to none, disable the ACPI backlight interface.

The kernel’s command-line parameters — The Linux Kernel documentation

Upgrade the Kernel to linux v6.xx

That’s probably a good idea. 6.12 is the latest LTS (Long Term Support) kernel.

Perhaps try vdu_controls that uses ddcutil in the AUR. I maintain the AUR package and often communicate with the developer.

2 Likes

Thanks for the suggestion, I tried changing the kernel’s command-line parameter to no avail. I did it using the 5.15 kernel. Would it have been different doing so with v6.xx? By the way I also tried to change the brightness using the proper keys on my keyboard on v6.1 but still, nothing. Should I try changing the kernel’s command-line parameter with v6.1 also?

I have an external monitor but I’m not using it right now. If vdu_controls only controls external monitors but can’t control the brightness of my laptop screen, I don’t see the point of installing it. My question is, can vdu_controls only control external monitors? The only problem I have is with my laptop screen, my external monitor works just fine.