Про DCOP

Posted on Posted in Без рубрики

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

Поделиться:
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Facebook
  • Twitter
  • LiveJournal
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • LinkedIn
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • Digg
  • БобрДобр
  • MisterWong.RU
  • Memori.ru
  • МоёМесто.ru
  • Сто закладок
  • Блог Я.ру
  • Блог Li.ру
  • Одноклассники
  • Add to favorites
  • Blogger
  • email
  • Netvibes

30 thoughts on “Про DCOP

      1. Вполне возможно. Не отслеживал.

        Да, «худшие стороны» — это я про многоэтажные имена там, где не требуется.

        (сорри, до того не я залогинен на компе был — коммент не от моего имени запостился)

        1. Спалил девчёнку… :)

          Многоэтажные имена требуются. Поскольку эти многоэтажки как раз и позволяют рассылать сигналы сразу всем, чего не было в DCOP. Например, можно сформировать org.freedesktop.MediaPlayer.Stop всем плеерам, зарегистрированным в системе — и через это место работает поддержка глобальных горячих клавиш в Gnome. Любой FDO совместимый медиаплеер, получив такую команду, остановит воспроизведение.

          1. Надо браузеры по половому признаку делить, чтобы если что — от женского имени писала жена =)

            А с именами — понятно, как и в дотнете. Причина многоэтажности — не рассылка сигналов сразу всем, а построение универсальной иерархии. За универсальность приходится платить…

  1. $ ldd /usr/bin/qdbus
    	linux-gate.so.1 =>  (0xb7fc7000)
    	libQtDBus.so.4 => /usr/lib/libQtDBus.so.4 (0xb7f4a000)
    	libQtXml.so.4 => /usr/lib/libQtXml.so.4 (0xb7f17000)
    	libQtCore.so.4 => /usr/lib/libQtCore.so.4 (0xb7d43000)
    	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7c55000)
    	libc.so.6 => /lib/libc.so.6 (0xb7b05000)
    	libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0xb7acb000)
    	libz.so.1 => /lib/libz.so.1 (0xb7ab5000)
    	libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb7ab0000)
    	librt.so.1 => /lib/librt.so.1 (0xb7aa7000)
    	libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0xb79f2000)
    	libpthread.so.0 => /lib/libpthread.so.0 (0xb79da000)
    	libdl.so.2 => /lib/libdl.so.2 (0xb79d5000)
    	libm.so.6 => /lib/libm.so.6 (0xb79ad000)
    	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb798e000)
    	/lib/ld-linux.so.2 (0xb7fc8000)
    	libpcre.so.3 => /lib/libpcre.so.3 (0xb795e000)
    
  2. Гм.

    Во-первых, какой смысл в общесистемной шине, если однострочники для разных плееров — разные?!

    Во-вторых, почему org.gnome.listen надо повторить три раза, при этом с разной пунктуацией и капитализацией?

    На мой взгляд, этой команде следовало бы выглядеть как

    qdbus org.freedesktop.common.player play-pause

    При этом любая программа, зарегистрировавшая на себя алиас org.freedesktop.common.player, получит этот самый play-pause. Который определён внутри неймспейса org.freedesktop.common.player и поэтому не требует префикса.

    1. >Во-первых, какой смысл в общесистемной шине, если однострочники для разных плееров — разные?!

      откройте для себя MPRIS

  3. Какую несусветную галиматью вы тут у себя пишите. Старожилы видели один раз kde2, когда он только вышел, с dcop’ом, который по-детски усирался на всякой ерунде.
    У старожилов всегда был xmms toggleplay.
    Про какую вселенную этот пост? Кто эти люди? Какой, нахрен, kde-три-с-половиной?

  4. Спасибо, совершенно не знал про qdbus. Понравилось.

    Теперь бы только ещё к нему автодополнение bash прикрутить…

    …так, нагуглил — bash-completion 1.0 и всё. Запускаю новый bash, и даже удобно!

  5. А это одному мне кажется что одной и той же командой делать pause и unpause — это чрезвычайно глупо.

  6. > старожилов всегда был xmms toggleplay

    к сожалению, в debian его например нет. Хотя и заменить особо нечем. Если б мне надо было музыку слушать — вполне реальный вариант.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.