dbus安裝與驗證

2021-10-06 07:19:23 字數 3890 閱讀 7684

sudo apt-get install dbus:

安裝d-feet,用於檢視 session bus 和 system bus

sudo apt-get install d-feet

安裝glib2.0, 這步安裝的會比較多

sudo apt-get install libgtk2.0-dev

安裝 dbus-glib

apt-get install libdbus-glib-1-dev

整理dbus路徑

5.1 進入/usr/include下,將/usr/include/dbus-1.0/dbus資料夾複製到/usr/include下

5.2.將/usr/lib/x86_64-linux-gnu/dbus下dbus-arch-deps.**件複製到/usr/include/dbus下

5.3.將/usr/include/glib-2.0下所有檔案及資料夾複製至/usr/include/下

5.4.將/usr/lib/x86_64-linux-gnu/glib-2.0/include下glibconfig.h複製到/usr/include/下

這裡也整理好了dbus_include路徑,可以將裡面的所有檔案到拷貝至/usr/include下即可,檔案鏈結-》

先執行: dbus-launch 這個如果有問題,加一引數執行: dbus-launch --sh-syntax

june@june:~/document/method$ dbus-launch

dbus_session_bus_address=unix:abstract=/tmp/dbus-zkvuxsyjdt,guid=2725ec7c229349533242c8a45b34ac2e

dbus_session_bus_pid=2934

dbus_session_bus_windowid=71303169

匯出這個變數

export dbus_session_bus_address=unix:abstract=/tmp/dbus-zkvuxsyjdt,guid=2725ec7c229349533242c8a45b34ac2e

使用dbus服務端和客戶端**進行測試,看看dbus環境是否正常

// 服務端**

#include

#include

#include

#include

#include

void

listen_signal()

if(connection ==

null

)return

;//步驟2:給連線名分配乙個可記憶名字test.singal.dest作為bus name,這個步驟不是必須的,但推薦這樣處理

ret =

dbus_bus_request_name

(connection,

"test.singal.dest"

,dbus_name_flag_replace_existing,

&err);if

(dbus_error_is_set

(&err))if

(ret !=dbus_request_name_reply_primary_owner)

return

;//步驟3:通知d-bus daemon,希望監聽來行介面test.signal.type的訊號

dbus_bus_add_match

(connection,

"type='signal',inte***ce='test.signal.type'"

,&err)

;//實際需要傳送東西給daemon來通知希望監聽的內容,所以需要flush

dbus_connection_flush

(connection);if

(dbus_error_is_set

(&err)

)//步驟4:在迴圈中監聽,每隔開1秒,就去試圖自己的連線中獲取這個訊號。這裡給出的是中連線中獲取任何訊息的方式,所以獲取後去檢查一下這個訊息是否我們期望的訊號,並獲取內容。我們也可以通過這個方式來獲取method call訊息。

while(1

)if(dbus_message_is_signal

(msg,

"test.signal.type"

,"test"))

dbus_message_unref

(msg);}

//end of while

}int

main

(void

)

// 客戶端**

#include

#include

#include

#include

#include

#include

intsend_a_signal

(char

* si**alue)

if(connection ==

null

)return-1

;//步驟2:給連線名分配乙個well-known的名字作為bus name,這個步驟不是必須的,可以用if 0來注釋著一段**,我們可以用這個名字來檢查,是否已經開啟了這個應用的另外的程序。

#if 1

ret =

dbus_bus_request_name

(connection,

"test.singal.source"

,dbus_name_flag_replace_existing,

&err);if

(dbus_error_is_set

(&err))if

(ret !=dbus_request_name_reply_primary_owner)

return-1

;#endif

//步驟3:傳送乙個訊號

//根據圖,我們給出這個訊號的路徑(即可以指向物件),介面,以及訊號名,建立乙個messageif(

(msg =

dbus_message_new_signal

("/test/signal/object"

,"test.signal.type"

,"test"))

==null

)//給這個訊號(messge)具體的內容

(msg,

&arg);if

(!(&arg,dbus_type_string,

&si**alue)

)printf

("signal send: %s\n"

,si**alue)

;//步驟4: 將訊號從連線中傳送if(

!dbus_connection_send

(connection,msg,

&serial)

)dbus_connection_flush

(connection)

;printf

("--------success signal send----------\n");

//步驟5: 釋放相關的分配的記憶體。

dbus_message_unref

(msg )

;return0;

}int

main

(void

)

編譯

gcc service.c -ldbus-1 -i/usr/include/dbus-1 -o service

gcc client.c -ldbus-1 -i/usr/include/dbus-1 -o client

備註:報錯可以輸入如下命令

(1) evaldbus-launch --auto-syntax

DBUS與多執行緒

毫無疑問,dbus是支援多執行緒的,否則它的使用會受到很多限制。但大多數人並不知道使用時要做些特殊處理才行,我們就是因為開始不知道,結果出現了好幾個難查的bug,浪費了不少時間。把幾個主要問題寫到這裡,供有類似情況的朋友參考吧 一定要呼叫dbus g thread init。我們開始以為呼叫了g t...

使用npm安裝jQuery與驗證

1.安裝 使用軟體 websrorm 安裝路徑 h 1學習資料 1前端 jquery train 安裝過程 在h 1學習資料 1前端 jquery train所在的webstorm的terminal視窗中輸入npm install jquery 出現 jquery 3.2.1 安裝成功 2.驗證 在...

使用新型D BUS與桌面應用程式通訊

d bus 是乙個大有前途的訊息匯流排和活動系統,正開始深入地滲透到 linux 桌面之中。了解建立它的原因 它的用途以及發展前景。d bus 本質上是 程序間通訊 inter process communication ipc 的乙個實現。不過,有一些特性使得 d bus 遠遠不是 只是另乙個 i...