GitXplorerGitXplorer
n

udisksevt

public
5 stars
0 forks
0 issues

Commits

List of commits on branch master.
Unverified
72b90b8c4bf37ef93180233335a2e18ab3129c45

Merge pull request #1 from mstrlu/master

nnetvl committed 13 years ago
Unverified
fb59b8d3c7de6cf0f8ba83fc82cbfadc24b92635

Cleanup

committed 13 years ago
Unverified
07cca622b8f609d8e767cd23e5c22702f763005c

Share one dbus connection for all callbacks.

committed 13 years ago
Unverified
89e8270024d43e2f31a16e60d222ef78714b8120

Fixed the method call for notifications

committed 13 years ago
Unverified
3c925e6ab6d5edf64892fdd593a8d14921519cf5

Updated to dbus-core-0.9.1:

committed 13 years ago
Unverified
7c894a2fd74a1ec72137bf7768b819feaaf6117d

Moved to dbus-client-0.4 package

nnetvl committed 14 years ago

README

The README file for this repository.

=== UDisksEvt ===

UDisksEvt is a daemon which listens for D-Bus signals emitted by UDisks daemon and execute configured actions, performing substitution of device properties when needed. So, it can be used e.g. for automounting removable devices or for notifications on device insertion/removal. The most convenient way to use UDisksEvt is in conjunction with traydevice program by Martin Špelina: http://bbs.archlinux.org/viewtopic.php?id=84792

=== Requirements === To build the program you need Glasgow Haskell Compiler at least 6.10 version and following haskell packages installed: dbus-client >= 0.4 dbus-core >= 0.8 parsec >= 2.1 && < 3 text transformers monads-tf containers stm process unix However, they are not runtime dependencies; you can safely remove the whole system after the compilation. The binary itself depends only on gmp and pthread libraries, which should already be installed.

=== Installation === Ensure you have GHC and required libraries installed and execute following command in the main source directory (where Setup.hs is located):

$ runhaskell Setup.hs configure --prefix=/usr/local
$ runhaskell Setup.hs build
$ sudo runhaskell Setup.hs install

The only binary should be now installed into the /usr/local/bin directory and LICENSE file should be installed into the /usr/local/share/udisksevt-$version directory.

=== Usage === You can start UDisksEvt either in daemon mode or plain mode. To start is as a daemon use and option '-d'. UDisksEvt will fork to background then. If you launch the program without this option, all output will be sent to your terminal (if any). This is useful for debugging. You can specify the configuration file to load using '-c' option. If it is not specified, the default of ~/.config/udisksevt/udisksevt.conf is used. You have to launch D-Bus session and ConsoleKit session before udisksevt. If you use startx to launch X server, you can use the following snippet:

if which dbus-launch &>/dev/null && [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
    eval $(dbus-launch --sh-syntax --exit-with-session)
fi
udisksevt -d
ck-launch-session your_window_manager

=== Configuration === First of all, there is an example config bundled in the package. There are many comments in there, and it should not be hard to change it according to your needs.

Configuration file is simple. It consists of variable bindings and of arbitrarily many sections, though only four predefined ones are supported now. Each section contains arbitrarily many 'run' and 'notify' commands. The comments must begin with '#' sign and must be on their own lines; mixing them with config directives is not supported.

Variable definition looks like this:

set <variable name> = <value>

where consists of alphanumeric characters and '-' sign. can be quoted string (escaping characters currently is not supported), a possibly signed integer or a boolean in form 'yes'/'no'. Currently supported variables:

start-udisks-daemon :: Bool
    -- if yes, UDisksEvt will start the UDisks daemon if it is not already
       started by sending it a simple message.
       Default yes

shell-command :: String
    -- this must be a full path to shell binary. The shell must accept '-c'
       command line argument. This value is used in 'run' commands; in fact,
       all contents of 'run' command argument is sent as value of '-c'
       option to this program.
       Default "/bin/bash"

default-notification-icon :: String
    -- this must be a full path to the icon file which will be used if not
       specified in 'notify' commands. This can be either icon file name
       (should always work) or GTK stock name (depends on notification
       daemon, e.g. Awesome WM doesn't support it, so this behaviour is
       untested). You can use $HOME$ value inside this string; it is
       expanded into full path to your home directory. This value can be
       empty, indicating that there is no default icon.
       Default ""

Section definition looks like this:

on <trigger name>:

must be one of 'added', 'mounted', 'unmounted', 'removed' without quotes. Other names can be used, but such sections will be ignored. These section names are self-explaining. Section definition ends with the beginning of another sections. Also, note the colon sign after trigger name. All triggers are executed only if device have UDisks property 'DeviceIsSystemInternal' set to false and if property 'IdUsage' is set to "filesystem" value. Send me a report if it is incorrect behaviour.

Section configuration directives are 'run' and 'notify'.

Run command:

run <command>

'run' action sends the rest of the line after the word 'run' to the shell specified by 'shell-command' config variable as the value of '-c' option.

Notify command:

notify "Body" ["Summary" ["/icon/path" [timeout [urgency]]]]

'notify' action uses the D-Bus to send a notification using the notification daemon. This daemon can be embedded in the window manager (like Awesome) or can be standalone program, like notify-osd in Gnome. All arguments except the first one are optional. "Body" is the main text of the notifcation. "Summary" is the caption. "/icon/path" is the path to icon. It can be a string "default" to use the value in 'default-notification-icon' config variable. timeout is an integer value specifying the notification timeout in milliseconds. 0 means indefinite time, -1 - notification server default. The last argument, urgency, can be one of three values: 'low', 'normal' or 'critical' without quotes. It sets the urgency level of notification. Note that you can use 'run' action with notify-send program in libnotify package to achieve same results, but 'notify' action have less overhead because the D-Bus interaction with notification daemon is implemented in UDisksEvt internally and does not require launching another program.

=== Substitution === In 'run' command argument and in "Body" and "Summary" arguments of 'notify' command you can use "variables" in form "$Name$". These "variables" will be substituted by actual device properties retrieved from UDisks. Name is the name of the property; the list of these properties names and their descriptions is located on the http://hal.freedesktop.org/ site in UDisks documentation on org.freedesktop.UDisks.Device interface. They are of different types, but in the substitution they will be (hopefully) correctly converted to string representation. If it is an array, the first element will be retrieved. If it is a dictionary, the undefined (in fact, it depends on dbus-core haskell library) element will be retrieved. These are the most useful ones:

IdLabel           ---   device label; can be empty
IdUuid            ---   device unique identifier
DeviceFile        ---   system device file, like /dev/sda1
DeviceMountPaths  ---   device mount paths array; only the first path is
                        retrieved

So, using these "variables", you can send customized notifications and run commands with device properties arguments. For example, to launch a most recent version of traydevice program correctly and to receive a notification, you can use this section definition:

 on added:
      notify "Added device $DeviceFile$"
      run traydevice "$DeviceFile"

The example config file already contains appropriate directives to launch traydevice on device mount event.