Sorry for delay:
In your i3config for screen and keyboard...
bindsym XF86MonBrightnessDown exec "sys='/sys/class/backlight/*backlight';\
bri=$(cat ${sys}/bri*); max=$(cat ${sys}/max*);\
val=$(($bri - $max / 32)); val=$(($val < 0 ? 0 : $val));\
echo $val | sudo tee ${sys}/bri*;"
bindsym XF86MonBrightnessUp exec "sys='/sys/class/backlight/*backlight';\
bri=$(cat ${sys}/bri*); max=$(cat ${sys}/max*);\
val=$(($bri + $max / 32)); val=$(($val > $max ? $max : $val));\
echo $val | sudo tee ${sys}/bri*;"
bindsym XF86KbdBrightnessDown exec "sys='/sys/class/leds/*backlight';\
bri=$(cat ${sys}/bri*); max=$(cat ${sys}/max*);\
val=$(($bri - $max / 32)); val=$(($val < 0 ? 0 : $val));\
echo $val | sudo tee ${sys}/bri*;"
bindsym XF86KbdBrightnessUp exec "sys='/sys/class/leds/*backlight';\
bri=$(cat ${sys}/bri*); max=$(cat ${sys}/max*);\
val=$(($bri + $max / 32)); val=$(($val > $max ? $max : $val));\
echo $val | sudo tee ${sys}/bri*;"
The only annoying things is that you will need to add NOPASSWD sudoers entries separately for:
/usr/bin/tee /sys/class/backlight/*/brightness
and
/usr/bin/tee /sys/class/leds/*/brightness
These are the only complex part of my i3config, it might seem a bit lengthy compared to installing xbacklight but for me that tool could only ever fake it by changing the pixels rather than the backlight (on every piece of hardware I have tried).
The nice thing about scripting /sys/class directly is that other than the permissions it is self contained and you can easily adapt above to any other stuff it presents on your particular piece of hardware.
The value 32 is the number of divisions over the range, so it should be consistent across different hardware, but you may want to adjust it to taste still.
... awaiting more golfing like a sed oneliner :P i wrote this quite a long time ago.