MochiuWiki : SUSE, EC, PCB
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
C Sharpの応用 - D-Busのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
C Sharpの応用 - D-Bus
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == D-Busはメッセージバスシステムであり、ソフトウェアが互いに通信するためのシンプルな方法である。<br> プロセス間通信に加えて、プロセスのライフサイクルを調整するのに役立つ。<br> シングルインスタンスのソフトウェアやデーモンをコード化して、そのサービスが必要な時にオンデマンドでソフトウェアやデーモンを起動することにより、シンプルで信頼性の高いものになる。<br> <br> Tmds.DBusは、dbus-sharpのプロトコル実装の上に構築されており、.NET 4.5で導入された非同期プログラミングモデルに基づく APIを提供している。<br> このライブラリは .NET Standard 2.0をターゲットとしており、.NET Framework 4.6.1以降、.NET Core / .NET 6以降で実行できる。<br> <br> dbus-sharp (ndesk-dbusプロジェクトのフォーク) は、Monoと.NET 2.0をターゲットとするC#の実装である。<br> <br><br> == Tmds.DBus.Protocol == Tmds.DBus.Protocolパッケージは、D-Busプロトコルの低レベルAPIを提供する。<br> 高レベルのTmds.DBusライブラリとは異なり、プロトコルライブラリはネイティブAOTコンパイルで使用できる。<br> <br> Tmds.DBus.SourceGeneratorは、プロトコルライブラリをターゲットとしたソースジェネレータを提供する。<br> <br><br> == Tmds.DBusライブラリのインストール == Tmds.DBusライブラリをNuGetからインストールする。<br> また、Tmds.DBusライブラリは[https://github.com/tmds/Tmds.DBus Github]で公開されている。<br> * Riderの場合 *# [ツール]メニューバー - [NuGet] - [<プロジェクト名> の NuGet パッケージを管理]を選択する。 *# メイン画面下部にNuGetペインが開くので、<u>Tmds.DBus</u>と入力して検索する。 *# メイン画面右下から、プロジェクト名の右にある[+]ボタンを押下する。 *# Tmds.DBusライブラリがインストールされる。 <br> 次に、<code>dotnet</code>コマンドを実行して、Tmds.DBus.Toolをインストールする。<br> これにより、各D-BusサービスからC#のインターフェースを自動生成することができる。<br> <br> <u>NuGetからインストールする場合、インストールに失敗することに注意する。</u><br> dotnet tool install -g Tmds.DBus.Tool <br><br> == D-Busサービスのインターフェースの生成 == <code>dotnet dbus list</code>コマンドを実行して、任意のD-Busサービス名を調べる。<br> # システムバスの場合 dotnet dbus list services --bus system | grep -iE "<D-Busサービス名 (名前の一部でも可能)>" # セッションバスの場合 dotnet dbus list services --bus session | grep -iE "<D-Busサービス名 (名前の一部でも可能)>" <br> D-Busサービス名を使用して、D-Busオブジェクト名を調べる。<br> # システムバスの場合 dotnet dbus list objects --bus system --service <D-Busサービス名> | head -2 # セッションバスの場合 dotnet dbus list objects --bus session --service <D-Busサービス名> | head -2 <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 # 出力例: /org/freedesktop/LogControl1 : org.freedesktop.LogControl1 /org/freedesktop/login1 : org.freedesktop.login1.Manager <br> 最後に、<code>dotnet dbus codegen</code>コマンドを実行して、D-Busサービス向けのC#インターフェイスを生成する。<br> # システムバスの場合 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 <br> C#インターフェイスが記述されているファイルは、現在のカレントディレクトリに<u><D-Busサービス名のサフィックス>.DBus.cs</u>ファイルとして生成される。<br> <br> 自動生成されたC#ファイルには、D-Busサービスのインターフェースが記述されている。<br> このD-Busサービスのインターフェースを使用して、プロキシオブジェクトのインスタンスを生成する。<br> <br><br> == サンプルコード == 以下の例では、Linuxにおいてセッションをログオフしている。<br> <br> <syntaxhighlight lang="c#"> using Tmds.DBus; using login1.DBus; // org.freedesktop.login1サービスをもとに自動生成されたC#インターフェース namespace DBusSample; internal static class Program { private static async Task Main(string[] args) { try { // DBusのシステムバスに接続 var connection = Connection.System; // ログインマネージャーオブジェクトを取得 var loginManager = connection.CreateProxy<IManager>("org.freedesktop.login1", new ObjectPath("/org/freedesktop/login1")); // セッションのリストを取得 var sessions = await loginManager.ListSessionsAsync(); // セッションをログオフする foreach (var session in sessions) { await loginManager.TerminateSessionAsync(session.Item1); } Console.WriteLine("ログオフが完了しました。"); } catch (Exception ex) { Console.WriteLine($"エラー: {ex.Message}"); } } } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:C Sharp]]
C Sharpの応用 - D-Bus
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse