How to display brightness level in i3status bar

I’ve been using Linux for a long time, but I was never entirely happy with the desktop environment options available. Until last year, Xfce was the closest to what I consider a good compromise between features and performance. Then I found i3, an amazing piece of software that changed my life.

i3 is a tiling window manager. The goal of a window manager is to control the appearance and placement of windows in a windowing system. Window managers are often used as part a full-featured desktop environment (such as GNOME or Xfce), but some can also be used as standalone applications.

i3status don’t have an option to display brightness level by default. But by tweaking some configuration we can easily achieve this.

Follow this method

  1. copy the script to /usr/local/bin

net-speed-and-brightness.sh

#!/bin/sh

Authors:

- Moritz Warning <[email protected]> (2016)

- Zhong Jianxin <[email protected]> (2014)

- Akhil Jalagam <[email protected]> (2019)

See file LICENSE at the project root directory for license information.

i3status.conf should contain:

general {

output_format = i3bar

}

i3 config looks like this:

bar {

status_command exec /usr/share/doc/i3status/contrib/net-speed.sh

}

Single interface:

ifaces=“eth0”

Multiple interfaces:

ifaces=“eth0 wlan0”

Auto detect interfaces

#ifaces=$(ls /sys/class/net | grep -E ‘^(eth|wlan|enp|wlp)’) ifaces=“enp2s0 wlp3s0”

last_time=0 last_rx=0 last_tx=0 rate=""

readable() { local bytes=$1 local kib=$(( bytes >> 10 )) if [ $kib -lt 0 ]; then echo “? K” elif [ $kib -gt 1024 ]; then local mib_int=$(( kib >> 10 )) local mib_dec=$(( kib % 1024 * 976 / 10000 )) if [ “$mib_dec” -lt 10 ]; then mib_dec=“0${mib_dec}” fi echo “${mib_int}.${mib_dec} M” else echo “${kib} K” fi }

update_rate() { local time=$(date +%s) local rx=0 tx=0 tmp_rx tmp_tx

for iface in $ifaces; do read tmp_rx < “/sys/class/net/${iface}/statistics/rx_bytes” read tmp_tx < “/sys/class/net/${iface}/statistics/tx_bytes” rx=$(( rx + tmp_rx )) tx=$(( tx + tmp_tx )) done

local interval=$(( $time - $last_time )) if [ $interval -gt 0 ]; then rate="$(readable $(( (rx - last_rx) / interval )))↓ $(readable $(( (tx - last_tx) / interval )))↑" else rate="" fi

show brightness

brightness=$(cat /sys/class/backlight/intel_backlight/brightness)

last_time=$time last_rx=$rx last_tx=$tx }

i3status | (read line && echo “$line” && read line && echo “$line” && read line && echo “$line” && update_rate && while : do read line update_rate echo “,[{"full_text":"${rate} | Sun: $(($brightness/75))% " },${line#,[}” || exit 1 done)

In the above script you can change /sys/class/backlight/intel_backlight/brightness based on your backlight model.

  1. update i3 config with the following
# control brightness
bindsym XF86MonBrightnessUp exec intelbacklight -inc 500 # increase screen brightness
bindsym XF86MonBrightnessDown exec intelbacklight -dec 500 # decrease screen brightness

status bar

bar { status_command /usr/local/bin/net-speed-and-brightness.sh }

Now reload the i3 config using Mod+Shift+r

Finally, you will see the net speed and brightness in status bar

If you prefer not to see net speed, just remove {rate} from the echo command in above script