Как добавить произвольное действие при подключении устройства

Когда флешка или любое другое устройство подключается в kde4 это отображается на виджете "подключаемые устройства". Так же там предлагается выбрать действия для подключенного устройства.

Создадим действие синхронизация для конкретной флешки.

Сначала посмотрим как solid (подсистема ответственная за аппаратуру в KDE 4) видит нашу флешку.

solid-hardware list

наша флешка имеет udi = '/org/freedesktop/UDisks/devices/sdb1'

solid-hardware details /org/freedesktop/UDisks/devices/sdb1

получаем примерно такой вывод:

parent = '/org/freedesktop/UDisks/devices/sdb'  (string)
  vendor = 'Multiple'  (string)
  product = 'Card  Reader'  (string)
  description = '3,7 GiB Removable Media'  (string)
  Block.major = 8  (0x8)  (int)
  Block.minor = 17  (0x11)  (int)
  Block.device = '/dev/sdb1'  (string)
  StorageAccess.accessible = false  (bool)
  StorageAccess.filePath = ''  (string)
  StorageAccess.ignored = false  (bool)
  StorageVolume.ignored = false  (bool)
  StorageVolume.usage = 'FileSystem'  (0x2)  (enum)
  StorageVolume.fsType = 'vfat'  (string)
  StorageVolume.label = ''  (string)
  StorageVolume.uuid = '5a8d-08b0'  (string)
  StorageVolume.size = 3964552704  (0xec4e4600)  (qulonglong)

Вот и uuid - им можно уникально идентифицировать нашу флешку.
Создаем файл в ~/.kde/share/apps/solid/actions, например Синхронизировать.desktop:

[Desktop Action open]
Exec=/usr/bin/unison-gtk
Icon=ktip
Name=Синхронизировать

[Desktop Entry]
Actions=open;
Type=Service
X-KDE-Action-Custom=true
X-KDE-Solid-Predicate=[[StorageVolume.usage == 'FileSystem' AND StorageVolume.ignored == 'false'] AND StorageVolume.uuid == '5a8d-08b0']

Теперь, при подключении флешки в USB разьем, в списке действий появляется новый пункт: Синхронизировать.

Так же действия для подключаемых устройств можно добавить через K -> "Параметры системы" -> "Действия для устройств"

Файлы системных действий находятся в папке /usr/share/kde4/apps/solid/actions/