Старожилы помнят, как легко и просто было во времена KDE 3.5, и как быстро писались однострочники вроде
dcop amarok Player pause
которая вызывала соответствующее действие в amarok.
В KDE 4 от старой системы DCOP отказались в пользу единой для всех DE и системы вообще шины DBUS. Главное преимущество этой шины перед DCOP состоит в том, что она, во-первых, нормально работает с несколькими объектами на шине, а во-вторых, умеет посылать сигналы нескольким объектам сразу. Плюс она теоретически может быть транслирована в удалённые вызовы XML-RPC, хотя я не видел приложений, которые бы этим пользовались на практике, разве что PulseAudio вроде этим занимается.
А как быть с полюбившимися однострочниками? Ничего страшного, DBUS предлагает несколько более сложный, но вполне удобный инструментарий для создания сообщений из командной строки. Команда зовётся qdbus. Запустив amarok, откройте терминал и выполните команду:
qdbus
Получите список объектов на вашей шине (выполните sudo qdbus — и получите другой список, рутовый). Найдите в нём org.kde.amarok — это и есть ваш amarok. Также, как и в случае dcop, запустим:
qdbus org.kde.amarok
Получим список интерфейсов, прямо почти как в dcop, только нотация другая. Ну и наконец, доберёмся до методов:
qdbus org.kde.amarok /Player
Получим список методов, которых можно вызвать. Например, для вызова Пуск/Пауза, наберём:
qdbus org.kde.amarok /Player org.freedesktop.MediaPlayer.PlayPause
Вуаля.
P.S. Думаете, гнома это не касается? :)
qdbus org.gnome.Listen /org/gnome/listen org.gnome.Listen.play_pause
:)
Originally published at Aceler online. You can comment here or there.
30 thoughts on “Про DCOP”
Худшие стороны дотнета пришли в линукс =)
Если это худшие стороны дотнета, то дотнет сворован просто с dcop :)
Вполне возможно. Не отслеживал.
Да, «худшие стороны» — это я про многоэтажные имена там, где не требуется.
(сорри, до того не я залогинен на компе был — коммент не от моего имени запостился)
Спалил девчёнку… :)
Многоэтажные имена требуются. Поскольку эти многоэтажки как раз и позволяют рассылать сигналы сразу всем, чего не было в DCOP. Например, можно сформировать org.freedesktop.MediaPlayer.Stop всем плеерам, зарегистрированным в системе — и через это место работает поддержка глобальных горячих клавиш в Gnome. Любой FDO совместимый медиаплеер, получив такую команду, остановит воспроизведение.
Надо браузеры по половому признаку делить, чтобы если что — от женского имени писала жена =)
А с именами — понятно, как и в дотнете. Причина многоэтажности — не рассылка сигналов сразу всем, а построение универсальной иерархии. За универсальность приходится платить…
Почему никто не догадался вставить сканер отпечатков пальцев в левую кнопку мыши?
Ааааааааа! Меня жена душит!
О как. А я-то думал… :)
?
Я уже подправил пост, ты не поймёшь :)
Междусобойчик устроили…;)
А я видел, видел.
Но blogs.yandex.ru уже успел перекачать обновлённую версию :)
Уже на этих простых примерах видно насколько DBus кривее, чем DCOP.
На этих примерах хорошо заметно, насколько DCOP прост и примитивен.
Спасибо, познавательно.
Гм.
Во-первых, какой смысл в общесистемной шине, если однострочники для разных плееров — разные?!
Во-вторых, почему org.gnome.listen надо повторить три раза, при этом с разной пунктуацией и капитализацией?
На мой взгляд, этой команде следовало бы выглядеть как
qdbus org.freedesktop.common.player play-pause
При этом любая программа, зарегистрировавшая на себя алиас org.freedesktop.common.player, получит этот самый play-pause. Который определён внутри неймспейса org.freedesktop.common.player и поэтому не требует префикса.
Потому что оно так устроено.
>Во-первых, какой смысл в общесистемной шине, если однострочники для разных плееров — разные?!
откройте для себя MPRIS
о кстати спасибо за наводку на. А то тутошняя клава в от личае от домашней медиаклавиш не видит но xbindkey видит )
Какую несусветную галиматью вы тут у себя пишите. Старожилы видели один раз kde2, когда он только вышел, с dcop’ом, который по-детски усирался на всякой ерунде.
У старожилов всегда был xmms toggleplay.
Про какую вселенную этот пост? Кто эти люди? Какой, нахрен, kde-три-с-половиной?
Спите дальше.
Но ты же понимаешь, что в D-Bus (в конкретном примере в MPRIS) наше светлое будущее?
Спасибо, совершенно не знал про qdbus. Понравилось.
Теперь бы только ещё к нему автодополнение bash прикрутить…
…так, нагуглил — bash-completion 1.0 и всё. Запускаю новый bash, и даже удобно!
А в убунте уже из коробки, я даже и не парился.
DBus
User referenced to your post from DBus saying: […] Тут, нещодавно, писав про DBus, qdbus і всяке таке… Я вирішив викласти свій скрипт now-playing для irssi. На Perl я ніколи нічого не писав, не сильно сваріть :) use Irssi; use Net::DBus; use strict; use vars qw($VERSION %IRSSI); … […]
А это одному мне кажется что одной и той же командой делать pause и unpause — это чрезвычайно глупо.
Да, одному. Использовать одну конопку Play/Pause куда умнее, чем две отдельные.
из цкриптов — тоже? вы пробовали? я пробовал, мне не понравилось.
> старожилов всегда был xmms toggleplay
к сожалению, в debian его например нет. Хотя и заменить особо нечем. Если б мне надо было музыку слушать — вполне реальный вариант.