Старожилы помнят, как легко и просто было во времена 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.



#1 by aamonster on 07.10.2009 - 17:59
Quote
Худшие стороны дотнета пришли в линукс =)
#2 by Aceler on 07.10.2009 - 18:05
Quote
Если это худшие стороны дотнета, то дотнет сворован просто с dcop :)
#3 by abbra on 07.10.2009 - 18:17
Quote
#4 by Aceler on 07.10.2009 - 18:22
Quote
О как. А я-то думал… :)
#5 by duke_igthorn on 07.10.2009 - 18:24
Quote
?
#6 by Aceler on 07.10.2009 - 18:29
Quote
Я уже подправил пост, ты не поймёшь :)
#7 by duke_igthorn on 07.10.2009 - 18:36
Quote
Междусобойчик устроили…;)
#8 by entw on 07.10.2009 - 18:57
Quote
Уже на этих простых примерах видно насколько DBus кривее, чем DCOP.
#9 by Aceler on 07.10.2009 - 19:00
Quote
На этих примерах хорошо заметно, насколько DCOP прост и примитивен.
#10 by darkhobbit on 07.10.2009 - 19:05
Quote
Спасибо, познавательно.
#11 by kean on 07.10.2009 - 19:29
Quote
А я видел, видел.
Но blogs.yandex.ru уже успел перекачать обновлённую версию :)
#12 by aamonster on 07.10.2009 - 19:41
Quote
Вполне возможно. Не отслеживал.
Да, “худшие стороны” – это я про многоэтажные имена там, где не требуется.
(сорри, до того не я залогинен на компе был – коммент не от моего имени запостился)
#13 by Aceler on 07.10.2009 - 19:47
Quote
Спалил девчёнку… :)
Многоэтажные имена требуются. Поскольку эти многоэтажки как раз и позволяют рассылать сигналы сразу всем, чего не было в DCOP. Например, можно сформировать org.freedesktop.MediaPlayer.Stop всем плеерам, зарегистрированным в системе — и через это место работает поддержка глобальных горячих клавиш в Gnome. Любой FDO совместимый медиаплеер, получив такую команду, остановит воспроизведение.
#14 by aamonster on 07.10.2009 - 20:14
Quote
Надо браузеры по половому признаку делить, чтобы если что – от женского имени писала жена =)
А с именами – понятно, как и в дотнете. Причина многоэтажности – не рассылка сигналов сразу всем, а построение универсальной иерархии. За универсальность приходится платить…
#15 by aamonster on 07.10.2009 - 20:16
Quote
Ааааааааа! Меня жена душит!
#16 by Aceler on 07.10.2009 - 20:28
Quote
Почему никто не догадался вставить сканер отпечатков пальцев в левую кнопку мыши?
#17 by lodin on 07.10.2009 - 20:57
Quote
Гм.
Во-первых, какой смысл в общесистемной шине, если однострочники для разных плееров — разные?!
Во-вторых, почему org.gnome.listen надо повторить три раза, при этом с разной пунктуацией и капитализацией?
На мой взгляд, этой команде следовало бы выглядеть как
qdbus org.freedesktop.common.player play-pause
При этом любая программа, зарегистрировавшая на себя алиас org.freedesktop.common.player, получит этот самый play-pause. Который определён внутри неймспейса org.freedesktop.common.player и поэтому не требует префикса.
#18 by Aceler on 08.10.2009 - 06:11
Quote
Потому что оно так устроено.
#19 by samurai_within on 08.10.2009 - 12:36
Quote
о кстати спасибо за наводку на. А то тутошняя клава в от личае от домашней медиаклавиш не видит но xbindkey видит )
#20 by heviosso on 09.10.2009 - 01:06
Quote
Какую несусветную галиматью вы тут у себя пишите. Старожилы видели один раз kde2, когда он только вышел, с dcop’ом, который по-детски усирался на всякой ерунде.
У старожилов всегда был xmms toggleplay.
Про какую вселенную этот пост? Кто эти люди? Какой, нахрен, kde-три-с-половиной?
#21 by strangestone on 09.10.2009 - 06:06
Quote
>Во-первых, какой смысл в общесистемной шине, если однострочники для разных плееров — разные?!
откройте для себя MPRIS
#22 by Aceler on 09.10.2009 - 06:20
Quote
Спите дальше.
#23 by sastanin on 09.10.2009 - 15:40
Quote
Спасибо, совершенно не знал про qdbus. Понравилось.
Теперь бы только ещё к нему автодополнение bash прикрутить…
…так, нагуглил — bash-completion 1.0 и всё. Запускаю новый bash, и даже удобно!
#24 by Aceler on 11.10.2009 - 19:57
Quote
А в убунте уже из коробки, я даже и не парился.
#25 by andy_shev on 17.10.2009 - 19:08
Quote
Но ты же понимаешь, что в D-Bus (в конкретном примере в MPRIS) наше светлое будущее?
#26 by pingback_bot on 11.11.2009 - 18:30
Quote
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); … [...]
#27 by max630 on 14.08.2010 - 21:18
Quote
А это одному мне кажется что одной и той же командой делать pause и unpause – это чрезвычайно глупо.
#28 by Aceler on 14.08.2010 - 21:20
Quote
Да, одному. Использовать одну конопку Play/Pause куда умнее, чем две отдельные.
#29 by max630 on 14.08.2010 - 21:35
Quote
из цкриптов – тоже? вы пробовали? я пробовал, мне не понравилось.
#30 by max630 on 14.08.2010 - 21:38
Quote
> старожилов всегда был xmms toggleplay
к сожалению, в debian его например нет. Хотя и заменить особо нечем. Если б мне надо было музыку слушать – вполне реальный вариант.