Когда флешка или любое другое устройство подключается в 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/
Комментарии (26)
О, это хорошо... :-)
Люблю такие извращения. :-)
Я их правда, обычно через юдев делал, оно как то чаще описывается.. :-)
Ох какие шикарные возможности открываются
Спасибо за информацию!
а что за темка на скринах которая ?
QtCurve + Agua II
Интересненько, особенно не великим гуру, а таким как я ламеристам
Можно ли создать пункт для действия типа:
sudo -i
echo noop > /sys/block/sdc/queue/scheduler
можно
вот только команда будет выглядеть как-то так
kdesudo -c "echo noop > /sys/block/sdc/queue/scheduler"
Пускай я создам десктоп-файл для скрипта и разрешу его выполнять без ввода пароля, но я не понимаю, как сделать подставление вместо sdc адреса именно этой флешки.
да легко))
Например на выходе этой команды
a=`echo /dev/sda3 | grep -o -P 'sd[a-z]'`; echo /sys/block/$a/queue/scheduler
получится
/sys/block/sda/queue/scheduler
Ну или для твоего случая
kdesudo -c "a=`echo %d | grep -o -P 'sd[a-z]'`; echo noop > /sys/block/$a/queue/scheduler"
Оно будет применяться именно к той флешке, на которую я буду тыкать?
Да, если всё делать через параметры системы/Действия для устройств... там в строку "команда" надо ввести то что я написал.
%d - это и есть выбранное устройство, например /dev/sdc0
Круть! Пробую.
%25 пофиксил
Как-то так попробуй.
[Desktop Action open]
Exec=kdesudo -c "a=`echo %d | grep -o -P 'sd[a-z]'`; echo noop > /sys/block/$a/queue/scheduler"
Icon=face-devilish
Name=Noop
X-Ubuntu-Gettext-Domain=desktop_kdebase-workspace
[Desktop Entry]
Actions=open;
Type=Service
X-KDE-Action-Custom=true
X-KDE-Solid-Predicate=IS StorageAccess
А что делает эта команда -
echo noop > /sys/block/sda/queue/scheduler
??Меняет планировщик ввода-вывода для конкретного устройства.
Действия появилось, но не отрабатывает, как надо:
Кавычки одинарные надо было.
[Desktop Action open]
Exec=kdesudo -c 'a=`echo %d | grep -o -P 'sd[a-z]'`; echo noop > /sys/block/$a/queue/scheduler'
Icon=face-devilish
Name=Noop
X-Ubuntu-Gettext-Domain=desktop_kdebase-workspace
[Desktop Entry]
Actions=open;
Type=Service
X-KDE-Action-Custom=true
X-KDE-Solid-Predicate=IS StorageAccess
Спасибо! Всё работает =)
А что Синхронизируем, какую-то папку?
Синхронизация - это все го лишь пример возможного действия.
Интересно, а где про общие принципы посмотреть можно, пока нашел только "Linux Desktop Hacks" незабвенного O'Reilly.
Про такие вещи можно только из интернетов узнавать. Подпишитесь на десяток rss, и будете встречать находить подобные финты.
Не работает на 13.10. Все по инструкции сделал в перечне действий пункт есть а когда подключаешь устройство он не появляется
В своё время я написал скрипт, предназначенный для автозапуска сменных носителей (см. статью Автоматизированный запуск компакт-дисков). Недавно попытался проделать тоже самое в Gnome (Ubuntu 11.04) и натолкнулся на некоторые трудности. Не подскажите, что по аналогии с solid ответственное за аппаратуру в Gnome?
Отправить комментарий