JIT SPRAY ÃÂÃÂÃÂÛØ× TDSS - Xakep Online
JIT SPRAY ÃÂÃÂÃÂÛØ× TDSS - Xakep Online
JIT SPRAY ÃÂÃÂÃÂÛØ× TDSS - Xakep Online
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Команда «qdbus org.kde.yakuake»<br />
несколько сервисов на шине, которыми она будет владеть,<br />
пока не освободит их. До момента освобождения ни одно<br />
другое приложение не сможет занять уже занятый сервис.<br />
Сервисы именуются аналогично интерфейсам.<br />
С помощью сервисов можно реализовать автоматический<br />
запуск необходимых приложений при поступлении<br />
сообщений. Для этого нужно включить автоактивацию и в<br />
настройках D-Bus сопоставить с сервисом определенное<br />
приложение, тогда D-Bus запустит приложение при поступлении<br />
сообщения на тот или иной сервис. При завершении<br />
программы освобождаются все зарегистрированные при ее<br />
запуске сервисы.<br />
В D-Bus у каждого объекта свое уникальное имя. Имя объекта<br />
напоминает путь в файловой системе, например, org/kde/<br />
kspread/sheets/1/cells/1/1. Обычно путь имеет какую-нибудь<br />
смысловую нагрузку. Например, в данном случае мы обращаемся<br />
к ячейке 1:1 на первом листе электронной книги<br />
KSpread. Но имена могут быть совершенно бессмысленными,<br />
например, /com/appl1/c5444sf956a. Тут все зависит от<br />
фантазии разработчиков.<br />
На этом скучная часть статьи закончилась, и можно приступать<br />
к практике.<br />
D-BUS И СКРИНСЕЙВЕРЫ<br />
Начнем с самых простых трюков, связанных с D-Bus и<br />
скринсейверами. Заблокировать экран можно следующей<br />
командой:<br />
$ qdbus org.kde.krunner /ScreenSaver Lock<br />
Иногда напрягает, что хранитель экрана вообще запускается.<br />
Ну не нужен он мне. Конечно, в настройках KDE его<br />
можно отключить, но раз сегодня мы говорим о D-Bus, то<br />
тебе пригодится следующая команда:<br />
$ qdbus org.kde.krunner /ScreenSaver \<br />
SimulateUserActivity<br />
Кстати, в некоторых случаях X-сервер может потушить<br />
экран. Чтобы обойти эту «фичу», нужно ввести команду:<br />
$ xset dpms 0 0 0<br />
Первый 0 — это время в секундах до гашения монитора без<br />
его выключения, второй 0 — это время до перехода в режим<br />
ожидания, а третий — время до выключения монитора.<br />
Вообще, вместо команды xset можно править xorg.conf, но<br />
учитывая, что в современных дистрибутивах он отсутствует,<br />
лучше все-таки использовать команду xset.<br />
Вернемся к методу SimulateUserActivity. Метод, как следует<br />
из его названия, имитирует активность пользователя. Его<br />
нужно вызывать периодически. Но не будешь же ты вводить<br />
приведенную выше команду, скажем, каждые 30 секунд?<br />
Тогда можно набросать небольшой сценарий:<br />
#!/bin/bash<br />
$* &<br />
while jobs | grep -q Running<br />
do<br />
qdbus org.kde.krunner /ScreenSaver \<br />
SimulateUserActivity<br />
sleep 30<br />
done<br />
Сценарию нужно передать командную строку. Да, именно<br />
командную строку, тогда скрипт запустит приложение и<br />
будет имитировать активность пользователя. Сохрани<br />
сценарий как /usr/bin/simulate. После этого установи права<br />
доступа и запускай:<br />
$ sudo chmod +x /usr/bin/simulate<br />
$ simulate mplayer film.avi<br />
Действительно, у MPlayer есть параметр '-stopxscreensaver',<br />
но у других проигрывателей подобного<br />
параметра может и не оказаться.<br />
ТРЮКИ С БУФЕРОМ ОБМЕНА<br />
В Windows я использовал довольно неплохой менеджер<br />
закачек — FlashGet. Он активировался, как только в буфере<br />
обмена появлялась ссылка. Всплывало окно, где нужно<br />
было либо подтвердить закачку, либо отказаться от нее.<br />
Сейчас мы попробуем реализовать подобный мониторинг<br />
буфера обмена в Linux с помощью D-Bus. Следующая<br />
команда выводит содержимое клипборда:<br />
$ qdbus org.kde.klipper /klipper \<br />
getClipboardContents<br />
Теперь напишем простенький сценарий, выводящий содержимое<br />
буфера обмена, если в нем есть URL (для простоты<br />
мы будем учитывать только http://):<br />
#!/bin/bash<br />
while true<br />
do<br />
if qdbus org.kde.klipper /klipper<br />
getClipboardContents | egrep -q '^(http://)'<br />
then<br />
qdbus org.kde.klipper /klipper<br />
getClipboardContents<br />
fi<br />
sleep 1<br />
done<br />
Скрипт не делает ничего сверхъестественного. Сначала запускается<br />
бесконечный цикл (прервать выполнение можно<br />
либо нажатием , либо закрытием окна терминала),<br />
затем анализируется содержимое буфера обмена. Если оно<br />
содержит URL (строку, начинающуюся с http://), то сценарий<br />
просто выводит содержимое клипборда, а затем засыпает на<br />
секунду. Чтобы сценарий закачивал файл, нужно модифицировать<br />
его так:<br />
…<br />
then<br />
in='qdbus org.kde.klipper /klipper \<br />
getClipboardContents'<br />
INFO<br />
info<br />
• D-Bus<br />
интегрируется во<br />
многие рабочие<br />
среды и доступна<br />
для GLib, GCJ (Java),<br />
Mono, Qt и Python.<br />
• KDE4 полностью<br />
переведен на D-Bus.<br />
• Когда приложение<br />
подключается<br />
к шине, оно<br />
должно указать,<br />
какие сообщения<br />
желает получать.<br />
Приложение будет<br />
получать только<br />
те сообщения,<br />
которые ему<br />
нужно, а проблему<br />
фильтрации D-Bus<br />
берет на себя.<br />
WARNING<br />
warning<br />
• Если возникла<br />
ошибка «dbus: UUID<br />
file ‘/var/lib/dbus/<br />
machine-id’ contains<br />
invalid hex data»,<br />
исправить ситуацию<br />
поможет команда:<br />
$ dbus-uuidgen ><br />
/var/lib/dbus/<br />
machine-id<br />
HTTP://WWW<br />
links<br />
• www.freedesktop.<br />
org — сайт D-Bus<br />
• dbus.freedesktop.<br />
org/doc/dbus-tutorial.<br />
html — руководство<br />
по D-Bus<br />
• xmms2.org/wiki/<br />
MPRIS#D-Bus —<br />
XMMS-2 и D-Bus<br />
• dkws.org.ua — сайт<br />
автора<br />
XÀÊÅÐ 09 /140/ 10 097