Fork me on Github
Fork me on Github

Joe Dog Software

Proudly serving the Internets since 1999

Wackyd Manual

Introduction ^

wackyd is a notification daemon. It implements the WACKY/1.0 protocol while listening for connections and parsing client patterns. The pattern sent by the client is a coded message for wackyd. That message tells Wackyd how to blink the keyboard lights on your extended keyboard. While wackyd is not notifying you, it makes your keyboard lights blink in the Knight Rider pattern. The inspiration for the pattern comes from the terrible American television show, Knight Rider, which starred the equally bad David Hasselhoff. And so it goes.

The most significant single benefit of wackyd is that notification events are removed from the screen and placed on the keyboard, where they persist until you take action or a client clears the event. If you hate pop-up menus and want to know what’s going on even when your screen saver is on, Wackyd is for you. I fit that category, and personally, I love this program.

Invocation ^

The format for invoking wackyd is this: wackyd “host.domain.com”. This sends it to the background and starts blinking your lights in the default pattern, and it binds a listener to host.domain.com, which listens for requests on port 9193. That pattern looks like this: xoo,oxo,oox,oxo, but more on that later…. The program also supports the following command-line options:

‘ -v ‘
‘ –version’
VERSION, prints version information to the screen.

‘ -h ‘
‘ –help’
HELP, prints the help section. This summarizes the options discussed in this section of the manual.

‘ -C ‘
‘ –config’
This option displays the current wackyd configuration.

‘ -s NUM ‘
‘ –speed=NUM’
SPEED, this option changes the default blinking speed from 3 to NUM.

‘ -k ‘
‘ –kill’
KILL, shuts down an instance of wackyd which is already running. This option relies on a two pid files in PREFIX/var/run.

Protocol ^

WACKY/1.0 is an application-level protocol for distributed notification systems. The protocol transmits extended keyboard blinking patterns to a wackyd. The keyboard patterns are comprised of a series of comma-separated commands. Each series represents a keyboard blink combination consisting of x's, o’s, and an integer. A command string looks like this: [xo][xo][xo][1-9],[repeat as necessary]. The brackets are NOT part of the protocol; they are used here to illustrate the positions of a command segment. Each of the first three positions is filled with exactly one character, an ‘x’ or an ‘o.’ The fourth position is optional, and it is filled with an integer. That number represents blinking speed in microseconds. The default value is 3.

Wackyd, a program that implements the WACKY protocol, uses a default pattern when not sending a notification. In the WACKY protocol, that pattern is represented as xoo3, oxo3, oox3, oxo3. When implemented by WACKY, this pattern causes the LED keyboard lights to rotate like the KITT's computer in the bad American television show, Knight Rider. Next, we’ll examine that pattern in more detail.

In the WACKY protocol, the x’s represent LED on while the o’s represent LED off. The fourth position in a command segment is reserved for an optional number. That number is an integer that determines the LED blink interval in microseconds. The default value is 3. Therefore, this pattern: xoo,oxo,oox,oxo is the same as the default pattern shown above.

WACKY/1.0 Illustrated ^

Nothing demonstrates a protocol like a telnet session. In this chapter, we are going to telnet to a wackyd and manually execute the protocol:

Ben: $ telnet ben 9193
Trying 172.16.24.1...
Connected to ben.
Escape character is '^]'.
WACKY/1.0 xxx,ooo
Connection closed by foreign host.

Now ben's keyboard lights are blinking ALL_ON, ALL_OFF. In the words of Steve Jobs, “insanely great!” Now, let’s examine other features of the protocol. If you want a message to accompany the keyboard blinks, then you can include it on a separate line. WACKY/1.0 dictates that the server read from the socket until the client sends two returns ( ). Here we send a different pattern along with a message:

Ben: $ telnet ben 9193
Trying 172.16.24.1...
Connected to ben.
Escape character is '^]'.
WACKY/1.0 xxo5,ooo5
MESSAGE: You have more than 5 messages in your mailbox.
Connection closed by foreign host.

The message is logged via syslog. Another directive in the WACKY/1.0 protocol is PRIORITY: [0-9], which allows the wackyd to prioritize the blinking pattern. This means that if wackyd is forced to handle multiple events, it assigns keyboard lights to the one with the highest priority. If ALL_HELL_IS_BREAKING_LOOSE and YOU_HAVE_MAIL are both in the queue, the ALL_HELL_BREAKING_LOOSE pattern will take priority, assuming you set it so.
(Well, you never know, mail is essential.)

NOTE: This feature will be available in wackyd 2.0 final. It is not currently in the beta version.

Availability ^

The latest version of wackyd is available for download at download.joedog.org.

Platforms ^

GNU/Linux( i[56]86-pc-linux-gnu ) Wacky Lights for Linux were initially developed on SuSE GNU/Linux with gcc, hence the name. [No additional ports are planned at this time. ]

Authors ^

Jeffrey Fulmer — Designed and implemented Wackyd at home in his spare time, a fact that clearly places him in the category “nerds.” When he’s not performing stupid code tricks, he’s been known to walk Pommie, his English Bulldog.

License Information ^

Please consult the file COPYING for complete license information.

Copyright (C) 2001-2012 Jeffrey Fulmer

Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and this permission notice are preserved, thus giving the recipient permission to redistribute in turn. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last changed them.