Välkommen till linuxportalen.se!

Linuxportalen.se är Sveriges största och aktivaste webbplats för användare av öppen- och fri programvara.

Du besöker Linuxportalen.se som gäst vilket begränsar din möjlighet att använda webbplatsens alla funktioner. Genom att registera dig som medlem får du inte bara möjlighet att söka bland webbplatsens innehåll, skapa nya och delta i befintliga diskussioner, skapa din egen blogg, kommunicera med andra medlemmar genom privata meddelanden och delta i omröstningar. Du får också tillgång till Veckans Kadavro - en seriestrip unikt skapad för Linuxportalen.se!

Registeringen sker snabbt och är helt kostnadsfri - tveka inte, bli medlem idag!

Kristian: Styr Banshee (och en massa annat) via DBUS

DBus är grymt coolt

http://www.madsoft.org/2008/06/10/interfacing-banshee-10-with-dbus-and-p...

Man finner fler dbus-tjänster under /usr/share/dbus-1/services och /etc/dbus-1/system.d/ . En av dem är PowerManager, det låter oss tex. köra följande

 

import dbus

bus = dbus.SessionBus()

pm = bus.get_object("org.freedesktop.PowerManagement", "/org/freedesktop/PowerManagement")

if pm.GetLowBattery():

   pm.Suspend()

 

 

Alternativ för kommentarvisning

Välj ditt önskade sätt att visa kommentarerna och klicka på "Spara" för att verkställa dina ändringar.

Kristians bild

Vill du skriva dina egna services?

myserver.py

 

import dbus, dbus.glib, dbus.service

import gobject

class MyServer (dbus.service.Object):

  @dbus.service.method(dbus_interface='server.of.wisdom.Interface', in_signature='', out_signature='s')

  def HowIsLife(self):

    return "Life is great man :)"

  @dbus.service.method(dbus_interface='server.of.wisdom.Interface', in_signature='i', out_signature='s')

  def MayIDrink(self, myage):

    if myage < 18:

     return "Forget about it"

    else:

     return "Sure"

bus = dbus.SessionBus()

name = dbus.service.BusName('server.of.wisdom', bus=bus)

obj = MyServer(name, '/')

loop = gobject.MainLoop()

loop.run()

 

myclient.py

 

import dbus

bus = dbus.SessionBus()

server = dbus.Interface(bus.get_object('server.of.wisdom', '/'), 'server.of.wisdom.Interface')

print server.HowIsLife()

print server.MayIDrink(15)

 

Nog för att IPC är skoj men det som DBUS verkligen är bra till är signalering. Säg att du är intresserad av att detektera när en viss typ av hårdvara pluggas i, ifall nätverket bryts/ ansluts eller liknande. Istället för att ligga och polla med något intervall så väntar man på en dbus-signal. http://live.gnome.org/Vala/DBusSample visar ett sådant exempel där man just i detta fall lyssnar på händelser i Pidgin

 

---------------------------------------

 

dikatlons bild

Yes, D-BUS är urgrymmt!

Ett fantastiskt IPC-protokoll som används av så många applikationer i dagens läge att integrationsmöjligheterna gör en lite smått nojjig och i extas!

 

~ bra kod är testad kod ~

- ARCH LINUX -

Kristians bild

Äntligen någon mer som tycker att DBUS rockar

---------------------------------------

 

jonasbjorks bild

Räcker upp en hand.

--

Telling modern Internet users to stop whining is like telling them to stop breathing — it seems unrealistic and inhumane. (P. Lutus)

--
Jag är grundare av och administratör på Linuxportalen. Kontakta mig om du har frågor, funderingar eller synpunkter kring Linuxportalen.se .

Marcuss bild

det är väll lagom coolt Smile. undra om jag inte använde det för amarok en gång.

jeffs bild

Nej, du använde troligtvis DCOP, som är det protokoll som DKE-applikationer använder för att kommunicera sinsemellan. DCOP kan dock använda flera olika tekniker under skalet varav D-BUS kan vara en av dem.

--------------------------

Peace settled across the galaxy

Peace settled across the galaxy

------

Marcuss bild

så var det Smile <3 jeff

sol77s bild

DBus är asgrymt! Smile