2009-10-12 07:57:42 +00:00
|
|
|
|
i3status(1)
|
|
|
|
|
===========
|
|
|
|
|
Michael Stapelberg <michael+i3@stapelberg.de>
|
2012-05-02 15:28:47 +00:00
|
|
|
|
v2.5, May 2012
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
|
|
|
|
== NAME
|
|
|
|
|
|
|
|
|
|
i3status - Generates a status line for dzen2 or xmobar
|
|
|
|
|
|
|
|
|
|
== SYNOPSIS
|
|
|
|
|
|
2010-09-22 22:12:48 +00:00
|
|
|
|
i3status [-c configfile] [-h] [-v]
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
|
|
|
|
== OPTIONS
|
|
|
|
|
|
|
|
|
|
-c::
|
2010-09-22 22:12:48 +00:00
|
|
|
|
Specifies an alternate configuration file path. By default, i3status looks for
|
|
|
|
|
configuration files in the following order:
|
|
|
|
|
|
2011-07-13 14:21:15 +00:00
|
|
|
|
1. ~/.i3status.conf
|
2010-10-23 19:43:32 +00:00
|
|
|
|
2. ~/.config/i3status/config (or $XDG_CONFIG_HOME/i3status/config if set)
|
2011-07-13 14:21:15 +00:00
|
|
|
|
3. /etc/i3status.conf
|
2010-10-23 19:43:32 +00:00
|
|
|
|
4. /etc/xdg/i3status/config (or $XDG_CONFIG_DIRS/i3status/config if set)
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
|
|
|
|
== DESCRIPTION
|
|
|
|
|
|
2011-07-19 13:28:28 +00:00
|
|
|
|
i3status is a small program (about 1500 SLOC) for generating a status bar for
|
|
|
|
|
i3bar, dzen2, xmobar or similar programs. It is designed to be very
|
|
|
|
|
efficient by issuing a very small number of system calls, as one generally
|
|
|
|
|
wants to update such a status line every second. This ensures that even under
|
|
|
|
|
high load, your status bar is updated correctly. Also, it saves a bit of energy
|
|
|
|
|
by not hogging your CPU as much as spawning the corresponding amount of shell
|
|
|
|
|
commands would.
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
|
|
|
|
== CONFIGURATION
|
|
|
|
|
|
|
|
|
|
The basic idea of i3status is that you can specify which "modules" should
|
|
|
|
|
be used (the order directive). You can then configure each module with its
|
|
|
|
|
own section. For every module, you can specify the output format. See below
|
|
|
|
|
for a complete reference.
|
|
|
|
|
|
|
|
|
|
.Sample configuration
|
|
|
|
|
-------------------------------------------------------------
|
|
|
|
|
general {
|
2009-10-27 19:27:15 +00:00
|
|
|
|
output_format = "dzen2"
|
2009-10-12 07:57:42 +00:00
|
|
|
|
colors = true
|
2009-10-27 19:27:15 +00:00
|
|
|
|
interval = 5
|
2009-10-12 07:57:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-10-10 19:29:44 +00:00
|
|
|
|
order += "ipv6"
|
2009-10-12 07:57:42 +00:00
|
|
|
|
order += "disk /"
|
|
|
|
|
order += "run_watch DHCP"
|
|
|
|
|
order += "run_watch VPN"
|
|
|
|
|
order += "wireless wlan0"
|
|
|
|
|
order += "ethernet eth0"
|
|
|
|
|
order += "battery 0"
|
|
|
|
|
order += "cpu_temperature 0"
|
|
|
|
|
order += "load"
|
|
|
|
|
order += "time"
|
|
|
|
|
|
|
|
|
|
wireless wlan0 {
|
2010-09-22 17:59:48 +00:00
|
|
|
|
format_up = "W: (%quality at %essid, %bitrate) %ip"
|
2009-10-12 07:57:42 +00:00
|
|
|
|
format_down = "W: down"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ethernet eth0 {
|
2010-04-01 18:34:03 +00:00
|
|
|
|
# if you use %speed, i3status requires the cap_net_admin capability
|
2011-01-05 23:09:03 +00:00
|
|
|
|
format_up = "E: %ip (%speed)"
|
|
|
|
|
format_down = "E: down"
|
2009-10-12 07:57:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
battery 0 {
|
2012-04-26 19:51:15 +00:00
|
|
|
|
format = "%status %percentage %remaining %emptytime"
|
2011-11-26 18:50:44 +00:00
|
|
|
|
path = "/sys/class/power_supply/BAT%d/uevent"
|
2012-05-22 21:14:59 +00:00
|
|
|
|
threshold = 10
|
2009-10-12 07:57:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
run_watch DHCP {
|
|
|
|
|
pidfile = "/var/run/dhclient*.pid"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
run_watch VPN {
|
|
|
|
|
pidfile = "/var/run/vpnc/pid"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
time {
|
|
|
|
|
format = "%Y-%m-%d %H:%M:%S"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
load {
|
|
|
|
|
format = "%5min"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cpu_temperature 0 {
|
|
|
|
|
format = "T: %degrees °C"
|
2011-01-06 17:23:56 +00:00
|
|
|
|
path = "/sys/devices/platform/coretemp.0/temp1_input"
|
2009-10-12 07:57:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
disk "/" {
|
|
|
|
|
format = "%free"
|
|
|
|
|
}
|
|
|
|
|
-------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
=== General
|
|
|
|
|
|
2010-06-30 22:56:30 +00:00
|
|
|
|
The +colors+ directive will disable all colors if you set it to +false+. You can
|
|
|
|
|
also specify the colors that will be used to display "good", "degraded" or "bad"
|
|
|
|
|
values using the +color_good+, +color_degraded+ or +color_bad+ directives,
|
|
|
|
|
respectively. Those directives are only used if color support is not disabled by
|
|
|
|
|
the +colors+ directive. The input format for color values is the canonical RGB
|
|
|
|
|
hexadecimal triplet (with no separators between the colors), prefixed by a hash
|
|
|
|
|
character ("#").
|
|
|
|
|
|
2011-05-08 18:43:35 +00:00
|
|
|
|
*Example configuration*:
|
|
|
|
|
-------------------------------------------------------------
|
|
|
|
|
color_good = "#00FF00"
|
|
|
|
|
-------------------------------------------------------------
|
2010-06-30 22:56:30 +00:00
|
|
|
|
|
|
|
|
|
Likewise, you can use the +color_separator+ directive to specify the color that
|
|
|
|
|
will be used to paint the separator bar. The separator is always output in
|
|
|
|
|
color, even when colors are disabled by the +colors+ directive.
|
|
|
|
|
|
|
|
|
|
The +interval+ directive specifies the time in seconds for which i3status will
|
|
|
|
|
sleep before printing the next status line.
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
2009-10-27 19:27:15 +00:00
|
|
|
|
Using +output_format+ you can chose which format strings i3status should
|
|
|
|
|
use in its output. Currently available are:
|
|
|
|
|
|
2012-04-30 11:10:13 +00:00
|
|
|
|
i3bar::
|
|
|
|
|
i3bar comes with i3 and provides a workspace bar which does the right thing in
|
|
|
|
|
multi-monitor situations. It also comes with tray support and can display the
|
|
|
|
|
i3status output. This output type uses JSON to pass as much meta-information to
|
|
|
|
|
i3bar as possible (like colors, which blocks can be shortened in which way,
|
|
|
|
|
etc.).
|
2009-10-27 19:27:15 +00:00
|
|
|
|
dzen2::
|
|
|
|
|
Dzen is a general purpose messaging, notification and menuing program for X11.
|
|
|
|
|
It was designed to be scriptable in any language and integrate well with window
|
|
|
|
|
managers like dwm, wmii and xmonad though it will work with any windowmanger
|
|
|
|
|
xmobar::
|
|
|
|
|
xmobar is a minimalistic, text based, status bar. It was designed to work
|
|
|
|
|
with the xmonad Window Manager.
|
|
|
|
|
none::
|
2011-07-19 13:28:28 +00:00
|
|
|
|
Does not use any color codes. Separates values by the pipe symbol. This should
|
|
|
|
|
be used with i3bar and can be used for custom scripts.
|
2009-10-27 19:27:15 +00:00
|
|
|
|
|
2009-10-12 07:57:42 +00:00
|
|
|
|
=== IPv6
|
|
|
|
|
|
|
|
|
|
This module gets the IPv6 address used for outgoing connections (that is, the
|
|
|
|
|
best available public IPv6 address on your computer).
|
|
|
|
|
|
2010-04-05 14:13:43 +00:00
|
|
|
|
*Example format_up*: +%ip+
|
|
|
|
|
|
|
|
|
|
*Example format_down* +no IPv6+
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
|
|
|
|
=== Disk
|
|
|
|
|
|
2010-06-24 23:19:09 +00:00
|
|
|
|
Gets used, free, available and total amount of bytes on the given mounted filesystem.
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
|
|
|
|
*Example order*: +disk /mnt/usbstick+
|
|
|
|
|
|
2010-06-24 23:19:09 +00:00
|
|
|
|
*Example format*: +%free (%avail)/ %total+
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
|
|
|
|
=== Run-watch
|
|
|
|
|
|
|
|
|
|
Expands the given path to a pidfile and checks if the process ID found inside
|
|
|
|
|
is valid (that is, if the process is running). You can use this to check if
|
|
|
|
|
a specific application, such as a VPN client or your DHCP client is running.
|
|
|
|
|
|
|
|
|
|
*Example order*: +run_watch DHCP+
|
|
|
|
|
|
2012-01-02 13:29:00 +00:00
|
|
|
|
*Example format*: +%title: %status+
|
2012-01-01 22:25:16 +00:00
|
|
|
|
|
2009-10-12 07:57:42 +00:00
|
|
|
|
=== Wireless
|
|
|
|
|
|
|
|
|
|
Gets the link quality and ESSID of the given wireless network interface. You
|
|
|
|
|
can specify different format strings for the network being connected or not
|
|
|
|
|
connected.
|
|
|
|
|
|
|
|
|
|
*Example order*: +wireless wlan0+
|
|
|
|
|
|
2010-09-22 17:59:48 +00:00
|
|
|
|
*Example format*: +W: (%quality at %essid, %bitrate) %ip+
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
|
|
|
|
=== Ethernet
|
|
|
|
|
|
|
|
|
|
Gets the IP address and (if possible) the link speed of the given ethernet
|
2010-04-01 18:34:03 +00:00
|
|
|
|
interface. Getting the link speed requires the cap_net_admin capability. Set
|
|
|
|
|
it using +setcap cap_net_admin=ep $(which i3status)+.
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
|
|
|
|
*Example order*: +ethernet eth0+
|
|
|
|
|
|
|
|
|
|
*Example format*: +E: %ip (%speed)+
|
|
|
|
|
|
|
|
|
|
=== Battery
|
|
|
|
|
|
|
|
|
|
Gets the status (charging, discharging, running), percentage and remaining
|
2012-04-26 19:51:15 +00:00
|
|
|
|
time of the given battery and when it's estimated to be empty. If you want
|
|
|
|
|
to use the last full capacity instead of the design capacity (when using
|
|
|
|
|
the design capacity, it may happen that your battery is at 23% when fully
|
|
|
|
|
charged because it’s old. In general, I want to see it this way, because
|
|
|
|
|
it tells me how worn off my battery is.), just specify
|
|
|
|
|
+last_full_capacity = true+.
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
2011-11-26 18:26:38 +00:00
|
|
|
|
If your battery is represented in a non-standard path in /sys, be sure to
|
|
|
|
|
modify the "path" property accordingly. The first occurence of %d gets replaced
|
|
|
|
|
with the battery number, but you can just hard-code a path as well.
|
|
|
|
|
|
2009-10-12 07:57:42 +00:00
|
|
|
|
*Example order*: +battery 0+
|
|
|
|
|
|
2012-04-26 19:51:15 +00:00
|
|
|
|
*Example format*: +%status %remaining (%emptytime)+
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
2012-05-22 21:14:59 +00:00
|
|
|
|
*Example threshold*: +threshold 10+
|
|
|
|
|
|
2009-10-12 07:57:42 +00:00
|
|
|
|
=== CPU-Temperature
|
|
|
|
|
|
|
|
|
|
Gets the temperature of the given thermal zone.
|
|
|
|
|
|
|
|
|
|
*Example order*: +cpu_temperature 0+
|
|
|
|
|
|
|
|
|
|
*Example format*: +T: %degrees °C+
|
|
|
|
|
|
2011-05-06 11:17:26 +00:00
|
|
|
|
=== CPU Usage
|
|
|
|
|
|
2012-05-04 07:28:32 +00:00
|
|
|
|
Gets the percentual CPU usage from +/proc/stat+ (Linux) or +sysctl(3)+ (FreeBSD/OpenBSD).
|
2011-05-06 11:17:26 +00:00
|
|
|
|
|
|
|
|
|
*Example order*: +cpu_usage+
|
|
|
|
|
|
|
|
|
|
*Example format*: +%usage+
|
|
|
|
|
|
2009-10-12 07:57:42 +00:00
|
|
|
|
=== Load
|
|
|
|
|
|
|
|
|
|
Gets the system load (number of processes waiting for CPU time in the last
|
2011-10-03 17:33:36 +00:00
|
|
|
|
1, 5 and 15 minutes).
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
|
|
|
|
*Example order*: +load+
|
|
|
|
|
|
2011-09-05 13:08:45 +00:00
|
|
|
|
*Example format*: +%1min %5min %15min+
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
|
|
|
|
=== Time
|
|
|
|
|
|
|
|
|
|
Formats the current system time. See +strftime(3)+ for the format.
|
|
|
|
|
|
|
|
|
|
*Example order*: +time+
|
|
|
|
|
|
|
|
|
|
*Example format*: +%Y-%m-%d %H:%M:%S+
|
|
|
|
|
|
2010-06-17 23:53:27 +00:00
|
|
|
|
=== DDate
|
|
|
|
|
|
|
|
|
|
Outputs the current discordian date in user-specified format. See +ddate(1)+ for
|
|
|
|
|
details on the format string.
|
|
|
|
|
*Note*: Neither *%.* nor *%X* are implemented yet.
|
|
|
|
|
|
|
|
|
|
*Example order*: +ddate+
|
|
|
|
|
|
|
|
|
|
*Example format*: +%{%a, %b %d%}, %Y%N - %H+
|
|
|
|
|
|
2010-07-20 17:30:27 +00:00
|
|
|
|
=== Volume
|
|
|
|
|
|
|
|
|
|
Outputs the volume of the specified mixer on the specified device. Works only
|
|
|
|
|
on Linux because it uses ALSA.
|
2012-05-04 07:28:32 +00:00
|
|
|
|
A simplified configuration can be used on FreeBSD and OpenBSD due to
|
|
|
|
|
the lack of ALSA, the +device+, +mixer+ and +mixder_idx+ options can be
|
|
|
|
|
ignored on these systems. On these systems the OSS API is used instead to
|
|
|
|
|
query +/dev/mixer+ directly.
|
2010-07-20 17:30:27 +00:00
|
|
|
|
|
|
|
|
|
*Example order*: +volume master+
|
|
|
|
|
|
|
|
|
|
*Example format*: +♪: %volume+
|
|
|
|
|
|
|
|
|
|
*Example configuration*:
|
|
|
|
|
-------------------------------------------------------------
|
|
|
|
|
volume master {
|
|
|
|
|
format = "♪: %volume"
|
|
|
|
|
device = "default"
|
|
|
|
|
mixer = "Master"
|
|
|
|
|
mixer_idx = 0
|
|
|
|
|
}
|
|
|
|
|
-------------------------------------------------------------
|
|
|
|
|
|
2009-10-12 07:57:42 +00:00
|
|
|
|
== Using i3status with dzen2
|
|
|
|
|
|
2010-09-22 22:50:52 +00:00
|
|
|
|
After installing dzen2, you can directly use it with i3status. Just ensure that
|
|
|
|
|
+output_format+ is set to +dzen2+.
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
|
|
|
|
*Example for usage of i3status with dzen2*:
|
|
|
|
|
--------------------------------------------------------------
|
|
|
|
|
i3status | dzen2 -fg white -ta r -w 1280 \
|
|
|
|
|
-fn "-misc-fixed-medium-r-normal--13-120-75-75-C-70-iso8859-1"
|
|
|
|
|
--------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
== Using i3status with xmobar
|
|
|
|
|
|
|
|
|
|
To get xmobar to start, you might need to copy the default configuration
|
2010-09-22 22:50:52 +00:00
|
|
|
|
file to +~/.xmobarrc+. Also, ensure that the +output_format+ option for i3status
|
|
|
|
|
is set to +xmobar+.
|
2009-10-12 07:57:42 +00:00
|
|
|
|
|
|
|
|
|
*Example for usage of i3status with xmobar*:
|
|
|
|
|
---------------------------------------------------------------------
|
2010-09-22 22:50:52 +00:00
|
|
|
|
i3status | xmobar -o -t "%StdinReader%" -c "[Run StdinReader]"
|
2009-10-12 07:57:42 +00:00
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
|
2012-02-24 16:31:08 +00:00
|
|
|
|
== What about memory usage or CPU frequency?
|
|
|
|
|
|
|
|
|
|
While talking about two specific things, please understand this section as a
|
|
|
|
|
general explanation why your favorite information is not included in i3status.
|
|
|
|
|
|
|
|
|
|
Let’s talk about memory usage specifically. It is hard to measure memory in a
|
|
|
|
|
way which is accurate or meaningful. An in-depth understanding of how paging
|
|
|
|
|
and virtual memory work in your operating system is required. Furthermore, even
|
|
|
|
|
if we had a well-defined way of displaying memory usage and you would
|
|
|
|
|
understand it, I think that it’s not helpful to repeatedly monitor your memory
|
|
|
|
|
usage. One reason for that is that I have not run out of memory in the last few
|
|
|
|
|
years. Memory has become so cheap that even in my 4 year old notebook, I have
|
|
|
|
|
8 GiB of RAM. Another reason is that your operating system will do the right
|
|
|
|
|
thing anyway: Either you have not enough RAM for your workload, but you need to
|
|
|
|
|
do it anyway, then your operating system will swap. Or you don’t have enough
|
|
|
|
|
RAM and you want to restrict your workload so that it fits, then the operating
|
|
|
|
|
system will kill the process using too much RAM and you can act accordingly.
|
|
|
|
|
|
|
|
|
|
For CPU frequency, the situation is similar. Many people don’t understand how
|
|
|
|
|
frequency scaling works precisely. The generally recommended CPU frequency
|
|
|
|
|
governor ("ondemand") changes the CPU frequency far more often than i3status
|
|
|
|
|
could display it. The display number is therefore often incorrect and doesn’t
|
|
|
|
|
tell you anything useful either.
|
|
|
|
|
|
2012-05-02 15:26:08 +00:00
|
|
|
|
In general, i3status wants to display things which you would look at
|
|
|
|
|
occasionally anyways, like the current date/time, whether you are connected to
|
|
|
|
|
a WiFi network or not, and if you have enough disk space to fit that 4.3 GiB
|
|
|
|
|
download.
|
2012-02-24 16:31:08 +00:00
|
|
|
|
|
|
|
|
|
However, if you need to look at some kind of information more than once in a
|
|
|
|
|
while (like checking repeatedly how full your RAM is), you are probably better
|
2012-05-02 15:26:08 +00:00
|
|
|
|
off with a script doing that, which pops up an alert when your RAM usage reaches
|
|
|
|
|
a certain threshold. After all, the point of computers is not to burden you
|
|
|
|
|
with additional boring tasks like repeatedly checking a number.
|
2012-02-24 16:31:08 +00:00
|
|
|
|
|
2011-08-25 20:52:50 +00:00
|
|
|
|
== External scripts/programs with i3status
|
|
|
|
|
|
|
|
|
|
In i3status, we don’t want to implement process management again. Therefore,
|
|
|
|
|
there is no module to run arbitrary scripts or commands. Instead, you should
|
|
|
|
|
use your shell, for example like this:
|
|
|
|
|
|
|
|
|
|
*Example for prepending the i3status output*:
|
|
|
|
|
--------------------------------------------------------------
|
2011-10-30 13:28:36 +00:00
|
|
|
|
#!/bin/sh
|
|
|
|
|
# shell script to prepend i3status with more stuff
|
|
|
|
|
|
2011-08-25 20:55:01 +00:00
|
|
|
|
i3status | while :
|
2011-08-25 20:52:50 +00:00
|
|
|
|
do
|
|
|
|
|
read line
|
2012-03-16 12:02:29 +00:00
|
|
|
|
echo "mystuff | $line" || exit 1
|
2011-10-30 13:28:36 +00:00
|
|
|
|
done
|
2011-08-25 20:52:50 +00:00
|
|
|
|
--------------------------------------------------------------
|
|
|
|
|
|
2011-10-30 13:28:36 +00:00
|
|
|
|
Put that in some script, say +.bin/my_i3status.sh+ and execute that instead of i3status.
|
|
|
|
|
|
2009-10-12 07:57:42 +00:00
|
|
|
|
== SEE ALSO
|
|
|
|
|
|
|
|
|
|
+strftime(3)+, +date(1)+, +glob(3)+, +dzen2(1)+, +xmobar(1)+
|
|
|
|
|
|
|
|
|
|
== AUTHORS
|
|
|
|
|
|
|
|
|
|
Michael Stapelberg and contributors
|
|
|
|
|
|
|
|
|
|
Thorsten Toepper
|
|
|
|
|
|
|
|
|
|
Baptiste Daroussin
|
2011-07-19 13:28:28 +00:00
|
|
|
|
|
|
|
|
|
Axel Wagner
|
|
|
|
|
|
|
|
|
|
Fernando Tarlá Cardoso Lemos
|