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 their own process.

Plugins:
========

Here's a description of each plugin.

a11y-keyboard
-------------

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 using ``Ctrl+C`` and ``Ctrl+V``. The second one is ``X-selection`` which is used by 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
------

cursor
------

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 a 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 cinnamon-control-center's region plugin (which is presented to the user in 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 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, the plugin executes the command specified in ``org.cinnamon.settings-daemon.peripherals.input-devices hotplug-command`` with a series of argument 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
----------

mouse
-----

This plugin handles mice and touchpads.

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

This plugin supports synaptics and libinput devices.

orientation
-----------

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
---------

sound
-----

This plugin is use to play sound files or theme sounds via PulseAudio.

It's available via dbus at ``org.cinnamon.SettingsDaemon.Sound``.

Its configuration is ``org.cinnamon.desktop.sound``.

wacom
-----

This plugin handles wacom tablets.

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

xrandr
------

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 instance:

* ``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 meda 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?

