D-Bus

D-Bus är ett system för IPC-kommunikation. Användningsområdet är främst kommunikation mellan två applikationer samt mellan operativsystemet och vissa applikationer som behöver vara ett gränssnitt mellan hårdvaruhändelser och användaren. Systemet är relativt nytt och används oftast på Linux- och UNIX-system, mest beroende på att de stora skrivbordssystemen
GNOME och KDE valt att använda D-Bus som sitt IPC-system.

Tanken är att D-Bus ska användas för att åstadkomma en ökad integration mellan applikationer och operativsystemet. Ett exempel är om användaren kopplar in en USB-enhet så kan ett meddelande skickas via D-Bus. Intresserade applikationer kan då hantera meddelandet på olika sätt.
För att få sådana meddelanden så behöver applikationer registrera vilka typer av meddelanden de är intresserade av. 

Protokollet för D-Bus är designat för att hålla låga fördröjningar, låg overhead och försöker minimera antalet anrop. Data överförs binärt och optimeras för att passa den lokala datorn. Alla meddelanden skickas i den lokala datorns lagringsformat (byte-ordning) och alla meddelanden vet vilket format som används. Meddelanden kan därför läsas även om det skickas till en dator med en annan byte-ordning än ursprungsdatorn.

D-Bus systemet använder flera bussar för kommunikation, där systembussen startar vid uppstart av datorn. Varje användare får sedan en privat sessionsbuss vid inloggning.

Objekt 
Här följer en beskrivning av hur objekt hanteras av D-Bus.

Objekt och sökvägar 

D-Bus använder objektsökvägar för att identifiera olika objekt. Ett objekt kan till exempel ha sökvägen "/org/texteditor/document/2/line/431". 

Alla objekt består av två delar, metoder och signaler. En signal används för att representera händelser medan metoder används för anrop från en klient. Signaler skickas från objektet till de applikationer som har registrerat sig som mottagare av den aktuella signalen. Metoder är operationer som kan utföras av objektet. Metoder kan använda både inparametrar och utparametrar, medan signaler bara kan överföra data till de registrerade mottagarna.

Interface 

Varje objekt implementerar minst ett interface som identifieras av ett namn. 
"org.freedesktop.Introspectable" kan vara ett exempel på ett interface.

Meddelanden 

I D-Bus finns fyra olika typer av meddelanden.

 Meddelande för anrop av metoder
 Meddelande för returvärden efter ett metodanrop
 Meddelande för fel som uppstått vid ett metodanrop
 Meddelande för signaler

Alla meddelanden som skickas får ett unikt idnummer och de skickas i den ordning som klienten gör anropen. Svaren kan däremot komma i en annan ordning än klienten anrop och klienten måste därför kontrollera idnumret för varje svarsmeddelande.

Innehåll 

Ett meddelande innehåller en header som består av fält, samt en datadel som består av argument. Headern används som adress för meddelandet medan datadelen innehåller informationen som ska överföras.

Dataöverföring 

Data överförs binärt och till varje överfört värde finns en datatyp angiven. Datatypen anges med ett ASCII-värde. Ett 32-bitars heltalsvärde(INT32) anges med strängen "i". Om meddelandet innehåller två stycken 32-bitars heltal anges "ii".

Definierade typer 

Varje datatyp har en definition för hur värdet ska skickas. Headern för meddelandet har datatypen yyyyuua(yv) och innehåller alltså:

Definitionen av dessa värden är som följer:

Referenser 

 D-Bus specifikation http://dbus.freedesktop.org/doc/dbus-specification.html
 Connect desktop apps using D-BUS http://www-128.ibm.com/developerworks/linux/library/l-dbus.html
 D-Bus tutorial http://dbus.freedesktop.org/doc/dbus-tutorial.html

Kommunikationsmedel