「C Sharpの応用 - D-Bus」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
34行目: 34行目:
  # セッションバスの場合
  # セッションバスの場合
  dotnet dbus list objects --bus session --service <D-Busサービス名> | head -2
  dotnet dbus list objects --bus session --service <D-Busサービス名> | head -2
<br>  
<br>
以下の例では、org.freedesktop.login1.Managerサービスがシステムバス上にあり、<br>
org.freedesktop.login1.Managerサービスを実装した/org/freedesktop/login1オブジェクトにエントリポイントオブジェクトがあることを示している。<br>  
  # 実行例:
  # 実行例:
  dotnet dbus list objects --bus system --service org.freedesktop.login1 | head -2
  dotnet dbus list objects --bus system --service org.freedesktop.login1 | head -2
41行目: 43行目:
  /org/freedesktop/LogControl1 : org.freedesktop.LogControl1
  /org/freedesktop/LogControl1 : org.freedesktop.LogControl1
  /org/freedesktop/login1 : org.freedesktop.login1.Manager
  /org/freedesktop/login1 : org.freedesktop.login1.Manager
<br>
上記の出力例では、org.freedesktop.login1.Managerサービスがシステムバス上にあり、<br>
org.freedesktop.login1.Managerサービスを実装した/org/freedesktop/login1オブジェクトにエントリポイントオブジェクトがあることを示している。<br>
<br>
<br>
最後に、<code>dotnet dbus codegen</code>コマンドを実行して、D-Busサービス向けのC#インターフェイスを生成する。<br>
最後に、<code>dotnet dbus codegen</code>コマンドを実行して、D-Busサービス向けのC#インターフェイスを生成する。<br>

2024年2月12日 (月) 06:23時点における版

概要

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サービス名 (名前の一部でも可能)>"

# セッションバスの場合
dotnet dbus list services --bus session | grep -iE "<D-Busサービス名 (名前の一部でも可能)>"


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

# システムバスの場合
dotnet dbus list objects --bus system --service <D-Busサービス名> | head -2

# セッションバスの場合
dotnet dbus list objects --bus session --service <D-Busサービス名> | head -2


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

# 実行例:
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


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

# システムバスの場合
dotnet dbus codegen --bus system --service <D-Busサービス名>

# セッションバスの場合
dotnet dbus codegen --bus session --service <D-Busサービス名>

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


C#インターフェイスが記述されているファイルは、現在のカレントディレクトリに<D-Busサービス名のサフィックス>.DBus.csファイルとして生成される。

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


サンプルコード