はじめに:CUIから自在にD-Busを制御する
Linux環境におけるプロセス間通信(IPC)の要となるD-Bus基盤に対し、コマンドラインから直感的にリクエストを発行できるユーティリティがdbus-sendです。本稿では膨大なmanページを読み解く負担を省き、システムバス上のサービス一覧取得、プロパティ情報の参照、各マネージャーメソッドの実行まで、手を動かしながら実践的なオペレーション手法を習得していきます。
D-Busパッケージの整備と稼働サービス一覧の取得
dbus-sendによる操作を始めるにあたり、環境内に必要なパッケージが正しく導入され最新状態であるかを担保します。

プロセス間のメッセージ中継が破綻なく処理されるには、バックグラウンドのバスデーモンが稼働中である必要があります。systemctl status dbusを実行して常駐プロセスの稼働状態を確かめましょう。

dbus-sendは、D-Busメッセージバス経由で特定のエンドポイントへダイレクトにリクエストを投射し、その応答を検証する際に活躍するコマンドラインツールです。
ここでは、現在システムバスに常駐しているサービスネーム一覧を取得するため、コアオブジェクトが提供するListNamesメソッドを呼び出します。
⚙️ [主要オプション一覧]
--system : ユーザー固有のセッションバスではなく、システム全体を管理するSystem busへ接続してメッセージを送信します。--session : カレントログインセッション専用のSession busに対してパケットを送出します(未指定時のデフォルト)。--print-reply : コールしたメソッドから返却されたレスポンスをコンソール画面へ可視化出力します。--dest=NAME : 送信先となるサービスのバス名(Well-known Nameあるいは固有のUnique Name)を明示します。--type=TYPE : 送出するメッセージ種別(method_callまたはsignal)を指定します。

プロパティ(Properties)の個別参照および一括取得
ホスト名管理を担うサービスorg.freedesktop.hostname1に対してorg.freedesktop.DBus.Properties.Getメソッドを呼び出し、単一キーであるHostnameの値を抽出します。
コマンドを実行すると、D-Bus特有の汎用型であるvariant型でラップされたホスト名文字列が返されます。

次に日付・時刻の同期をつかさどるorg.freedesktop.timedate1へアプローチし、org.freedesktop.DBus.Properties.GetAllを使って対象サービスが保持するすべてのパラメータを一括ダンプします。
レスポンスには、タイムゾーン設定(Timezone)、ハードウェアクロックのローカル時運用設定(LocalRTC)、NTP同期の有効化フラグ(CanNTP)をはじめとする時刻構成データが辞書形式(ディクショナリ配列)で出力されます。

イントロスペクション(Introspection)によるインターフェース定義の探索
D-Busのオブジェクト構造を調査する際、イントロスペクション機能から返されるXMLデータを整形・検証できるようlibxml2-utilsをインストールしておきます。

ログオンセッション制御デーモンorg.freedesktop.login1に対し、org.freedesktop.DBus.Introspectable.Introspectメソッドを投げることでオブジェクトが公開している内部APIスキーマを展開します。
これにより、利用可能なインターフェース名、コール可能なメソッド一覧、シグナル定義、引数のシグネチャ情報を網羅したXML形式の仕様データが取得できます。

ログインマネージャーメソッドの実行とセッション検証
セッションライフサイクルを統括するorg.freedesktop.login1サービスのorg.freedesktop.login1.Manager.ListSessionsメソッドをトリガーし、現在OS上に確立されている全セッション一覧の収集を試行します。
本検証環境下ではアクティブな対話型セッションが存在しないため、空の配列(array [])が返答として受信されます。

続けてログイン管理インターフェースのorg.freedesktop.login1.Manager.ListUsersをコールし、システムに現在サインインしているユーザーアカウント群を問い合わせます。
稼働セッションと同様にログイン中のアカウントが存在しない場合はarray []となりますが、通常運用のマルチユーザー環境では各ユーザーのUIDやユーザー名を含む構造体のリストが展開されます。

ここまで、机上の仕様書を追うだけではイメージしづらいLinuxのdbus-sendについて、実機ターミナルでの検証を通じてコアな仕組みと利用手順を解説しました。
本稿で扱ったクエリパターンを応用することで、システム内部のステータス把握や各種デーモンとの連携スクリプト作成をスムーズに進められるようになります。