Valid operands are: '>', '<', '>=', '<=', '==', '!='.
+ \e[1mif_mixer_mute (mixer)\e[0m
+ If mixer exists, display everything between $if_mixer_mute and
+ the matching $endif. If no mixer is specified, "Master" is used.
+
+
\e[1mif_running (process)\e[0m
- if PROCESS is running, display everything $if_running and the
- matching $endif. This uses the ``pidof'' command, so the -x
+ if PROCESS is running, display everything $if_running and the
+ matching $endif. This uses the ``pidof'' command, so the -x
switch is also supported.
\e[1mif_smapi_bat_installed (INDEX)\e[0m
- when using smapi, if the battery with index INDEX is installed,
- display everything between $if_smapi_bat_installed and the
+ when using smapi, if the battery with index INDEX is installed,
+ display everything between $if_smapi_bat_installed and the
matching $endif
\e[1mif_updatenr (updatenr)\e[0m
- If it's the UPDATENR-th time that conky updates, display every‐
+ If it's the UPDATENR-th time that conky updates, display every‐
thing between $if_updatenr and the matching $endif. The counter
- resets when the highest UPDATENR is reached. Example :
+ resets when the highest UPDATENR is reached. Example :
"{$if_updatenr 1}foo$endif{$if_updatenr 2}bar$endif{$if_updatenr
- 4}$endif" shows foo 25% of the time followed by bar 25% of the
+ 4}$endif" shows foo 25% of the time followed by bar 25% of the
time followed by nothing the other half of the time.
\e[1mimap_messages (args)\e[0m
Displays the number of messages in your global IMAP inbox by de‐
- fault. You can define individual IMAP inboxes seperately by
+ fault. You can define individual IMAP inboxes seperately by
passing arguments to this object. Arguments are: "host user pass
[-i interval] [-p port] [-e command] [-r retries]". Default port
is 143, default interval is 5 minutes, and default number of re‐
\e[1mioscheduler disk\e[0m
- Prints the current ioscheduler used for the given disk name
+ Prints the current ioscheduler used for the given disk name
(i.e. e.g. "hda" or "sdb")
\e[1mloadgraph ("normal"|"log") (height),(width) (gradient colour 1) (gradi‐\e[0m
\e[1ment colour 2) (scale)\e[0m
- Load1 average graph, similar to xload, with optional colours in
- hex, minus the #. Uses a logarithmic scale (to see small num‐
+ Load1 average graph, similar to xload, with optional colours in
+ hex, minus the #. Uses a logarithmic scale (to see small num‐
bers) when you use "log" instead of "normal".
\e[1mmails (mailbox) (interval)\e[0m
- Mail count in the specified mailbox or your mail spool if not.
- Both mbox and maildir type mailboxes are supported. You can use
- a program like fetchmail to get mails from some server using
+ Mail count in the specified mailbox or your mail spool if not.
+ Both mbox and maildir type mailboxes are supported. You can use
+ a program like fetchmail to get mails from some server using
your favourite protocol. See also new_mails.
\e[1mseen_mails (maildir) (interval)\e[0m
- Number of mails marked as seen in the specified mailbox or mail
- spool if not. Only maildir type mailboxes are supported, mbox
+ Number of mails marked as seen in the specified mailbox or mail
+ spool if not. Only maildir type mailboxes are supported, mbox
type will return -1.
\e[1munseen_mails (maildir) (interval)\e[0m
- Number of new or unseen mails in the specified mailbox or mail
- spool if not. Only maildir type mailboxes are supported, mbox
+ Number of new or unseen mails in the specified mailbox or mail
+ spool if not. Only maildir type mailboxes are supported, mbox
type will return -1.
\e[1mflagged_mails (maildir) (interval)\e[0m
- Number of mails marked as flagged in the specified mailbox or
- mail spool if not. Only maildir type mailboxes are supported,
+ Number of mails marked as flagged in the specified mailbox or
+ mail spool if not. Only maildir type mailboxes are supported,
mbox type will return -1.
\e[1munflagged_mails (maildir) (interval)\e[0m
- Number of mails not marked as flagged in the specified mailbox
+ Number of mails not marked as flagged in the specified mailbox
or mail spool if not. Only maildir type mailboxes are supported,
mbox type will return -1.
\e[1mforwarded_mails (maildir) (interval)\e[0m
- Number of mails marked as forwarded in the specified mailbox or
- mail spool if not. Only maildir type mailboxes are supported,
+ Number of mails marked as forwarded in the specified mailbox or
+ mail spool if not. Only maildir type mailboxes are supported,
mbox type will return -1.
\e[1mreplied_mails (maildir) (interval)\e[0m
- Number of mails marked as replied in the specified mailbox or
- mail spool if not. Only maildir type mailboxes are supported,
+ Number of mails marked as replied in the specified mailbox or
+ mail spool if not. Only maildir type mailboxes are supported,
mbox type will return -1.
\e[1munreplied_mails (maildir) (interval)\e[0m
- Number of mails not marked as replied in the specified mailbox
+ Number of mails not marked as replied in the specified mailbox
or mail spool if not. Only maildir type mailboxes are supported,
mbox type will return -1.
\e[1mdraft_mails (maildir) (interval)\e[0m
Number of mails marked as draft in the specified mailbox or mail
- spool if not. Only maildir type mailboxes are supported, mbox
+ spool if not. Only maildir type mailboxes are supported, mbox
type will return -1.
\e[1mtrashed_mails (maildir) (interval)\e[0m
- Number of mails marked as trashed in the specified mailbox or
- mail spool if not. Only maildir type mailboxes are supported,
+ Number of mails marked as trashed in the specified mailbox or
+ mail spool if not. Only maildir type mailboxes are supported,
mbox type will return -1.
\e[1mmboxscan (-n number of messages to print) (-fw from width) (-sw subject\e[0m
\e[1mwidth) mbox\e[0m
- Print a summary of recent messages in an mbox format mailbox.
- mbox parameter is the filename of the mailbox (can be encapsu‐
+ Print a summary of recent messages in an mbox format mailbox.
+ mbox parameter is the filename of the mailbox (can be encapsu‐
lated using '"', ie. ${mboxscan -n 10 "/home/brenden/some box"}
Gauge that shows amount of memory in use (see cpugauge)
- \e[1mmemgraph ("normal"|"log") (height),(width) (gradient colour 1) (gradi‐\e[0m
+ \e[1mmemgraph ("normal"|"log") (height),(width) (gradient colour 1) (gradi‐\e[0m
\e[1ment colour 2) (scale)\e[0m
- Memory usage graph. Uses a logarithmic scale (to see small num‐
+ Memory usage graph. Uses a logarithmic scale (to see small num‐
bers) when you use "log" instead of "normal".
\e[1mmemeasyfree\e[0m
- Amount of free memory including the memory that is very easily
+ Amount of free memory including the memory that is very easily
freed (buffers/cache)
\e[1mmixer (device)\e[0m
- Prints the mixer value as reported by the OS. Default mixer is
- "vol", but you can specify one of the following optional argu‐
+ Prints the mixer value as reported by the OS. Default mixer is
+ "vol", but you can specify one of the following optional argu‐
ments: "vol", "bass", "treble", "synth", "pcm", "speaker",
- "line", "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain",
+ "line", "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain",
"line1", "line2", "line3", "dig1", "dig2", "dig3", "phin",
"phout", "video", "radio", "monitor". Refer to the definition of
- SOUND_DEVICE_NAMES in <linux/soundcard.h> (on Linux), <sound‐
+ SOUND_DEVICE_NAMES in <linux/soundcard.h> (on Linux), <sound‐
card.h> (on OpenBSD), or <sys/soundcard.h> to find the exact op‐
tions available on your system.
\e[1mmixerbar (device)\e[0m
- Displays mixer value in a bar as reported by the OS. See docs
+ Displays mixer value in a bar as reported by the OS. See docs
for $mixer for details on arguments.
\e[1mmixerr (device)\e[0m
- Prints the right channel mixer value as reported by the OS. See
+ Prints the right channel mixer value as reported by the OS. See
docs for $mixer for details on arguments.
\e[1mmixerrbar (device)\e[0m
- Displays the right channel mixer value in a bar as reported by
+ Displays the right channel mixer value in a bar as reported by
the OS. See docs for $mixer for details on arguments.
\e[1mmixerl (device)\e[0m
- Prints the left channel mixer value as reported by the OS. See
+ Prints the left channel mixer value as reported by the OS. See
docs for $mixer for details on arguments.
\e[1mmixerlbar (device)\e[0m
- Displays the left channel mixer value in a bar as reported by
+ Displays the left channel mixer value in a bar as reported by
the OS. See docs for $mixer for details on arguments.
\e[1mif_mpd_playing\e[0m
- if mpd is playing or paused, display everything between
+ if mpd is playing or paused, display everything between
$if_mpd_playing and the matching $endif
\e[1mnameserver (index)\e[0m
- Print a nameserver from /etc/resolv.conf. Index starts at and
+ Print a nameserver from /etc/resolv.conf. Index starts at and
defaults to 0.
\e[1mnvidia threshold temp ambient gpufreq memfreq imagequality\e[0m
- Nvidia graficcard support for the XNVCtrl library. Each option
- can be shortened to the least significant part. Temperatures
+ Nvidia graficcard support for the XNVCtrl library. Each option
+ can be shortened to the least significant part. Temperatures
are printed as float, all other values as integer.
\e[1mthreshold\e[22m: the thresholdtemperature at which the gpu slows down
\e[1mpb_battery item\e[0m
If running on Apple powerbook/ibook, display information on bat‐
- tery status. The item parameter specifies, what information to
+ tery status. The item parameter specifies, what information to
display. Exactly one item must be specified. Valid items are:
\e[1mstatus\e[22m: Display if battery is fully charged, charging, discharg‐
ing or absent (running on AC)
- \e[1mpercent\e[22m: Display charge of battery in percent, if charging or
- discharging. Nothing will be displayed, if battery is fully
+ \e[1mpercent\e[22m: Display charge of battery in percent, if charging or
+ discharging. Nothing will be displayed, if battery is fully
charged or absent.
\e[1mtime\e[22m: Display the time remaining until the battery will be fully
- charged or discharged at current rate. Nothing is displayed, if
- battery is absent or if it's present but fully charged and not
+ charged or discharged at current rate. Nothing is displayed, if
+ battery is absent or if it's present but fully charged and not
discharging.
\e[1mplatform (dev) type n\e[0m
- Platform sensor from sysfs (Linux 2.6). Parameter dev may be
- omitted if you have only one platform device. Platform type is
- either 'in' or 'vol' meaning voltage; 'fan' meaning fan; 'temp'
- meaning temperature. Parameter n is number of the sensor. See
+ Platform sensor from sysfs (Linux 2.6). Parameter dev may be
+ omitted if you have only one platform device. Platform type is
+ either 'in' or 'vol' meaning voltage; 'fan' meaning fan; 'temp'
+ meaning temperature. Parameter n is number of the sensor. See
/sys/bus/platform/devices/ on your local computer.
\e[1mpop3_used (args)\e[0m
- Displays the amount of space (in MiB, 2^20) used in your global
- POP3 inbox by default. You can define individual POP3 inboxes
- seperately by passing arguments to this object. Arguments are:
- "host user pass [-i interval] [-p port] [-e command] [-r re‐
+ Displays the amount of space (in MiB, 2^20) used in your global
+ POP3 inbox by default. You can define individual POP3 inboxes
+ seperately by passing arguments to this object. Arguments are:
+ "host user pass [-i interval] [-p port] [-e command] [-r re‐
tries]". Default port is 110, default interval is 5 minutes, and
default number of retries before giving up is 5. If the password
- is supplied as '*', you will be prompted to enter the password
+ is supplied as '*', you will be prompted to enter the password
when Conky starts.
\e[1mscroll length (step) text\e[0m
- Scroll 'text' by 'step' characters showing 'length' number of
- characters at the same time. The text may also contain vari‐
+ Scroll 'text' by 'step' characters showing 'length' number of
+ characters at the same time. The text may also contain vari‐
ables. 'step' is optional and defaults to 1 if not set. If a var
- creates output on multiple lines then the lines are placed be‐
- hind each other separated with a '|'-sign. Do NOT use vars that
- change colors or otherwise affect the design inside a scrolling
- text. If you want spaces between the start and the end of
- 'text', place them at the end of 'text' not at the front ("foo‐
+ creates output on multiple lines then the lines are placed be‐
+ hind each other separated with a '|'-sign. Do NOT use vars that
+ change colors or otherwise affect the design inside a scrolling
+ text. If you want spaces between the start and the end of
+ 'text', place them at the end of 'text' not at the front ("foo‐
bar" and " foobar" can both generate "barfoo" but "foobar " will
keep the spaces like this "bar foo").
\e[1msmapi (ARGS)\e[0m
- when using smapi, display contents of the /sys/devices/plat‐
- form/smapi directory. ARGS are either '(FILENAME)' or 'bat (IN‐
- DEX) (FILENAME)' to display the corresponding files' content.
- This is a very raw method of accessing the smapi values. When
+ when using smapi, display contents of the /sys/devices/plat‐
+ form/smapi directory. ARGS are either '(FILENAME)' or 'bat (IN‐
+ DEX) (FILENAME)' to display the corresponding files' content.
+ This is a very raw method of accessing the smapi values. When
available, better use one of the smapi_* variables instead.
\e[1msmapi_bat_bar (INDEX),(height),(width)\e[0m
- when using smapi, display the remaining capacity of the battery
+ when using smapi, display the remaining capacity of the battery
with index INDEX as a bar.
\e[1msmapi_bat_perc (INDEX)\e[0m
- when using smapi, display the remaining capacity in percent of
- the battery with index INDEX. This is a separate variable be‐
+ when using smapi, display the remaining capacity in percent of
+ the battery with index INDEX. This is a separate variable be‐
cause it supports the 'use_spacer' configuration option.
\e[1msmapi_bat_power INDEX\e[0m
- when using smapi, display the current power of the battery with
- index INDEX in watt. This is a separate variable because the
- original read out value is being converted from mW. The sign of
- the output reflects charging (positive) or discharging (nega‐
+ when using smapi, display the current power of the battery with
+ index INDEX in watt. This is a separate variable because the
+ original read out value is being converted from mW. The sign of
+ the output reflects charging (positive) or discharging (nega‐
tive) state.
\e[1msmapi_bat_temp INDEX\e[0m
when using smapi, display the current temperature of the battery
- with index INDEX in degree Celsius. This is a separate variable
+ with index INDEX in degree Celsius. This is a separate variable
because the original read out value is being converted from mil‐
li degree Celsius.
The connection index provides you with access to each connection
in the port monitor. The monitor will return information for in‐
dex values from 0 to n-1 connections. Values higher than n-1 are
- simply ignored. For the "count" item, the connection index must
+ simply ignored. For the "count" item, the connection index must
be omitted. It is required for all other items.
Examples:
- \e[1m${tcp_portmon 6881 6999 count} \e[22m- displays the number of connec‐
+ \e[1m${tcp_portmon 6881 6999 count} \e[22m- displays the number of connec‐
tions in the bittorrent port range
- \e[1m${tcp_portmon 22 22 rip 0} \e[22m- displays the remote host ip of the
+ \e[1m${tcp_portmon 22 22 rip 0} \e[22m- displays the remote host ip of the
first sshd connection
- \e[1m${tcp_portmon 22 22 rip 9} \e[22m- displays the remote host ip of the
+ \e[1m${tcp_portmon 22 22 rip 9} \e[22m- displays the remote host ip of the
tenth sshd connection
\e[1m${tcp_portmon 1 1024 rhost 0} \e[22m- displays the remote host name of
the first connection on a privileged port
\e[1m${tcp_portmon 1 1024 rport 4} \e[22m- displays the remote host port of
the fifth connection on a privileged port
- \e[1m${tcp_portmon 1 65535 lservice 14} \e[22m- displays the local service
+ \e[1m${tcp_portmon 1 65535 lservice 14} \e[22m- displays the local service
name of the fifteenth connection in the range of all ports
Note that port monitor variables which share the same port range
actually refer to the same monitor, so many references to a sin‐
gle port range for different items and different indexes all use
- the same monitor internally. In other words, the program avoids
+ the same monitor internally. In other words, the program avoids
creating redundant monitors.
\e[1mtexeci interval command\e[0m
- Runs a command at an interval inside a thread and displays the
- output. Same as $execi, except the command is run inside a
- thread. Use this if you have a slow script to keep Conky updat‐
- ing. You should make the interval slightly longer then the time
- it takes your script to execute. For example, if you have a
- script that take 5 seconds to execute, you should make the in‐
+ Runs a command at an interval inside a thread and displays the
+ output. Same as $execi, except the command is run inside a
+ thread. Use this if you have a slow script to keep Conky updat‐
+ ing. You should make the interval slightly longer then the time
+ it takes your script to execute. For example, if you have a
+ script that take 5 seconds to execute, you should make the in‐
terval at least 6 seconds. See also $execi.
Move text over by N pixels. See also $voffset.
- \e[1mrss url delay_in_minutes action item_num\e[0m
- Download and parse RSS feeds. Action may be one of the follow‐
- ing: feed_title, item_title (with num par), item_desc (with num
- par) and item_titles.
+ \e[1mrss url delay_in_minutes action (num_par (spaces_in_front))\e[0m
+ Download and parse RSS feeds. Action may be one of the follow‐
+ ing: feed_title, item_title (with num par), item_desc (with num
+ par) and item_titles (when using this action and spaces_in_front
+ is given conky places that many spaces in front of each item).
\e[1mtab (width, (start))\e[0m
#include <sys/ioctl.h>
#include <errno.h>
#include <fcntl.h>
+#include <ctype.h>
+#ifdef MIXER_IS_ALSA
+#include <alsa/asoundlib.h>
+#else
#ifdef HAVE_LINUX_SOUNDCARD_H
#include <linux/soundcard.h>
#else
#include <sys/soundcard.h>
#endif /* __OpenBSD__ */
#endif /* HAVE_LINUX_SOUNDCARD_H */
+#endif /* MIXER_IS_ALSA */
#define MIXER_DEV "/dev/mixer"
+#ifdef MIXER_IS_ALSA
+#define MAX_MIXERS 8
+struct mixer_control {
+ char name[64];
+ snd_mixer_t *mixer;
+ snd_mixer_selem_id_t *sid;
+ snd_mixer_elem_t *elem;
+ long vol_min, vol_max;
+};
+
+static struct mixer_control mixer_data[MAX_MIXERS];
+int num_mixers = 0;
+static char soundcard[64] = "default";
+#else
static int mixer_fd;
static const char *devs[] = SOUND_DEVICE_NAMES;
+#endif
+
+#ifdef MIXER_IS_ALSA
+static int parse_simple_id(const char *str, snd_mixer_selem_id_t *sid)
+{
+ int c, size;
+ char buf[128];
+ char *ptr = buf;
+
+ while (*str == ' ' || *str == '\t')
+ str++;
+ if (!(*str))
+ return -EINVAL;
+ size = 1; /* for '\0' */
+ if (*str != '"' && *str != '\'') {
+ while (*str && *str != ',') {
+ if (size < (int)sizeof(buf)) {
+ *ptr++ = *str;
+ size++;
+ }
+ str++;
+ }
+ } else {
+ c = *str++;
+ while (*str && *str != c) {
+ if (size < (int)sizeof(buf)) {
+ *ptr++ = *str;
+ size++;
+ }
+ str++;
+ }
+ if (*str == c)
+ str++;
+ }
+ if (*str == '\0') {
+ snd_mixer_selem_id_set_index(sid, 0);
+ *ptr = 0;
+ goto _set;
+ }
+ if (*str != ',')
+ return -EINVAL;
+ *ptr = 0; /* terminate the string */
+ str++;
+ if (!isdigit(*str))
+ return -EINVAL;
+ snd_mixer_selem_id_set_index(sid, atoi(str));
+ _set:
+ snd_mixer_selem_id_set_name(sid, buf);
+ return 0;
+}
+int mixer_init (const char *name)
+{
+ /* from amixer.c, replaced -EINVAL with -1 */
+ int i, err;
+ if (!name)
+ name = "Master";
+
+ for (i = 0; i < num_mixers; i++) {
+ if (!strcasecmp (mixer_data[i].name, name)) {
+ return i;
+ }
+ }
+ if (i == MAX_MIXERS) {
+ fprintf (stderr, "max mixers (%d) reached\n", MAX_MIXERS);
+ return -1;
+ };
+
+ num_mixers++;
+#define data mixer_data[i]
+
+ strncpy (mixer_data[i].name, name, 63);
+ mixer_data[i].name[63] = '\0';
+ snd_mixer_selem_id_alloca (&data.sid);
+ data.mixer = NULL;
+ if (parse_simple_id (name, data.sid) < 0) {
+ fprintf (stderr, "Wrong mixer identifier: %s\n", name);
+ return -1;
+ }
+ if ((err = snd_mixer_open (&data.mixer, 0)) < 0) {
+ fprintf (stderr, "snd_mixer_open: %s\n", snd_strerror (err));
+ return -1;
+ }
+ if ((err = snd_mixer_attach (data.mixer, soundcard)) < 0) {
+ fprintf (stderr, "snd_mixer_attach: %s\n", snd_strerror (err));
+ return -1;
+ }
+ if ((err = snd_mixer_selem_register (data.mixer, NULL, NULL)) < 0) {
+ fprintf (stderr, "snd_mixer_selem_register: %s\n",
+ snd_strerror (err));
+ return -1;
+ }
+ if ((err = snd_mixer_load (data.mixer)) < 0) {
+ fprintf (stderr, "snd_mixer_load: %s\n", snd_strerror (err));
+ return -1;
+ }
+ if (!(data.elem = snd_mixer_find_selem (data.mixer, data.sid))) {
+ fprintf (stderr, "snd_mixer_find_selem (\"%s\", %i)\n",
+ snd_mixer_selem_id_get_name (data.sid),
+ snd_mixer_selem_id_get_index (data.sid));
+ return -1;
+ }
+ snd_mixer_selem_get_playback_volume_range(data.elem, &data.vol_min, &data.vol_max);
+ return i;
+}
+int mixer_get_avg (int i)
+{
+ long val;
+
+ snd_mixer_handle_events (data.mixer);
+ snd_mixer_selem_get_playback_volume (data.elem, 0, &val);
+ return (int) val;
+}
+int mixer_get_left (int i)
+{
+ /* stub */
+ return mixer_get_avg (i);
+}
+int mixer_get_right (int i)
+{
+ /* stub */
+ return mixer_get_avg (i);
+}
+int mixer_to_255(int i, int x)
+{
+ return (x-data.vol_min)*255/(data.vol_max-data.vol_min);
+}
+int mixer_is_mute(int i)
+{
+ snd_mixer_handle_events (data.mixer);
+ if (snd_mixer_selem_has_playback_switch (data.elem)) {
+ int val, err;
+ if ((err = snd_mixer_selem_get_playback_switch(data.elem, 0, &val)) < 0)
+ fprintf (stderr, "playback_switch: %s\n", snd_strerror (err));
+ return !val;
+ } else {
+ return !mixer_get_avg(i);
+ }
+}
+#undef data
+
+#else
int mixer_init(const char *name)
{
unsigned int i;
{
return mixer_get(i) & 0xFF;
}
+int mixer_is_mute(int i)
+{
+ return !mixer_get(i);
+}
+#endif