From fde096c4359180349d28bf7a87cae362001d35cd Mon Sep 17 00:00:00 2001 From: Brenden Matthews Date: Tue, 5 May 2009 17:36:12 -0600 Subject: [PATCH] Added some completely pointless OpenMP optimizations(?) --- ChangeLog | 3 + README | 1999 ++++++++++++++++++++++++++++++++++++++++++++++- configure.ac.in | 10 +- m4/ax_openmp.m4 | 98 +++ src/conky.c | 4 +- src/conky.h | 6 +- src/linux.c | 28 +- 7 files changed, 2109 insertions(+), 39 deletions(-) create mode 100644 m4/ax_openmp.m4 diff --git a/ChangeLog b/ChangeLog index fb7be043..71dc29b1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2009-05-05 + * Added some completely pointless OpenMP optimizations(?) + 2009-05-03 * Added Sony VAIO fanspeed info (thanks Yeon-Hyeong) diff --git a/README b/README index c5a86fde..618a8f2c 100644 --- a/README +++ b/README @@ -1,37 +1,1980 @@ -QUICK & EASY: - $ sh autogen.sh - $ ./configure - $ make - $ ./src/conky # to run Conky - # make install +conky(1) conky(1) -First, read the README. This contains instructions specific to building conky -fresh from the git repo: -* Conky requires three "auto-tools", with at least the specific version numbers. - Make sure these are installed: - aclocal-1.9 - automake-1.9 - autoconf-2.59 +NAME + conky - A system monitor for X originally based on the torsmo code, but + more kickass. It just keeps on given'er. Yeah. -* In the directory where you cloned conky from git, - run "aclocal", "automake", and then "autoconf". - Make sure you run those commands with the latest versions... - it is very possible that older versions are installed, and - plain "automake" really means automake-1.4, not what we want, - but "automake-1.9" instead. - Use the "--version" option to check the program version, i.e. - "autoconf --version". +SYNOPSIS + conky [options] - You can also try using the autogen.sh script, like so: +DESCRIPTION + Conky is a system monitor for X originally based on torsmo. Since its + inception, Conky has changed significantly from its predecessor, while + maintaining simplicity and configurability. Conky can display just + about anything, either on your root desktop or in its own window. Not + only does Conky have many built-in objects, it can also display just + about any piece of information by using scripts and other external pro‐ + grams. - $ sh autogen.sh + Conky has more than 250 built in objects, including support for a + plethora of OS stats (uname, uptime, CPU usage, mem usage, disk usage, + "top" like process stats, and network monitoring, just to name a few), + built in IMAP and POP3 support, built in support for many popular music + players (MPD, XMMS2, BMPx, Audacious), and much much more. Conky can + display this info either as text, or using simple progress bars and + graph widgets, with different fonts and colours. -* After that, it's the familiar + We are always looking for help, whether its reporting bugs, writing + patches, or writing docs. Please use the facilities at SourceForge to + make bug reports, feature requests, and submit patches, or stop by + #conky on irc.freenode.net if you have questions or want to contribute. - $ ./configure - $ make - # make install + Thanks for your interest in Conky. - You might have to do the last step as root. +COMPILING + For users compiling from source on a binary distro, make sure you have + the X development libraries installed. This should be a package along + the lines of "libx11-dev" or "xorg-x11-dev" for X11 libs, and similar + "-dev" format for the other libs required (depending on your configure + options). + + Conky has (for some time) been available in the repositories of most + popular distributions. Here are some installation instructions for a + few: + + Gentoo users -- Conky is in Gentoo's Portage... simply use "emerge app- + admin/conky" for installation. There is also usually an up-to-date + ebuild within Conky's package or in the git repo. + + Debian, etc. users -- Conky should be in your repositories, and can be + installed by doing "aptitude install conky". + + Example to compile and run Conky with all optional components (note + that some configure options may differ for your system): + + sh autogen.sh # Only required if building from the git repo + + ./configure --prefix=/usr --mandir=/usr/share/man --in‐ + fodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc --local‐ + statedir=/var/lib --disable-own-window --enable-audacious[=yes|no|lega‐ + cy] --enable-bmpx --disable-hddtemp --disable-mpd --enable-xmms2 --dis‐ + able-portmon --disable-network --enable-debug --disable-x11 --dis‐ + able-double-buffer --disable-xdamage --disable-xft + + make + + make install # Optional + + src/conky + + Conky has been tested to be compatible with C99 C, however it has not + been tested with anything other than gcc, and is not guaranteed to work + with other compilers. + +YOU SHOULD KNOW + Conky is generally very good on resources. That said, the more you try + to make Conky do, the more resources it is going to consume. + + An easy way to force Conky to reload your ~/.conkyrc: "killall -SIGUSR1 + conky". Saves you the trouble of having to kill and then restart. You + can now also do the same with SIGHUP. + +OPTIONS + Command line options override configurations defined in configuration + file. + + -v | -V | --version + Prints version and exits + + + -q | --quiet + Run Conky in 'quiet mode' (ie. no output) + + + -a | --alignment=ALIGNMENT + Text alignment on screen, {top,bottom,middle}_{left,right,mid‐ + dle} or none + + + -b | --double-buffer + Use double buffering (eliminates "flicker") + + + -c | --config=FILE + Config file to load instead of $HOME/.conkyrc + + + -d | --daemonize + Daemonize Conky, aka fork to background + + + -f | --font=FONT + Font to use + + + -h | --help + Prints command line help and exits + + + -o | --own-window + Create own window to draw + + + -t | --text=TEXT + Text to render, remember single quotes, like -t ' $uptime ' + + + -u | --interval=SECONDS + Update interval + + + -w | --window-id=WIN_ID + Window id to draw + + + -x X_COORDINATE + X position + + + -y Y_COORDINATE + Y position + + + -i COUNT + Number of times to update Conky (and quit) + + +CONFIGURATION SETTINGS + Default configuration file location is $HOME/.conkyrc or + ${sysconfdir}/conky/conky.conf. On most systems, sysconfdir is /etc, + and you can find the sample config file there (/etc/conky/conky.conf). + + You might want to copy it to $HOME/.conkyrc and then start modifying + it. Other configs can be found at http://conky.sf.net/ + + alias Use this to create aliases of variables. The first argument is + the new name, the second the old name, and the other arguments + are passed on to the variable. Example: If you want to use $al‐ + pha instead of ${beta gamma delta} then you have to write the + following: alias alpha beta gamma delta . PS: Instead of creat‐ + ing an alias in the config you can also use environment vari‐ + ables. Example: Start conky like this: alpha="beta gamma delta" + conky + + + alignment + Aligned position on screen, may be top_left, top_right, top_mid‐ + dle, bottom_left, bottom_right, bottom_middle, middle_left, mid‐ + dle_right, or none (also can be abreviated as tl, tr, tm, bl, + br, bm, ml, mr) + + + background + Boolean value, if true, Conky will be forked to background when + started. + + + border_margin + Border margin in pixels. + + + border_width + Border width in pixels. + + + colorN Predefine a color for use inside TEXT segments. Substitute N by + a digit between 0 and 9, inclusively. When specifying the color + value in hex, omit the leading hash (#). + + + cpu_avg_samples + The number of samples to average for CPU monitoring. + + + diskio_avg_samples + The number of samples to average for disk I/O monitoring. + + + top_cpu_separate + If true, cpu in top will show usage of one processor's power. If + false, cpu in top will show the usage of all processors' power + combined. + + + default_bar_size + Specify a default width and height for bars. Example: 'de‐ + fault_bar_size 0 6'. This is particularly useful for execbar and + execibar as they do not take size arguments. + + + default_graph_size + Specify a default width and height for graphs. Example: 'de‐ + fault_graph_size 0 25'. This is particularly useful for exec‐ + graph and execigraph as they do not take size arguments + + + default_gauge_size + Specify a default width and height for gauges. Example: 'de‐ + fault_gauge_size 25 25'. This is particularly useful for exec‐ + gauge and execigauge as they do not take size arguments + + + default_color + Default color and border color + + + default_outline_color + Default outline color + + + default_shade_color + Default shading color and border's shading color + + + double_buffer + Use the Xdbe extension? (eliminates flicker) It is highly recom‐ + mended to use own window with this one so double buffer won't be + so big. + + + draw_borders + Draw borders around text? + + + draw_graph_borders + Draw borders around graphs? + + + draw_outline + Draw outlines? + + + draw_shades + Draw shades? + + + font Font name in X, xfontsel can be used to get a nice font + + + gap_x Gap, in pixels, between right or left border of screen, same as + passing -x at command line, e.g. gap_x 10 + + + gap_y Gap, in pixels, between top or bottom border of screen, same as + passing -y at command line, e.g. gap_y 10. + + + if_up_strictness + How strict should if_up be when testing an interface for being + up? The value is one of up, link or address, to check for the + interface being solely up, being up and having link or being up, + having link and an assigned IP address. + + + imap Default global IMAP server. Arguments are: "host user pass [-i + interval] [-f folder] [-p port] [-e command] [-r retries]". De‐ + fault port is 143, default folder is 'INBOX', 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 when Conky starts. + + + mail_spool + Mail spool for mail checking + + + max_port_monitor_connections + Allow each port monitor to track at most this many connections + (if 0 or not set, default is 256) + + + max_specials + Maximum number of special things, e.g. fonts, offsets, aligns, + etc. (default is 512) + + + max_user_text bytes + Maximum size of user text buffer, i.e. layout below TEXT line in + config file (default is 16384 bytes) + + + text_buffer_size bytes + Size of the standard text buffer (default is 256 bytes). This + buffer is used for intermediary text, such as individual lines, + output from $exec vars, and various other variables. Increasing + the size of this buffer can drastically reduce Conky's perfor‐ + mance, but will allow for more text display per variable. The + size of this buffer cannot be smaller than the default value of + 256 bytes. + + + maximum_width pixels + Maximum width of window + + + minimum_size width (height) + Minimum size of window + + + mpd_host + Host of MPD server + + + mpd_port + Port of MPD server + + + mpd_password + MPD server password + + + music_player_interval + Music player thread update interval (defaults to Conky's update + interval) + + + net_avg_samples + The number of samples to average for net data + + + no_buffers + Substract (file system) buffers from used memory? + + + override_utf8_locale + Force UTF8? requires XFT + + + own_window + Boolean, create own window to draw? + + + own_window_class + Manually set the WM_CLASS name. Defaults to "Conky". + + + own_window_colour colour + If own_window_transparent no, set a specified background colour + (defaults to black). Takes either a hex value (#ffffff) or a + valid RGB name (see /usr/lib/X11/rgb.txt) + + + own_window_hints undecorated,below,above,sticky,skip_taskbar,skip_pager + If own_window is yes, you may use these window manager hints to + affect the way Conky displays. Notes: Use own_window_type desk‐ + top as another way to implement many of these hints implicitly. + If you use own_window_type override, window manager hints have + no meaning and are ignored. + + + own_window_title + Manually set the window name. Defaults to " - conky". + + + own_window_transparent + Boolean, set pseudo-transparency? + + + own_window_type + if own_window is yes, you may specify type normal, desktop, dock + or override (default: normal). Desktop windows are special win‐ + dows that have no window decorations; are always visible on your + desktop; do not appear in your pager or taskbar; and are sticky + across all workspaces. Override windows are not under the con‐ + trol of the window manager. Hints are ignored. This type of win‐ + dow can be useful for certain situations. + + + out_to_console + Print text to stdout. + + + out_to_stderr + Print text to stderr. + + + out_to_x + When set to no, there will be no output in X (useful when you + also use things like out_to_console). If you set it to no, make + sure that it's placed before all other X-related setting (take + the first line of your configfile to be sure). Default value is + yes + + + overwrite_file + Overwrite the file given as argument. + + + append_file + Append the file given as argument. + + + pad_percents + Pad percentages to this many decimals (0 = no padding) + + + pop3 Default global POP3 server. Arguments are: "host user pass [-i + interval] [-p port] [-e command] [-r retries]". Default port is + 110, default interval is 5 minutes, and default number of re‐ + tries before giving up is 5. If the password is supplied as '*', + you will be prompted to enter the password when Conky starts. + + + short_units + Shortens units to a single character (kiB->k, GiB->G, etc.). De‐ + fault is off. + + + show_graph_scale + Shows the maximum value in scaled graphs. + + + show_graph_range + Shows the time range covered by a graph. + + + stippled_borders + Border stippling (dashing) in pixels + + + temperature_unit + Desired output unit of all objects displaying a temperature. + Parameters are either "fahrenheit" or "celsius". The default + unit is degree Celsius. + + + templateN + Define a template for later use inside TEXT segments. Substitute + N by a digit between 0 and 9, inclusively. The value of the + variable is being inserted into the stuff below TEXT at the cor‐ + responding position, but before some substitutions are applied: + + '\n' -> newline + '\\' -> backslash + '\ ' -> space + '\N' -> template argument N + + + total_run_times + Total number of times for Conky to update before quitting. Zero + makes Conky run forever + + + update_interval + Update interval in seconds + + + uppercase + Boolean value, if true, text is rendered in upper case + + + use_spacer + Adds spaces around certain objects to stop them from moving oth‐ + er things around. Arguments are left, right, and none (default). + The old true/false values are deprecated and default to + right/none respectively. Note that this only helps if you are + using a mono font, such as Bitstream Vera Sans Mono. + + + use_xft + Use Xft (anti-aliased font and stuff) + + + xftalpha + Alpha of Xft font. Must be a value at or between 1 and 0. + + + xftfont + Xft font to use. + + + TEXT After this begins text to be formatted on screen. Backslash (\) + escapes newlines in the text section. This can be useful for + cleaning up config files where conky is used to pipe input to + dzen2. + + +VARIABLES + Colors are parsed using XParsecolor(), there might be a list of them: + /usr/share/X11/rgb.txt. Also, ⟨http://sedition.com/perl/rgb.html⟩. + Color can be also in #rrggbb format (hex). + + addr interface + IP address for an interface, or "No Address" if no address is + assigned. + + + addrs interface + IP addresses for an interface (if one - works like addr). Linux + only. + + + acpiacadapter + ACPI ac adapter state. + + + acpifan + ACPI fan state + + + acpitemp + ACPI temperature in C. + + + adt746xcpu + CPU temperature from therm_adt746x + + + adt746xfan + Fan speed from therm_adt746x + + + alignr (num) + Right-justify text, with space of N + + + alignc (num) + Align text to centre + + + apm_adapter + Display APM AC adapter status (FreeBSD only) + + + apm_battery_life + Display APM battery life in percent (FreeBSD only) + + + apm_battery_time + Display remaining APM battery life in hh:mm:ss or "unknown" if + AC adapterstatus is on-line or charging (FreeBSD only) + + + audacious_bar (height),(width) + Progress bar + + + audacious_bitrate + Bitrate of current tune + + + audacious_channels + Number of audio channels of current tune + + + audacious_filename + Full path and filename of current tune + + + audacious_frequency + Sampling frequency of current tune + + + audacious_length + Total length of current tune as MM:SS + + + audacious_length_seconds + Total length of current tune in seconds + + + audacious_playlist_position + Playlist position of current tune + + + audacious_playlist_length + Number of tunes in playlist + + + audacious_position + Position of current tune (MM:SS) + + + audacious_position_seconds + Position of current tune in seconds + + + audacious_status + Player status (Playing/Paused/Stopped/Not running) + + + audacious_title (max length) + Title of current tune with optional maximum length specifier + + + audacious_main_volume + The current volume fetched from Audacious + + + battery (num) + Battery status and remaining percentage capacity of ACPI or APM + battery. ACPI battery number can be given as argument (default + is BAT0). + + + battery_short (num) + Battery status and remaining percentage capacity of ACPI or APM + battery. ACPI battery number can be given as argument (default + is BAT0). This mode display a short status, which means that C + is displayed instead of charging and D is displayed instead of + discharging. + + + battery_bar (height),(width) (num) + Battery percentage remaining of ACPI battery in a bar. ACPI bat‐ + tery number can be given as argument (default is BAT0). + + + battery_percent (num) + Battery percentage remaining for ACPI battery. ACPI battery num‐ + ber can be given as argument (default is BAT0). + + + battery_time (num) + Battery charge/discharge time remaining of ACPI battery. ACPI + battery number can be given as argument (default is BAT0). + + + bmpx_artist + Artist in current BMPx track + + + bmpx_album + Album in current BMPx track + + + bmpx_title + Title of the current BMPx track + + + bmpx_track + Track number of the current BMPx track + + + bmpx_bitrate + Bitrate of the current BMPx track + + + bmpx_uri + URI of the current BMPx track + + + buffers + Amount of memory buffered + + + cached Amount of memory cached + + + color (color) + Change drawing color to color + + + colorN Change drawing color to colorN configuration option, where N is + a digit between 0 and 9, inclusively. + + + combine var1 var2 + Places the lines of var2 to the right of the lines of var1 + seperated by the chars that are put between var1 and var2. For + example: ${combine ${head /proc/cpuinfo 2} - ${head /proc/memin‐ + fo 1}} gives as output "cpuinfo_line1 - meminfo_line1" on line 1 + and "cpuinfo_line2 -" on line 2. $combine vars can also be nest‐ + ed to place more vars next to each other. + + + conky_version + Conky version + + + conky_build_date + Date Conky was built + + + conky_build_arch + CPU architecture Conky was built for + + + cpu (cpuN) + CPU usage in percents. For SMP machines, the CPU number can be + provided as an argument. ${cpu cpu0} is the total usage, and + ${cpu cpuX} (X >= 1) are individual CPUs. + + + cpubar (cpuN) (height),(width) + Bar that shows CPU usage, height is bar's height in pixels. See + $cpu for more info on SMP. + + + cpugauge (cpuN) (height),(width) + Elliptical gauge that shows CPU usage, height and width are + gauge's vertical and horizontal axis respectively. See $cpu for + more info on SMP. + + + cpugraph (cpuN) ("normal"|"log") (height),(width) (gradient colour 1) + (gradient colour 2) (scale) + CPU usage graph, with optional colours in hex, minus the #. See + $cpu for more info on SMP. Uses a logarithmic scale (to see + small numbers) when you use "log" instead of "normal". + + + diskio (device) + Displays current disk IO. Device is optional, and takes the form + of sda for /dev/sda. Individual partitions are allowed. + + + diskiograph ("normal"|"log") (height),(width) (gradient colour 1) (gra‐ + dient colour 2) (scale) (device) + Disk IO graph, colours defined in hex, minus the #. If scale is + non-zero, it becomes the scale for the graph. Uses a logarithmic + scale (to see small numbers) when you use "log" instead of "nor‐ + mal". + + + diskio_read (device) + Displays current disk IO for reads. Device as in diskio. + + + diskiograph_read ("normal"|"log") (height),(width) (gradient colour 1) + (gradient colour 2) (scale) (device) + Disk IO graph for reads, colours defined in hex, minus the #. If + scale is non-zero, it becomes the scale for the graph. Device as + in diskio. Uses a logarithmic scale (to see small numbers) when + you use "log" instead of "normal". + + + diskio_write (device) + Displays current disk IO for writes. Device as in diskio. + + + diskiograph_write ("normal"|"log") (height),(width) (gradient colour 1) + (gradient colour 2) (scale) (device) + Disk IO graph for writes, colours defined in hex, minus the #. + If scale is non-zero, it becomes the scale for the graph. Device + as in diskio. Uses a logarithmic scale (to see small numbers) + when you use "log" instead of "normal". + + + disk_protect device + Disk protection status, if supported (needs kernel-patch). + Prints either "frozen" or "free " (note the padding). + + + downspeed net + Download speed in KiB + + + downspeedf net + Download speed in KiB with one decimal + + + downspeedgraph ("normal"|"log") (height),(width) (gradient colour 1) + (gradient colour 2) (scale) (net) + Download speed graph, colours defined in hex, minus the #. If + scale is non-zero, it becomes the scale for the graph. Uses a + logarithmic scale (to see small numbers) when you use "log" in‐ + stead of "normal". + + + else Text to show if any of the above are not true + + + entropy_avail + Current entropy available for crypto freaks + + + entropy_bar (height),(width) + Normalized bar of available entropy for crypto freaks + + + entropy_poolsize + Total size of system entropy pool for crypto freaks + + + eval string + Evalutates given string according to the rules of TEXT interpre‐ + tation, i.e. parsing any contained text object specifications + into their output, any occuring '$$' into a single '$' and so + on. The output is then being parsed again. + + + exec command + Executes a shell command and displays the output in conky. warn‐ + ing: this takes a lot more resources than other variables. I'd + recommend coding wanted behaviour in C and posting a patch. + + + execbar command + Same as exec, except if the first value return is a value be‐ + tween 0-100, it will use that number for a bar. The size for + bars can be controlled via the default_bar_size config setting. + + + execgauge command + Same as exec, except if the first value returned is a value be‐ + tween 0-100, it will use that number for a gauge. The size for + gauges can be controlled via the default_gauge_size config set‐ + ting. + + + execgraph ("normal"|"log") (height),(width) (gradient colour 1) (gradi‐ + ent colour 2) (scale) command + Same as execbar, but graphs values. Uses a logaritmic scale when + the log option is given (to see small numbers). Values still + have to be between 0 and 100. The size for graphs can be con‐ + trolled via the default_graph_size config setting. + + + execi interval command + Same as exec but with specific interval. Interval can't be less + than update_interval in configuration. See also $texeci + + + execibar interval command + Same as execbar, except with an interval + + + execigraph interval command + Same as execgraph, but takes an interval arg and graphs values. + + + execigauge interval command + Same as execgauge, but takes an interval arg and gauges values. + + + execp command + Executes a shell command and displays the output in conky. warn‐ + ing: this takes a lot more resources than other variables. I'd + recommend coding wanted behaviour in C and posting a patch. This + differs from $exec in that it parses the output of the command, + so you can insert things like ${color red}hi!${color} in your + script and have it correctly parsed by Conky. Caveats: Conky + parses and evaluates the output of $execp every time Conky + loops, and then destroys all the objects. If you try to use any‐ + thing like $execi within an $execp statement, it will function‐ + ally run at the same interval that the $execp statement runs, as + it is created and destroyed at every interval. + + + execpi interval command + Same as execp but with specific interval. Interval can't be less + than update_interval in configuration. Note that the output from + the $execpi command is still parsed and evaluated at every in‐ + terval. + + + font (font) + Specify a different font. This new font will apply to the cur‐ + rent line and everything following. You can use a $font with no + arguments to change back to the default font (much like with + $color) + + + freq (n) + Returns CPU #n's frequency in MHz. CPUs are counted from 1. If + omitted, the parameter defaults to 1. + + + freq_g (n) + Returns CPU #n's frequency in GHz. CPUs are counted from 1. If + omitted, the parameter defaults to 1. + + + fs_bar (height),(width) fs + Bar that shows how much space is used on a file system. height + is the height in pixels. fs is any file on that file system. + + + fs_bar_free (height),(width) fs + Bar that shows how much space is free on a file system. height + is the height in pixels. fs is any file on that file system. + + + fs_free (fs) + Free space on a file system available for users. + + + fs_free_perc (fs) + Free percentage of space on a file system available for users. + + + fs_size (fs) + File system size. + + + fs_type (fs) + File system type. + + + fs_used (fs) + File system used space. + + + fs_used_perc (fs) + Percent of file system used space. + + + goto x The next element will be printed at position 'x'. + + + gw_iface + Displays the default route's interface or "multiple"/"none" ac‐ + cordingly. + + + gw_ip Displays the default gateway's IP or "multiple"/"none" accord‐ + ingly. + + + hddtemp dev, (host,(port)) + Displays temperature of a selected hard disk drive as reported + by the hddtemp daemon running on host:port. Default host is + 127.0.0.1, default port is 7634. + + + head logfile lines (interval) + Displays first N lines of supplied text text file. If interval + is not supplied, Conky assumes 2x Conky's interval. Max of 30 + lines can be displayed, or until the text buffer is filled. + + + hr (height) + Horizontal line, height is the height in pixels + + + hwmon (dev) type n + Hwmon sensor from sysfs (Linux 2.6). Parameter dev may be omit‐ + ted if you have only one hwmon device. Parameter type is either + 'in' or 'vol' meaning voltage; 'fan' meaning fan; 'temp' meaning + temperature. Parameter n is number of the sensor. See + /sys/class/hwmon/ on your local computer. + + + iconv_start codeset_from codeset_to + Convert text from one codeset to another using GNU iconv. Needs + to be stopped with iconv_stop. + + + iconv_stop + Stop iconv codeset conversion. + + + i2c (dev) type n + I2C sensor from sysfs (Linux 2.6). Parameter dev may be omitted + if you have only one I2C device. Parameter type is either 'in' + or 'vol' meaning voltage; 'fan' meaning fan; 'temp' meaning tem‐ + perature. Parameter n is number of the sensor. See + /sys/bus/i2c/devices/ on your local computer. + + + i8k_ac_status + If running the i8k kernel driver for Inspiron laptops, displays + whether ac power is on, as listed in /proc/i8k (translated to + human-readable). Beware that this is by default not enabled by + i8k itself. + + + i8k_bios + If running the i8k kernel driver for Inspiron laptops, displays + the bios version as listed in /proc/i8k. + + + i8k_buttons_status + If running the i8k kernel driver for Inspiron laptops, displays + the volume buttons status as listed in /proc/i8k. + + + i8k_cpu_temp + If running the i8k kernel driver for Inspiron laptops, displays + the cpu temperature in Celsius, as reported by /proc/i8k. + + + i8k_left_fan_rpm + If running the i8k kernel driver for Inspiron laptops, displays + the left fan's rate of rotation, in revolutions per minute as + listed in /proc/i8k. Beware, some laptops i8k reports these fans + in reverse order. + + + i8k_left_fan_status + If running the i8k kernel driver for Inspiron laptops, displays + the left fan status as listed in /proc/i8k (translated to human- + readable). Beware, some laptops i8k reports these fans in re‐ + verse order. + + + i8k_right_fan_rpm + If running the i8k kernel driver for Inspiron laptops, displays + the right fan's rate of rotation, in revolutions per minute as + listed in /proc/i8k. Beware, some laptops i8k reports these fans + in reverse order. + + + i8k_right_fan_status + If running the i8k kernel driver for Inspiron laptops, displays + the right fan status as listed in /proc/i8k (translated to hu‐ + man-readable). Beware, some laptops i8k reports these fans in + reverse order. + + + i8k_serial + If running the i8k kernel driver for Inspiron laptops, displays + your laptop serial number as listed in /proc/i8k. + + + i8k_version + If running the i8k kernel driver for Inspiron laptops, displays + the version formatting of /proc/i8k. + + + ibm_fan + If running the IBM ACPI, displays the fan speed. + + + ibm_temps N + If running the IBM ACPI, displays the temperatures from the IBM + temperature sensors (N=0..7) Sensor 0 is on the CPU, 3 is on the + GPU. + + + ibm_volume + If running the IBM ACPI, displays the "master" volume, con‐ + trolled by the volume keys (0-14). + + + ibm_brightness + If running the IBM ACPI, displays the brigtness of the laptops's + LCD (0-7). + + + if_empty (var) + if conky variable VAR is empty, display everything between + $if_empty and the matching $endif + + + if_existing file (string) + if FILE exists, display everything between if_existing and the + matching $endif. The optional second paramater checks for FILE + containing the specified string and prints everything between + $if_existing and the matching $endif. + + + if_gw if there is at least one default gateway, display everything be‐ + tween $if_gw and the matching $endif + + + if_match expression + Evaluates the given boolean expression, printing everything be‐ + tween $if_match and the matching $endif depending on whether the + evaluation returns true or not. Valid expressions consist of a + left side, an operator and a right side. Left and right sides + are being parsed for contained text objects before evaluation. + Recognised left and right side types are: + + double: argument consists of only digits and a single dot. + long: argument consists of only digits. + string: argument is enclosed in quotation mark or the checks for + double and long failed before. + + Valid operands are: '>', '<', '>=', '<=', '==', '!='. + + + if_mixer_mute (mixer) + If mixer exists, display everything between $if_mixer_mute and + the matching $endif. If no mixer is specified, "Master" is used. + + + if_running (process) + if PROCESS is running, display everything $if_running and the + matching $endif. This uses the ``pidof'' command, so the -x + switch is also supported. + + + if_mounted (mountpoint) + if MOUNTPOINT is mounted, display everything between $if_mounted + and the matching $endif + + + if_smapi_bat_installed (INDEX) + when using smapi, if the battery with index INDEX is installed, + display everything between $if_smapi_bat_installed and the + matching $endif + + + if_up (interface) + if INTERFACE exists and is up, display everything between $if_up + and the matching $endif + + + if_updatenr (updatenr) + 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 : + "{$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 + time followed by nothing the other half of the time. + + + imap_messages (args) + Displays the number of messages in your global IMAP inbox by de‐ + 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‐ + tries before giving up is 5. If the password is supplied as '*', + you will be prompted to enter the password when Conky starts. + + + imap_unseen (args) + Displays the number of unseen messages in your global IMAP inbox + by default. 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‐ + tries before giving up is 5. If the password is supplied as '*', + you will be prompted to enter the password when Conky starts. + + + ioscheduler disk + Prints the current ioscheduler used for the given disk name + (i.e. e.g. "hda" or "sdb") + + + kernel Kernel version + + + laptop_mode + The value of /proc/sys/vm/laptop_mode + + + loadavg + (1,2,3)> System load average, 1 is for past 1 minute, 2 for past + 5 minutes and 3 for past 15 minutes. + + + loadgraph ("normal"|"log") (height),(width) (gradient colour 1) (gradi‐ + ent colour 2) (scale) + 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". + + + lines textfile + Displays the number of lines in the given file + + + machine + Machine, i686 for example + + + mails (mailbox) (interval) + 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. + + + new_mails (mailbox) (interval) + Unread mail count in the specified mailbox or mail spool if not. + Both mbox and maildir type mailboxes are supported. + + + seen_mails (maildir) (interval) + 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. + + + unseen_mails (maildir) (interval) + 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. + + + flagged_mails (maildir) (interval) + 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. + + + unflagged_mails (maildir) (interval) + 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. + + + forwarded_mails (maildir) (interval) + 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. + + + unforwarded_mails (maildir) (interval) + Number of mails not marked as forwarded in the specified mailbox + or mail spool if not. Only maildir type mailboxes are supported, + mbox type will return -1. + + + replied_mails (maildir) (interval) + 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. + + + unreplied_mails (maildir) (interval) + 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. + + + draft_mails (maildir) (interval) + Number of mails marked as draft in the specified mailbox or mail + spool if not. Only maildir type mailboxes are supported, mbox + type will return -1. + + + trashed_mails (maildir) (interval) + 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. + + + mboxscan (-n number of messages to print) (-fw from width) (-sw subject + width) mbox + 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"} + + + mem Amount of memory in use + + + membar (height),(width) + Bar that shows amount of memory in use + + + memgauge (height),(width) + Gauge that shows amount of memory in use (see cpugauge) + + + memgraph ("normal"|"log") (height),(width) (gradient colour 1) (gradi‐ + ent colour 2) (scale) + Memory usage graph. Uses a logarithmic scale (to see small num‐ + bers) when you use "log" instead of "normal". + + + memeasyfree + Amount of free memory including the memory that is very easily + freed (buffers/cache) + + + memfree + Amount of free memory + + + memmax Total amount of memory + + + memperc + Percentage of memory in use + + + mixer (device) + 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", + "line1", "line2", "line3", "dig1", "dig2", "dig3", "phin", + "phout", "video", "radio", "monitor". Refer to the definition of + SOUND_DEVICE_NAMES in (on Linux), (on OpenBSD), or to find the exact op‐ + tions available on your system. + + + mixerbar (device) + Displays mixer value in a bar as reported by the OS. See docs + for $mixer for details on arguments. + + + mixerr (device) + Prints the right channel mixer value as reported by the OS. See + docs for $mixer for details on arguments. + + + mixerrbar (device) + Displays the right channel mixer value in a bar as reported by + the OS. See docs for $mixer for details on arguments. + + + mixerl (device) + Prints the left channel mixer value as reported by the OS. See + docs for $mixer for details on arguments. + + + mixerlbar (device) + Displays the left channel mixer value in a bar as reported by + the OS. See docs for $mixer for details on arguments. + + + moc_state + Current state of MOC; playing, stopped etc. + + + moc_file + File name of the current MOC song + + + moc_title + Title of the current MOC song + + + moc_artist + Artist of the current MOC song + + + moc_song + The current song name being played in MOC. + + + moc_album + Album of the current MOC song + + + moc_totaltime + Total length of the current MOC song + + + moc_timeleft + Time left in the current MOC song + + + moc_curtime + Current time of the current MOC song + + + moc_bitrate + Bitrate in the current MOC song + + + moc_rate + Rate of the current MOC song + + + monitor + Number of the monitor on which conky is running + + + monitor_number + Number of monitors + + + mpd_artist + Artist in current MPD song must be enabled at compile + + + mpd_album + Album in current MPD song + + + mpd_bar (height),(width) + Bar of mpd's progress + + + mpd_bitrate + Bitrate of current song + + + mpd_status + Playing, stopped, et cetera. + + + mpd_title (max length) + Title of current MPD song + + + mpd_vol + MPD's volume + + + mpd_elapsed + Song's elapsed time + + + mpd_length + Song's length + + + mpd_percent + Percent of song's progress + + + mpd_random + Random status (On/Off) + + + mpd_repeat + Repeat status (On/Off) + + + mpd_track + Prints the MPD track field + + + mpd_name + Prints the MPD name field + + + mpd_file + Prints the file name of the current MPD song + + + mpd_smart (max length) + Prints the song name in either the form "artist - title" or file + name, depending on whats available + + + if_mpd_playing + if mpd is playing or paused, display everything between + $if_mpd_playing and the matching $endif + + + nameserver (index) + Print a nameserver from /etc/resolv.conf. Index starts at and + defaults to 0. + + + nodename + Hostname + + + nvidia threshold temp ambient gpufreq memfreq imagequality + 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. + + threshold: the thresholdtemperature at which the gpu slows down + temp: gives the gpu current temperature + ambient: gives current air temperature near GPU case + gpufreq: gives the current gpu frequency + memfreq: gives the current mem frequency + imagequality: which imagequality should be choosen by OpenGL ap‐ + plications + + + outlinecolor (color) + Change outline color + + + pb_battery item + If running on Apple powerbook/ibook, display information on bat‐ + tery status. The item parameter specifies, what information to + display. Exactly one item must be specified. Valid items are: + + status: Display if battery is fully charged, charging, discharg‐ + ing or absent (running on AC) + percent: Display charge of battery in percent, if charging or + discharging. Nothing will be displayed, if battery is fully + charged or absent. + time: 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 + discharging. + + + platform (dev) type n + 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. + + + pop3_unseen (args) + Displays the number of unseen messages 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 retries]". Default port + is 110, default interval is 5 minutes, and default number of re‐ + tries before giving up is 5. If the password is supplied as '*', + you will be prompted to enter the password when Conky starts. + + + pop3_used (args) + 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 + when Conky starts. + + + pre_exec shell command + Executes a shell command one time before conky displays anything + and puts output as text. + + + processes + Total processes (sleeping and running) + + + running_processes + Running processes (not sleeping), requires Linux 2.6 + + + scroll length (step) text + 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‐ + bar" and " foobar" can both generate "barfoo" but "foobar " will + keep the spaces like this "bar foo"). + + + shadecolor (color) + Change shading color + + + smapi (ARGS) + 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. + + + smapi_bat_bar (INDEX),(height),(width) + when using smapi, display the remaining capacity of the battery + with index INDEX as a bar. + + + smapi_bat_perc (INDEX) + 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. + + + smapi_bat_power INDEX + 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. + + + smapi_bat_temp INDEX + when using smapi, display the current temperature of the battery + 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. + + + stippled_hr (space) + Stippled (dashed) horizontal line + + + swapbar (height),(width) + Bar that shows amount of swap in use + + + swap Amount of swap in use + + + swapmax + Total amount of swap + + + swapperc + Percentage of swap in use + + + sysname + System name, Linux for example + + + tcp_portmon port_begin port_end item (index) (ip4 only at present) + TCP port monitor for specified local ports. Port numbers must be + in the range 1 to 65535. Valid items are: + + count - total number of connections in the range + rip - remote ip address + rhost - remote host name + rport - remote port number + rservice - remote service name from /etc/services + lip - local ip address + lhost - local host name + lport - local port number + lservice - local service name from /etc/services + + 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 + be omitted. It is required for all other items. + + Examples: + ${tcp_portmon 6881 6999 count} - displays the number of connec‐ + tions in the bittorrent port range + ${tcp_portmon 22 22 rip 0} - displays the remote host ip of the + first sshd connection + ${tcp_portmon 22 22 rip 9} - displays the remote host ip of the + tenth sshd connection + ${tcp_portmon 1 1024 rhost 0} - displays the remote host name of + the first connection on a privileged port + ${tcp_portmon 1 1024 rport 4} - displays the remote host port of + the fifth connection on a privileged port + ${tcp_portmon 1 65535 lservice 14} - 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 + creating redundant monitors. + + texeci interval command + 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. + + + offset (pixels) + Move text over by N pixels. See also $voffset. + + + rss url delay_in_minutes action (num_par (spaces_in_front)) + 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). + + + tab (width, (start)) + Puts a tab of the specified width, starting from column 'start'. + The unit is pixels for both arguments. + + + tail logfile lines (interval) + Displays last N lines of supplied text text file. If interval is + not supplied, Conky assumes 2x Conky's interval. Max of 30 lines + can be displayed, or until the text buffer is filled. + + + templateN (arg1) (arg2) (arg3 ...) + Evaluate the content of the templateN configuration variable + (where N is a value between 0 and 9, inclusively), applying sub‐ + stitutions as described in the documentation of the correspond‐ + ing configuration variable. The number of arguments is option‐ + al, but must match the highest referred index in the template. + You can use the same special sequences in each argument as the + ones valid for a template definition, e.g. to allow an argument + to contain a whitespace. Also simple nesting of templates is + possible this way. + + Here are some examples of template definitions: + + template0 $\1\2 + template1 \1: ${fs_used \2} / ${fs_size \2} + template2 \1 \2 + + The following list shows sample usage of the templates defined + above, with the equivalent syntax when not using any template at + all: + + using template same without template + ───────────────────────────────────────────────────────────────────────────────── + ${template0 node name} $nodename + ${template1 root /} root: ${fs_free /} / + ${fs_size /} + ${template1 ${template2\ disk\ root} /} disk root: ${fs_free /} / ${fs_size /} + + + time (format) + Local time, see man strftime to get more information about for‐ + mat + + + utime (format) + Display time in UTC (universal coordinate time). + + + tztime (timezone) (format) + Local time for specified timezone, see man strftime to get more + information about format. The timezone argument is specified in + similar fashion as TZ environment variable. For hints, look in + /usr/share/zoneinfo. e.g. US/Pacific, Europe/Zurich, etc. + + + totaldown net + Total download, overflows at 4 GB on Linux with 32-bit arch and + there doesn't seem to be a way to know how many times it has al‐ + ready done that before conky has started. + + + top type, num + This takes arguments in the form:top (name) (number) Basically, + processes are ranked from highest to lowest in terms of cpu us‐ + age, which is what (num) represents. The types are: "name", + "pid", "cpu", "mem", "mem_res", "mem_vsize", and "time". There + can be a max of 10 processes listed. + + + top_mem type, num + Same as top, except sorted by mem usage instead of cpu + + + top_time type, num + Same as top, except sorted by total CPU time instead of current + CPU usage + + + totalup net + Total upload, this one too, may overflow + + + updates Number of updates + for debugging + + + upspeed net + Upload speed in KiB + + + upspeedf net + Upload speed in KiB with one decimal + + + upspeedgraph ("normal"|"log") (height),(width) (gradient colour 1) + (gradient colour 2) (scale) (net) + Upload speed graph, colours defined in hex, minus the #. If + scale is non-zero, it becomes the scale for the graph. Uses a + logarithmic scale (to see small numbers) when you use "log" in‐ + stead of "normal". + + + uptime Uptime + + + uptime_short + Uptime in a shorter format + + + user_number + Number of users logged in + + + user_names + Lists the names of the users logged in + + + user_terms + Lists the consoles in use + + + user_times + Lists how long users have been logged in for + + + voffset (pixels) + Change vertical offset by N pixels. Negative values will cause + text to overlap. See also $offset. + + + voltage_mv (n) + Returns CPU #n's voltage in mV. CPUs are counted from 1. If + omitted, the parameter defaults to 1. + + + voltage_v (n) + Returns CPU #n's voltage in V. CPUs are counted from 1. If omit‐ + ted, the parameter defaults to 1. + + + wireless_essid net + Wireless access point ESSID (Linux only) + + + wireless_mode net + Wireless mode (Managed/Ad-Hoc/Master) (Linux only) + + + wireless_bitrate net + Wireless bitrate (ie 11 Mb/s) (Linux only) + + + wireless_ap net + Wireless access point MAC address (Linux only) + + + wireless_link_qual net + Wireless link quality (Linux only) + + + wireless_link_qual_max net + Wireless link quality maximum value (Linux only) + + + wireless_link_qual_perc net + Wireless link quality in percents (Linux only) + + + wireless_link_bar (height), (width) net + Wireless link quality bar (Linux only) + + + words textfile + Displays the number of words in the given file + + + xmms2_artist + Artist in current XMMS2 song + + + xmms2_album + Album in current XMMS2 song + + + xmms2_title + Title in current XMMS2 song + + + xmms2_genre + Genre in current XMMS2 song + + + xmms2_comment + Comment in current XMMS2 song + + + xmms2_url + Full path to current song + + + xmms2_tracknr + Track number in current XMMS2 song + + + xmms2_bitrate + Bitrate of current song + + + xmms2_id + XMMS2 id of current song + + + xmms2_duration + Duration of current song + + + xmms2_elapsed + Song's elapsed time + + + xmms2_size + Size of current song + + + xmms2_percent + Percent of song's progress + + + xmms2_date + Returns song's date. + + + xmms2_playlist + Returns the XMMS2 playlist. + + + xmms2_timesplayed + Number of times a song was played (presumably). + + + xmms2_status + XMMS2 status (Playing, Paused, Stopped, or Disconnected) + + + xmms2_bar (height),(width) + Bar of XMMS2's progress + + + xmms2_smart + Prints the song name in either the form "artist - title" or file + name, depending on whats available + + + if_xmms2_connected + Display everything between $if_xmms2_connected and the matching + $endif if xmms2 is running. + + + sony_fanspeed + Displays the Sony VAIO fanspeed information if sony-laptop ker‐ + nel support is enabled. Linux only. + + + eve api_userid api_key character_id + Fetches your currently training skill from the Eve Online API + servers (http://www.eve-online.com/) and displays the skill + along with the remaining training time. + + + endif Ends an $if block. + + +EXAMPLES + conky -t '${time %D %H:%M}' -o -u 30 + Start Conky in its own window with date and clock as text and 30 + sec update interval. + + conky -a top_left -x 5 -y 500 -d + Start Conky to background at coordinates (5, 500). + +FILES + ~/.conkyrc default configuration file + +BUGS + Drawing to root or some other desktop window directly doesn't work with + all window managers. Especially doesn't work well with Gnome and it has + been reported that it doesn't work with KDE either. Nautilus can be + disabled from drawing to desktop with program gconf-editor. Uncheck + show_desktop in /apps/nautilus/preferences/. There is -w switch in + Conky to set some specific window id. You might find xwininfo -tree + useful to find the window to draw to. You can also use -o argument + which makes Conky to create its own window. If you do try running Conky + in its own window, be sure to read up on the own_window_type settings + and experiment. + +SEE ALSO + ⟨http://conky.sourceforge.net/⟩ + + ⟨http://www.sourceforge.net/projects/conky⟩ + + #conky on irc.freenode.net + +COPYING + Copyright (c) 2005-2009 Brenden Matthews, Philip Kovacs, et. al. Any + original torsmo code is licensed under the BSD license (see LICENSE.BSD + for a copy). All code written since the fork of torsmo is licensed un‐ + der the GPL (see LICENSE.GPL for a copy), except where noted different‐ + ly (such as in portmon code, timed thread code, and audacious code + which are LGPL, and prss which is an MIT-style license). + +AUTHORS + The Conky dev team (see AUTHORS for a full list of contributors). + + + + 2009-05-01 conky(1) diff --git a/configure.ac.in b/configure.ac.in index c2c911b6..87020350 100644 --- a/configure.ac.in +++ b/configure.ac.in @@ -613,6 +613,15 @@ AC_CHECK_HEADER(zlib.h, [AC_MSG_ERROR([zlib is missing; please install the headers first])]) +dnl +dnl Check for OpenMP support +dnl + +AX_OPENMP([ + AC_DEFINE(HAVE_OPENMP,1,[Define if OpenMP is enabled]) + CFLAGS="$CFLAGS $OPENMP_CFLAGS" +]) + dnl dnl Check doc stuff dnl @@ -626,7 +635,6 @@ else AM_CONDITIONAL(HAVE_DOCSTUFF, true) fi - dnl dnl kstat in Solaris dnl diff --git a/m4/ax_openmp.m4 b/m4/ax_openmp.m4 new file mode 100644 index 00000000..492675dd --- /dev/null +++ b/m4/ax_openmp.m4 @@ -0,0 +1,98 @@ +# =========================================================================== +# http://www.nongnu.org/autoconf-archive/ax_openmp.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_OPENMP([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro tries to find out how to compile programs that use OpenMP a +# standard API and set of compiler directives for parallel programming +# (see http://www-unix.mcs/) +# +# On success, it sets the OPENMP_CFLAGS/OPENMP_CXXFLAGS/OPENMP_F77FLAGS +# output variable to the flag (e.g. -omp) used both to compile *and* link +# OpenMP programs in the current language. +# +# NOTE: You are assumed to not only compile your program with these flags, +# but also link it with them as well. +# +# If you want to compile everything with OpenMP, you should set: +# +# CFLAGS="$CFLAGS $OPENMP_CFLAGS" +# #OR# CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS" +# #OR# FFLAGS="$FFLAGS $OPENMP_FFLAGS" +# +# (depending on the selected language). +# +# The user can override the default choice by setting the corresponding +# environment variable (e.g. OPENMP_CFLAGS). +# +# ACTION-IF-FOUND is a list of shell commands to run if an OpenMP flag is +# found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is +# not found. If ACTION-IF-FOUND is not specified, the default action will +# define HAVE_OPENMP. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +AC_DEFUN([AX_OPENMP], [ +AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX + +AC_CACHE_CHECK([for OpenMP flag of _AC_LANG compiler], ax_cv_[]_AC_LANG_ABBREV[]_openmp, [save[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS +ax_cv_[]_AC_LANG_ABBREV[]_openmp=unknown +# Flags to try: -fopenmp (gcc), -openmp (icc), -mp (SGI & PGI), +# -xopenmp (Sun), -omp (Tru64), -qsmp=omp (AIX), none +ax_openmp_flags="-fopenmp -openmp -mp -xopenmp -omp -qsmp=omp none" +if test "x$OPENMP_[]_AC_LANG_PREFIX[]FLAGS" != x; then + ax_openmp_flags="$OPENMP_[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flags" +fi +for ax_openmp_flag in $ax_openmp_flags; do + case $ax_openmp_flag in + none) []_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[] ;; + *) []_AC_LANG_PREFIX[]FLAGS="$save[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flag" ;; + esac + AC_TRY_LINK_FUNC(omp_set_num_threads, + [ax_cv_[]_AC_LANG_ABBREV[]_openmp=$ax_openmp_flag; break]) +done +[]_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[]FLAGS +]) +if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" = "xunknown"; then + m4_default([$2],:) +else + if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" != "xnone"; then + OPENMP_[]_AC_LANG_PREFIX[]FLAGS=$ax_cv_[]_AC_LANG_ABBREV[]_openmp + fi + m4_default([$1], [AC_DEFINE(HAVE_OPENMP,1,[Define if OpenMP is enabled])]) +fi +])dnl AX_OPENMP + diff --git a/src/conky.c b/src/conky.c index 3be9d86b..020eb4e0 100644 --- a/src/conky.c +++ b/src/conky.c @@ -5090,7 +5090,7 @@ static inline int get_string_width_special(char *s) char *p, *final; int idx = 1; int width = 0; - unsigned int i; + long i; if ((output_methods & TO_X) == 0) { #endif @@ -5109,7 +5109,7 @@ static inline int get_string_width_special(char *s) if (*p == SPECIAL_CHAR) { /* shift everything over by 1 so that the special char * doesn't mess up the size calculation */ - for (i = 0; i < strlen(p); i++) { + for (i = 0; i < (long)strlen(p); i++) { *(p + i) = *(p + i + 1); } if (specials[special_index + idx].type == GRAPH diff --git a/src/conky.h b/src/conky.h index 3bd82ea8..8d1cbc85 100644 --- a/src/conky.h +++ b/src/conky.h @@ -228,11 +228,11 @@ struct information { float *cpu_usage; /* struct cpu_stat cpu_summed; what the hell is this? */ unsigned int cpu_count; - unsigned int cpu_avg_samples; + int cpu_avg_samples; - unsigned int net_avg_samples; + int net_avg_samples; - unsigned int diskio_avg_samples; + int diskio_avg_samples; float loadavg[3]; diff --git a/src/linux.c b/src/linux.c index 4703304f..613d4538 100644 --- a/src/linux.c +++ b/src/linux.c @@ -405,9 +405,12 @@ void update_net_stats(void) curtmp1 = 0; curtmp2 = 0; // get an average - for (i = 0; (unsigned) i < info.net_avg_samples; i++) { - curtmp1 += ns->net_rec[i]; - curtmp2 += ns->net_trans[i]; +#ifdef HAVE_OPENMP +#pragma omp parallel for +#endif /* HAVE_OPENMP */ + for (i = 0; i < info.net_avg_samples; i++) { + curtmp1 = curtmp1 + ns->net_rec[i]; + curtmp2 = curtmp2 + ns->net_trans[i]; } if (curtmp1 == 0) { curtmp1 = 1; @@ -418,6 +421,9 @@ void update_net_stats(void) ns->recv_speed = curtmp1 / (double) info.net_avg_samples; ns->trans_speed = curtmp2 / (double) info.net_avg_samples; if (info.net_avg_samples > 1) { +#ifdef HAVE_OPENMP +#pragma omp parallel for +#endif /* HAVE_OPENMP */ for (i = info.net_avg_samples; i > 1; i--) { ns->net_rec[i - 1] = ns->net_rec[i - 2]; ns->net_trans[i - 1] = ns->net_trans[i - 2]; @@ -592,7 +598,7 @@ inline static void update_stat(void) static int rep = 0; static struct cpu_info *cpu = NULL; char buf[256]; - unsigned int i; + int i; unsigned int idx; double curtmp; const char *stat_template = NULL; @@ -664,8 +670,11 @@ inline static void update_stat(void) cpu[idx].cpu_last_active_total) / (float) (cpu[idx].cpu_total - cpu[idx].cpu_last_total); curtmp = 0; +#ifdef HAVE_OPENMP +#pragma omp parallel for reduction(+:curtmp) +#endif /* HAVE_OPENMP */ for (i = 0; i < info.cpu_avg_samples; i++) { - curtmp += cpu[idx].cpu_val[i]; + curtmp = curtmp + cpu[idx].cpu_val[i]; } /* TESTING -- I've removed this, because I don't think it is right. * You shouldn't divide by the cpu count here ... @@ -681,6 +690,9 @@ inline static void update_stat(void) cpu[idx].cpu_last_total = cpu[idx].cpu_total; cpu[idx].cpu_last_active_total = cpu[idx].cpu_active_total; +#ifdef HAVE_OPENMP +#pragma omp parallel for +#endif /* HAVE_OPENMP */ for (i = info.cpu_avg_samples - 1; i > 0; i--) { cpu[idx].cpu_val[i] = cpu[idx].cpu_val[i - 1]; } @@ -794,6 +806,9 @@ static int get_first_file_in_a_directory(const char *dir, char *s, int *rep) strncpy(s, namelist[0]->d_name, 255); s[255] = '\0'; +#ifdef HAVE_OPENMP +#pragma omp parallel for +#endif /* HAVE_OPENMP */ for (i = 0; i < n; i++) { free(namelist[i]); } @@ -1454,6 +1469,9 @@ void init_batteries(void) if (batteries_initialized) { return; } +#ifdef HAVE_OPENMP +#pragma omp parallel for +#endif /* HAVE_OPENMP */ for (idx = 0; idx < MAX_BATTERY_COUNT; idx++) { batteries[idx][0] = '\0'; }