This project was started in
response to a post on the freedesktop.org xdg mailing list.
It provides a service for monitoring scanner buttons and sharing across a network - however,
unlike other similar programs which monitor scanner buttons, instead of directly running a
command, it emits a D-BUS signal which can then be used by GNOME Volume Manager or the KDE
equivalent. Similar to saned, it also supports accessing remote scanners through RPC, but
does not require inetd or xinetd, and so is better suited for desktop systems.
As of version 0.0.4, button monitoring is
mostly finished but untested, and the networking
still needs to be added. See the TODO file in the source package. Since it won't do anything
useful to most people right now, I wouldn't recommend using "make install".
When started, the daemon (imcapd) acquires
the org.freedesktop.ImageCapture name on the D-BUS
session bus and exports the /org/freedesktop/ImageCapture object for methods and signals. It
first acquires a list of scanners through SANE and checks for any scanner buttons (options which
start with "button-"), then wakes up every 2 seconds to scan any active buttons. If any buttons
have been pressed, it emits the "ButtonPressed" D-BUS signal with the button name (set by the
scanner's SANE driver) as an argument.
It runs completely on-demand, registering as a D-BUS autostart service, and exiting after 20
seconds of inactivity if there are no buttons to monitor. Since some SANE drivers only allow
one connection at a time to a device, it also allows monitoring to be temporarily disabled for
certain devices through the "ReleaseDevice" method, which closes the connection to the device
specified as an argument, but leaves it in the internal button list, ready to be reactivated
with the "ReclaimDevice" method. See the dbus_api file in the docs directory of the source
package for details.
To keep track of hardware changes as scanners are added or removed, it can be registered as a
HAL callout (the Makefile doesn't do this yet, so if you want it to do this you'll need to add
a link from /etc/hal/device.d to the imcapd binary manually). When HAL detects a device hotplug
or removal, it runs imcapd, which either starts normally and checks if the new device is a
scanner, or if another instance is already running, sends it a "RescanDevices" signal to force
it to rescan for available buttons.
SourceForge project page for downloads, the bug tracker, news,
To compile, you'll need a development version of D-BUS > 0.93. HAL isn't required but is very
useful for detecting scanner hotplugging.
Code by Donald Straney (burntfuse [AT] gmail.com)
Build system, advice, ideas, etc. by Etienne Bersac
Thanks to SourceForge for hosting this project!