Dzen
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 window manager."
Installation
Install the dzen2 package, which includes Xft, XPM, and Xinerama support.
Usage
Dzen receives string from a pipe and output it graphically, this fact makes dzen scriptable in any language. Example:
$ echo "Hello World" | dzen2 -p
Options
Dzen has a lot of options. The following list explains some of them:
-
-fg
Foreground color. -
-bg
Background color. -
-fn
Font. -
-ta
Align the title window content, l(eft), c(enter), r(ight). -
-tw
Width of the title window. -
-sa
Align the slave window content. See-ta
. -
-l
Number of lines in the slave window. -
-e
Events and action. -
-m
Menu mode. -
-u
Update contents of title and slave window simultaneously. -
-p
Persist EOF (optional timeout in seconds). -
-x
X position . -
-y
Y position . -
-h
Height of the line (default: fontheight + 2 pixels). -
-w
Width of the window. -
-v
Version.
-u
option is deprecated.Making a pop-up with dzen
The following code will open a dzen window in the top right corner of the screen. It will have a width of 100px, a height of 15px with a black foreground and white background (right button click to close dzen).
$ seq 1 3 | dzen2 -p -w '100' -h '15' -fg '#000000' -bg '#FFFFFF'
Note that the window is with the number 3 in the middle, try to run the same code with -l
option.
$ seq 1 3 | dzen2 -p -w '100' -h '15' -fg '#000000' -bg '#FFFFFF' -l '2'
Now when you hover the mouse through the dzen it will uncollapse the slave window. If you click on the lines in the slave window nothing will happen, try to use the -m
option.
$ seq 1 3 | dzen2 -p -w '100' -h '15' -fg '#000000' -bg '#FFFFFF' -l '2' -m
Now if you click on the lines it will print the numbers in your terminal. This feature is useful to make menus.
But if you want to center the numbers and align the title to the left, you will need the options: -sa
and -ta
.
$ seq 1 3 | dzen2 -p -w '100' -h '15' -fg '#000000' -bg '#FFFFFF' -l '2' -m -ta 'l' -sa 'c'
Configuration
Dzen is able to read font and color settings from X resources. As an example, you can add following lines to ~/.Xresources
:
dzen2.font: -*-fixed-*-*-*-*-*-*-*-*-*-*-*-* dzen2.foreground: #22EE11 dzen2.background: black
Tips and tricks
Using custom fonts with dzen
Dzen follows the X Logical Font Description, so it will only find fonts in the X font path. See Fonts#Older applications for details.
Dzen and Conky
Conky can be used to pipe information directly to dzen for output in a status bar. This can be done with conky and conky-cliAUR, a stripped-down version of the Conky status utility.
The following example displays the average load values in red and the current time in the default dzen foreground colour:
~/.conkyrc
conky.config = { background = false , out_to_console = true , out_to_x = false , update_interval = 1.0 , total_run_times = 0 , use_spacer = none } conky.text = [[^fg(\#ff0000)${loadavg 1 2 3} ^fg()${time %a %b %d %I:%M%P}]]
~/bin/dzconky
#!/bin/sh FG='#aaaaaa' BG='#1a1a1a' FONT='-*-terminus-*-r-normal-*-*-120-*-*-*-*-iso8859-*' conky | dzen2 -e - -h '16' -w '600' -ta r -fg $FG -bg $BG -fn $FONT &
Simply execute dzconky
in your startup scripts.
Clickable areas and popups
dzen2 allows you to define clickable areas using ^ca(button, command)Text^ca()
.
You can use this property to create popups giving arbitrary information, as seen in various screenshot gifs like this.
A simple example can be:
sysinfo_popup.sh
#/bin/bash #A simple popup showing system information HOST=$(uname -n) KERNEL=$(uname -r) UPTIME=$( uptime | sed 's/.* up //' | sed 's/[0-9]* us.*//' | sed 's/ day, /d /'\ | sed 's/ days, /d /' | sed 's/:/h /' | sed 's/ min//'\ | sed 's/,/m/' | sed 's/ / /') PACKAGES=$(pacman -Q | wc -l) UPDATED=$(awk '/upgraded/ {line=$0;} END { $0=line; gsub(/[\[\]]/,"",$0); \ printf "%s %s",$1,$2;}' /var/log/pacman.log) ( echo "System Information" # Fist line goes to title # The following lines go to slave window echo "Host: $HOST " echo "Kernel: $KERNEL" echo "Uptime: $UPTIME " echo "Pacman: $PACKAGES packages" echo "Last updated on: $UPDATED" ) | dzen2 -p -x "500" -y "30" -w "220" -l "5" -sa 'l' -ta 'c'\ -title-name 'popup_sysinfo' -e 'onstart=uncollapse;button1=exit;button3=exit' # "onstart=uncollapse" ensures that slave window is visible from start.
Save this script and make it executable and then use the ^ca()
attribute in your conkyrc (or the script that you pipe to dzen2) to trigger it.
^ca(1,<path to your script>)Sysinfo^ca()
This will bind the script to mouse button 1 and execute it when it is clicked over the text.
Gadgets
There are some gadgets on dzen that may be used to make a good customize. Follow below some of they with a brief explanation and examples.
dbar
Dbar receive a pipe from another command with any number and outputs a semi-graphical progress bar with it, by default the max number of 100% is 100
. The maximum and minimum values can be changed with -max
/-min
respectively.
Output example:
50% [============= ]
Code example:
~/test
#!/bin/sh ( amixer get Master | \ awk '/Left:/{gsub(/[[:punct:]]/,"",$5);left=$5} /Right:/{gsub(/[[:punct:]]/,"",$5);right=$5} END {print left ORS right}' ) | dbar -max 100 -min 0 -s '|' -l 'Vol'
See README.dbar for details.
gdbar
Gdbar as well as dbar outputs a progress bar based on a value of 100%, but here it is full-graphical. Gdbar have the same options of dbar with some additional options. Some of the options are:
-
-fg
set the foreground. -
-bg
set the background. -
-w
/-h
set the width and height respectively.
Code example:
~/test
#!/bin/sh ( amixer get Master | \ awk '/Left:/{gsub(/[[:punct:]]/,"",$5);left=$5} /Right:/{gsub(/[[:punct:]]/,"",$5);right=$5} END{print left ORS right}' ) | gdbar -max 100 -min 0 -l 'Vol ' -bg '#777777' -fg '#00ff00' -ss '2' | dzen2 -p -l '1' -w '150' -y '100' -x '100' -ta c -sa c -e 'onstartup=uncollapse;button3=exit'
See README.gdbar for details.
Others
Information about others gadgets can be found here.
See also
- Official website, wiki, and source
Forum threads
- 2007-12-04 - Arch Linux - dzen & xmobar Hacking Thread