C Sharpの応用 - D-Bus

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2024年2月12日 (月) 06:19時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == dbus-sharp (ndesk-dbusプロジェクトのフォーク) は、Monoと.NET 2.0をターゲットとするC#の実装である。<br> <br> Tmds.DBusは、dbus-sharpのプロトコル実装の上に構築されており、.NET 4.5で導入された非同期プログラミングモデルに基づく APIを提供している。<br> このライブラリは .NET Standard 2.0をターゲットとしており、.NET Framework 4.6.1以降、.NET Core / .NET 6…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

dbus-sharp (ndesk-dbusプロジェクトのフォーク) は、Monoと.NET 2.0をターゲットとするC#の実装である。

Tmds.DBusは、dbus-sharpのプロトコル実装の上に構築されており、.NET 4.5で導入された非同期プログラミングモデルに基づく APIを提供している。
このライブラリは .NET Standard 2.0をターゲットとしており、.NET Framework 4.6.1以降、.NET Core / .NET 6以降で実行できる。


Tmds DBusライブラリのインストール

Tmds.DBusライブラリをNuGetからインストールする。
また、Tmds.DBusライブラリはGithubで公開されている。

  • Riderの場合
    1. [ツール]メニューバー - [NuGet] - [<プロジェクト名> の NuGet パッケージを管理]を選択する。
    2. メイン画面下部にNuGetペインが開くので、Tmds.DBusと入力して検索する。
    3. メイン画面右下から、プロジェクト名の右にある[+]ボタンを押下する。
    Tmds.DBusライブラリがインストールされる。


次に、dotnetコマンドを実行して、Tmds.DBus.Toolをインストールする。
NuGetからインストールする場合、インストールに失敗することに注意する。

dotnet tool install -g Tmds.DBus.Tool



D-Busサービスのインターフェースの生成

dotnet dbus listコマンドを実行して、任意のD-Busサービス名を調べる。

dotnet dbus list services --bus system | grep -iE "<D-Busサービス名 (名前の一部でも可能)>"


D-Busサービス名を使用して、D-Busオブジェクト名を調べる。

dotnet dbus list objects --bus system --service <D-Busサービス名> | head -2


# 実行例:
dotnet dbus list objects --bus system --service org.freedesktop.login1 | head -2

# 出力例:
/org/freedesktop/LogControl1 : org.freedesktop.LogControl1
/org/freedesktop/login1 : org.freedesktop.login1.Manager


上記の出力例では、org.freedesktop.login1.Managerサービスがシステムバス上にあり、
org.freedesktop.login1.Managerサービスを実装した/org/freedesktop/login1オブジェクトにエントリポイントオブジェクトがあることを示している。

最後に、dotnet dbus codegenコマンドを実行して、D-Busサービス向けのC#インターフェイスを生成する。

dotnet dbus codegen --bus system --service <D-Busサービス名>

# 実行例:
dotnet dbus codegen --bus system --service org.freedesktop.login1


これにより、現在のカレントディレクトリに<D-Busサービス名のサフィックス>.DBus.csファイルが生成される。

自動生成されたC#ファイルには、D-Busサービスのインターフェースが記述されている。
このD-Busサービスのインターフェースを使用して、プロキシオブジェクトのインスタンスを生成する。


サンプルコード