18.11.2014 Views

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

UNIXOID<br />

dbus-send --type=method_call --dest=org.kde.amarok \<br />

/Player org.freedesktop.MediaPlayer.Stop<br />

sleep 5<br />

dbus-send --type=method_call --dest=org.kde.amarok \<br />

/Player org.freedesktop.MediaPlayer.Play<br />

Вывести всю информацию о текущем треке можно следующим образом:<br />

$ qdbus org.kde.amarok /Player GetMetadata<br />

Методы объекта /yakuake/sessions<br />

wget $in<br />

fi<br />

…<br />

Мы сохраняем содержимое буфера обмена в переменной in, а затем<br />

передаем ее программе wget, которая и загружает файл.<br />

Конечно, наш «менеджер загрузок» далек от совершенства. Вопервых,<br />

нужно научить его реагировать и на FTP-адреса. Во-вторых,<br />

если в буфере обмена кроме URL будет еще и произвольный текст,<br />

например, «Ссылка http://server/file», то сценарий завершится с<br />

ошибкой. Тут можно так и оставить (FlashGet тоже не активируется,<br />

если в буфере обмена есть еще что-то, кроме URL), а можно посредством<br />

регулярных выражений выделить URL, и получить его с<br />

помощью wget. В любом случае, все это уже не относится к D-Bus и<br />

буферу обмена, поэтому пусть это будет твоим домашним заданием.<br />

Кроме метода getClipboardContents есть метод setClipboardContents,<br />

устанавливающий содержимое буфера обмена. Использовать его<br />

можно так:<br />

…<br />

if qdbus org.kde.klipper /klipper getClipboardContents |<br />

egrep -q '^(http://)'<br />

then<br />

qdbus org.kde.klipper /klipper setClipboardContents<br />

"Êîïèðîâàòü URL çàïðåùåíî"<br />

…<br />

УПРАВЛЯЕМ ПРОИГРЫВАТЕЛЕМ<br />

AMAROK 2 С ПОМОЩЬЮ D-BUS<br />

Следующие команды аналогичны нажатию кнопок Play, Pause, Next,<br />

Prev, Stop, Quit:<br />

$ dbus-send --type=method_call --dest=org.kde.amarok \<br />

/Player org.freedesktop.MediaPlayer.Play<br />

$ dbus-send --type=method_call --dest=org.kde.amarok \<br />

/Player org.freedesktop.MediaPlayer.Pause<br />

...<br />

$ dbus-send --type=method_call --dest=org.kde.amarok \<br />

/ org.freedesktop.MediaPlayer.Quit<br />

Кстати, у Amarok2 есть поддержка Last.FM, но для этого сервиса<br />

поддерж иваются только методы Stop и Play. Приведу воркэраунд для<br />

пропуска текущей песни:<br />

#!/bin/bash<br />

098<br />

Еще очень полезный метод GetStatus, возвращающий 4 целых числа:<br />

• Первое число: 0 — трек воспроизводится, 1 — пауза, 2 — остановлен;<br />

• Второе число: 0 — последовательное воспроизведение, 1 — случайное<br />

воспроизведение;<br />

• Третье число: 0 — перейти к следующему элементу после воспроизведения<br />

текущего, 1 — повторить текущий элемент;<br />

• Четвертое число: 0 — остановить воспроизведение, как только будет<br />

достигнут последний элемент, 1 — продолжить воспроизведение с начала.<br />

УПРАВЛЕНИЕ ПРОИГРЫВАТЕЛЯМИ<br />

VLC И XMMS<br />

Аналогично можно управлять и другим проигрывателем — VLC. Вот<br />

действие, аналогичное нажатию на кнопку воспроизведения:<br />

$ dbus-send --print-reply --session --dest=org.mpris.<br />

vlc /Player org.freedesktop.MediaPlayer.Play<br />

Как только я начал свое знакомство с Linux, лучшим медиа-проигрывателем<br />

для него был XMMS. Отчасти его популярность заключалась во<br />

внешней схожести с популярным в то время Winamp. Недавно наткнулся<br />

на полное описание D-Bus интерфейса современной версии XMMS<br />

(XMMS 2): http://xmms2.org/wiki/MPRIS#D-Bus. Если тебе нравится<br />

XMMS 2, то эта ссылка будет весьма полезной для тебя.<br />

ИНТЕРФЕЙС ORG.FREEDESKTOP.<br />

MEDIAPLAYER (MPRIS 1.0 DBUS API)<br />

Все популярные проигрыватели, такие как Amarok, VLC, XMMS, Audacious,<br />

BMPx, используют интерфейс MPRIS. Следовательно, можно написать<br />

универсальный сценарий управления проигрывателями, в качестве параметра<br />

которому передавать название плеера. Берем команду dbus-send и<br />

вместо значения параметра '--dest' указываем своего фаворита:<br />

$ dbus-send --type=method_call --dest=ïðîèãðûâàòåëü \<br />

/Player org.freedesktop.MediaPlayer.Play<br />

Далее все стандартно. Управление проигрывателем осуществляется<br />

через интерфейс org.freedesktop.MediaPlayer объекта /Player. А управление<br />

списком композиций — через объект /TrackList.<br />

РЕГУЛИРОВКА ГРОМКОСТИ<br />

Установить уровень громкости можно с помощью метода VolumeSet:<br />

$ dbus-send --type=method_call --dest=ïðîèãðûâàòåëü \<br />

/Player org.freedesktop.MediaPlayer.VolumeSet çíà÷åíèå<br />

Значение может быть в диапазоне 0…100. 0 — звук выключен, 100 — максимальная<br />

громкость. Например:<br />

$ qdbus org.kde.amarok /Player VolumeSet 90<br />

Узнать текущее значение громкости можно методом VolumeGet.<br />

А ЧТО ДАЛЬШЕ?<br />

ИЛИ МЕТОД НАУЧНОГО ТЫКА<br />

С помощью D-Bus можно управлять практически любым современным<br />

графическим Linux-приложением. Поскольку я не могу читать твои мыс-<br />

XÀÊÅÐ 09 /140/ 10

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!