CAPS Universe documentation  1.0.4
All you need to know to be successful
Installation Manual

How to install all CAPS universe components to you system.

Find here a collection of information about how to install the CAPS universe onto your computer.

Run-time Directory Structure

The CAPS universe components have some run-time requirements into the filesystem.

Installation Preparation

Build the CAPS universe Components from Source

Installing from source is the method described here. You can get the sources via two ways:

Installation from Repository Resources

Installation from Archive Resources

Build and Install Order of Shared Components

Installing CAPS universe requires some base shared libraries to be installed first. The following list defines all of those shared libraries and - more important - its build order as well. Some of them have their own dependencies to the outer world.

libcapsbase: the big bang of the CAPS universe

The libcapsbase is the first library for the CAPS universe. It handles some basic things like message filtering and filesystem paths used by all CAPS universe components. This library is used by almost all other CAPS universe components.

  • it handles textual output of all other CAPS universe components and thus, can be used to handle it in any special way (filtering via verbosity level for example, refer Message macros for details). Since almost all other CAPS universe components are using this library, the textual output verbosity level can be set individually for each component.
  • it is used to provide all kind of filesystem paths for all other CAPS universe components as well (refer Helper functions for details). Due to this, the other CAPS universe components don't need any individual filesystem path setup, they ask libcapsbase instead.
  • additionally it handles severe failures at one central point. This includes to abort its caller to force a coredump for post mortem analysis (refer Failure reporting/handling for details). It also creates stacktraces for architectures which supports this feature.
  • it has a dependency to a generic C library and to libsystemd on demand (for logging purposes)

Install libcapsbase

libcapstable: Dynamic Arrays

The libcapstable provides a dynamic array implementation for all kind of data. Other libraries of the CAPS universe makes use of it.

This library requires libcapsbase.

Install libcapstable

libcapsinif: Dealing with INI Files

The libcapsinif provides a key/value store feed by a textual INI file.

It can merge multiple INI files into one key/value store. Merging can happen by overlaying (e.g. existing settings can be replaced by the next INI file) or keeping all INI file content separate in the key/value store. The former will be used for cascading configuration INI files, the latter one to read in INI file based databases (list of installed printer drivers for example)

All applications can retrieve settings from this key/value store and acting accordingly.

This library requires libcapsbase and libcapstable.

Install libcapsinif

libcapsmime: MIME type detection

The libcapsmime provides an API for MIME type detection. It can use libmagic for this job or - if libmagic isn't available - can check for a couple of file types by itself.

This library requires libcapsbase and libmagic (on demand).

Install libcapsmime

libcapsppd: dealing with PPD files

The libcapsppd deals with PPD files (aka. Postscript Printer Description).

PPD files are created on the fly from a generic printer description (refer caps_ppd_base).

The other way round it can also read in a PPD file and provides its content in a key/value store manner.

This library requires libcapsbase, libcapstable, libcapsinif and libpaper.

The Idea behind libcapsppd

Install libcapsppd

CAPS Printing Coordinator

The Printing Coordinator is the main application in the CAPS universe. It manages available printing devices (aka printing providers) and offers their information to clients via DBUS.

The other way round, it accepts print jobs from clients and forwards them to the dedicated (and online) printing devices.

Neither the client, nor the printing device need to know how to communicate with the Printing Coordinator. Both use their own library to deal with it:

Client Side

The client side are all kind of applications which want to print something. They can retrieve the list of available printers, query their capabilities, send print job to it and track the print job's status to keep the user informed about any print progress.

Printer Device Side

At the printer device side self hosted printer drivers run - one individual process per printer device. Each process has full control over its own printer device, checks its state, receives print jobs from the printing coordinator, processes them and finally sends the resulting printing data to the printer device. And it reports all printer device state changes to the printing coordinator to keep the clients e.g. the user informed.

It requires libcapsbase, libcapstable, libcapsinif, libcapsppd and libdbus and libsystemd.

Note
In order to build this package DBUS and systemd development libraries must be present.
On my system the packages libdbus-1-dev and libsystemd-dev from the distribution are required.

Install Printing Coordinator

CAPS Printing System Integration

The CAPS Printing System Integration brings in the tools to launch printer drivers if their corresponding device occurs in the system (e.g. is online).

USB based printers

Currently only USB based printers are supported. Such a printer offers its unique VID/PID (aka Vendor ID and Product ID) to the system and this information is used to identify its corresponding driver via the Device Description INI files in the CAPS Printer Driver Database Directory.

It maintains a database in CAPS Printer Device Database Directory of already known printing devices to be able to configure them in a persistent manner.

It requires libcapsbase, libcapsinif, libcapsprovider, libudev and libsystemd.

Note
In order to build this package the UDEV development libraries must be present and systemd in general.
On my system the package libudev-dev from the distribution is required.
Printer drivers in the CAPS universe are self-sustaining and just need a connection to the CAPS Printing Coordinator at one side and their printer device at the other side. Thus, this package is a reference implementation how to manage and launch printer drivers. Feel free to add more launch methods for printers using different interfaces than USB (e.g. serial, network, …).

Install Printing System Integration

libcapsraster: rasterizing documents

The libcapsraster provides an API to rasterize various document formats in order to convert them into the printer's wire data format by an printing provider.

This library requires libcapsbase, libcapstable, libcapsprovider, libcapsppd and libcapsmime.

Depending on the supported document formats further external libraries are required to rasterize:

  • PDF (aka. Portable Document Format)
    muPDF (at least version 1.0.0)
  • (externally) prerasterized print data
    libcups
Note
In order to build libcapsraster, the packages muPDF and/or CUPS must be present.
On my system the packages libcups2-dev are required for CUPS raster. For muPDF refer PDF rasterizer.

Install libcapsraster

libcapsdriver: Printer Driver Framework

The libcapsdriver is a framework and a collection of helper functions to simplify printer driver development, since it hides all the communication, rasterization and reporting details of the CAPS universe.

This library requires libcapsbase, libcapsprovider, libcapsraster and libcapsppd

Install libcapsdriver

CAPS Printer Driver Collection

The CAPS Printer Driver Collection is one package which supports printer devices from various vendors.

This package requires the full CAPS universe to already be installed.

Install the Printer Driver Collection

Dependencies to outer space

System Requirements

Linux Kernel Requirements