``cinnamon-settings-daemon`` is a collection of plugins.

These plugins are started by ``cinnamon-session`` when you log in.

The plugins run in the background, each with its own process.


PLUGINS
=======

Here is a description of each plugin.

a11y-settings
-------------

automount
---------

background
----------

clipboard
---------

Xorg features two ways of copying and pasting content. The first one is ``X-clipboard``, which is commonly used in edit menus and when using ``Ctrl+C`` and ``Ctrl+V``. The second one is ``X-selection`` which is used when selecting content with the mouse and pasting it with a middle-click.

When you copy content from a window, that content is available either in ``X-clipboard`` or ``X-selection`` until the application which owns that window is terminated.

This plugin keeps the content of ``X-clipboard`` in memory, so that even if the owner application exits, the content continues to be available.

color
-----

common
------

datetime
--------

dummy
-----

This is a dummy plugin. It doesn't do anything.

housekeeping
------------

**thumbnail cache**

The thumbnail cache is cleaned up according to the settings stored in ``org.cinnamon.desktop.thumbnail-cache``.

This is done 2 minutes after login and then once each day.

**low disk space**

Every minute, the plugin checks the mounted volume to see if they have low disk space, according to the settings stored in ``org.cinnamon.settings-daemon.plugins.housekeeping``.

The plugin shows a notification when a volume is full.

keyboard
--------

This plugin handles the keyboard.

**keyboard settings**

It reads and listens to the ``org.cinnamon.settings-daemon.peripherals.keyboard`` settings and applies the configuration.

**numlock state**

It also listens to the state of the numlock key and saves it in the settings to ensure the state is remembered and preserved for the next session.

**keyboard layout**

The layout selection is done in the ``cinnamon-control-center`` ``region`` plugin (which is presented to the user in the ``cinnamon-settings`` ``keyboard`` module). That configuration is set directly via ``gkbd`` (``libgnomekbd``) and ``xkl`` (``libxklavier``). This plugin reads and listens to that configuration and assigns it to the keyboard.

**hotplug command**

Although it isn't configured by default or used by ``cinnamon-settings``, when a keyboard is plugged in, or removed, this plugin executes the command specified in ``org.cinnamon.settings-daemon.peripherals.input-devices hotplug-command`` with a series of arguments to specify the event type, the device, etc.

An example script which can be used for such a command is available in ``plugins/common/input-device-example.sh``.

media-keys
----------

power
-----

print-notifications
-------------------

This plugin shows printer notifications.

On DBUS, it listens to events on ``org.cups.cupsd.Notifier``.

``libnotify`` is used to show the notifications.

screensaver-proxy
-----------------

smartcard
---------

wacom
-----

This plugin handles Wacom tablets.

It reads and listens to the ``org.cinnamon.settings-daemon.peripherals.wacom`` and applies the configuration in X11.

xsettings
---------

This plugin sets the settings for GTK and Xft.


TESTING
=======

To test a plugin:

1. Kill the running CSD plugin
2. Build the project
3. Run the built plugin in verbose mode

For example:

* ``killall csd-sound`` (you might have to kill it twice, if CSM tries to restart it)
* ``dpkg-buildpackage``
* ``plugins/sound/csd-sound --verbose``


TODO
====

- Remove custom keybinding code (we handle that in Cinnamon now) - do we want to handle media keys in cinnamon also?  Would get around the 'no meta keys while a menu is open' issue.
- Switch to Gnome's keyboard layout (gsettings) handler - basically reverting Ubuntu's patch for this.  This will allow us to implement ibus popups directly in Cinnamon
- Look into backgrounds - we should be able to eliminate the background manager in the cinnamon gnome 3.8 compat rollup, and continue to handle backgrounds as we currently do
- Investigate:  How to keep gnome-settings-daemon from autostarting.  It checks for environment=GNOME... which means Cinnamon also - is it time to have our own freedesktop.org name?

-- Update on this: Setting session name to Cinnamon works - then add to main.c in cinnamon, to set XDG_CURRENT_DESKTOP=GNOME makes sure apps keep showing up

- Multiple backgrounds on multiple monitors

- /etc/acpi/powerbtn.sh - add cinnamon-settings-daemon to script - how? postinst?

