C Sharpの応用 - D-Bus
概要
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の場合
- [ツール]メニューバー - [NuGet] - [<プロジェクト名> の NuGet パッケージを管理]を選択する。
- メイン画面下部にNuGetペインが開くので、Tmds.DBusと入力して検索する。
- メイン画面右下から、プロジェクト名の右にある[+]ボタンを押下する。
- 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サービスのインターフェースを使用して、プロキシオブジェクトのインスタンスを生成する。
サンプルコード