Fn + F5 / F6 brightness keys not working on Asus R556L

I've already tried many solutions I'd found on the web and none of them has worked. I'm using Ubuntu 16.04 LTS, fresh installation.

  • This notebook has Intel HD Graphics 5500 and Nvidia GeForce 920M. I thought that installing the proprietary Nvidia driver would solve the issue, but it still exists. Installing bumblebee for Nvidia Optimus didn't solve the issue either.
  • The other Fn keys like volume up, down, screen off, WiFi etc. work without any problems.
  • The brightness keys work in the GRUB selection menu. They stop working immediately after the Ubuntu is selected and launched. On Windows they work perfectly fine.
  • xev and acpi_listen don't detect the Fn + F5 / F6 combination at all, no matter what solution I try.
  • /sys/class/blacklight contains an intel_backlight folder and the brightness can be changed using the sudo tee /sys/class/backlight/intel_backlight/brightness <<< 200 command. This folder may also contain a second folder like acpi_video0 after trying some of the solutions, but the brightness setting in this folder does not have any effect.
  • Generally, the brightness can be changed in settings or by using xbacklight, the only issue is that the Fn brightness keys seems to be considered to not exist for the system. EDIT: Apparently, xbacklight doesn't work when the Nvidia GPU is used. It works when the Intel GPU is set in Nvidia Prime. So I guess this issue is somehow related to dual GPU setup.

Here are the solutions I've already tried and all of them failed:

  • I edited /etc/default/grub by commenting out the GRUB_CMDLINE_LINUX line and changing the GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" line. None of the following additions has worked for me, mixed or not:
    • acpi_backlight=vendor
    • acpi_backlight=native
    • acpi_backlight=video
    • video.use_native_backlight=1
    • acpi_osi=
    • acpi_osi=Linux
    • acpi_osi='!Windows 2012'
  • I created a /usr/share/X11/xorg.conf.d/20-intel.conf file with the following content:

    Section "Device"
        Identifier "card0"
        Driver "intel"
        Option "Backlight" "intel_backlight"
        BusID "PCI:0:2:0"
    EndSection
    

    It only resulted in a black screen instead of the login screen, so I had to delete this file.

  • I edited the /etc/X11/xorg.conf file to add Option "Backlight" "intel_backlight" and Option "RegistryDwords" "EnableBrightnessControl=1". This didn't change anything. Here's the actual content of this file:

    Section "ServerLayout"
        Identifier "layout"
        Screen 0 "nvidia"
        Inactive "intel"
    EndSection
    
    Section "Device"
        Identifier "intel"
        Driver "modesetting"
        BusID "PCI:0@0:2:0"
        Option "AccelMethod" "None"
        Option "Backlight" "intel_backlight"
    EndSection
    
    Section "Screen"
        Identifier "intel"
        Device "intel"
    EndSection
    
    Section "Device"
        Identifier "nvidia"
        Driver "nvidia"
        BusID "PCI:4@0:0:0"
        Option "ConstrainCursor" "off"
        Option "RegistryDwords" "EnableBrightnessControl=1"
    EndSection
    
    Section "Screen"
        Identifier "nvidia"
        Device "nvidia"
        Option "AllowEmptyInitialConfiguration" "on"
        Option "IgnoreDisplayDevices" "CRT"
    EndSection
    

I can't find any other solutions, just the same as above everywhere. Thanks in advance for any help or ideas what might be a fix.


Solution 1:

Hey there seem to be a few related questions for different asus computers:

https://askubuntu.com/search?q=brightness+F5

This answer might be particularly interesting (it suggest a kernel downgrade):

14.04 on Asus GL552JX: Fn+F5 and Fn+F6 Brightness Problem

I don't have an Asus R556L to experiment with but I would suggest a couple of things:

  1. The showkeys command operates at the level of keycodes and scancodes, so might give you information that xev will not: sudo showkey -s

  2. This archwiki page describes the https://wiki.archlinux.org/index.php/Map_scancodes_to_keycodes process of mapping scancodes to keycodes, apparently this happens in the kernel, but can be customized from userland.

For the benefit of other readers, here's a picture of what's going on.

Keypresses --keyboard---> scan codes --kernel---> keycodes ---X----> keysym --- application / wm ----> event

The comments about GPU and xbacklight muddy the water a little. I would be inclined to try to go around your window manager and just set bindings directly. One thing to bear in mind is that the kernel protocol for changing backlight settings has been changing recently to use sysfs and there were problems with xbacklight not supporting this. See acpilight for a drop in replacement. You can also do stuff manually inside sysfs.

Solution 2:

I had the same problem and tried a handful of combinations in GRUB, just like you. Also using an ASUS and Ubuntu 16.04

After multiple attempts, this is the combination of GRUB & .CONF that worked for me (without xblacklight installed):

  1. Edit GRUB
    • Open Terminal
    • type sudo gedit /usr/default/grub
    • type your password
    • Find this line:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    • Add acpi_osi= immediately following "quiet splash" like so: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi="
    • The next line should look like this: GRUB_CMDLINE_LINUX=""
    • SAVE and CLOSE file
    • In terminal, type sudo update-grub
  2. Create .CONF file

    • Open Terminal
    • type (or copy/paste): sudo gedit /usr/share/X11/xorg.conf./20-intel.conf
    • Remove everything from the file and paste this in line for line:
      Section "Device" Identifier "card0" Driver "intel" Option "Backlight" "intel_backlight" BusID "PCI:0:2:0" EndSection

    • SAVE and CLOSE file


3. Reboot computer


Here's a link to a explanation with links to references that helped me along the way: Function Keys Do Not work (Brightness & Sound) Ubuntu 16.04