dbus-send と bash 構文における uint32:0 の意味

dbus-send と bash 構文における uint32:0 の意味
dbus-send --system --print-reply           \
   --dest=org.freedesktop.DBus             \
   /org/freedesktop/DBus                   \
   org.freedesktop.DBus.StartServiceByName \
   string:org.freedesktop.login1 uint32:0  \
   2>&1 > /dev/null

dbus始めるように指示しました。ログインしました

質問:

  1. なぜdbusを送信そんなことがありますかuint32:0?それは何をしますか? :0 どういう意味ですか?
  2. エラーメッセージのみを表示するために、与えられた電子の目的を上書きする2>&1 > /dev/null必要がありますか?1> /dev/null

答え1

マニュアルページ(D-Bus 1.14.6)から:

NAME
       dbus-send - Send a message to a message bus

SYNOPSIS
       dbus-send [--system | --session | --bus=ADDRESS | --peer=ADDRESS] [--sender=NAME] [--dest=NAME] [--print-reply [=literal]] [--reply-timeout=MSEC]
                 [--type=TYPE] OBJECT_PATH INTERFACE.MEMBER [CONTENTS...]

したがって、コマンドを細分化します。

  • --system:システムバスの使用(セッションバスの代わりに)
  • --dest=org.freedesktop.DBus:この名前を登録したバスのサービスに転送されます。org.freedesktop.DBus
  • /org/freedesktop/DBusOBJECT_PATH):サービスがDBusメッセージを転送する場所
  • org.freedesktop.DBus.StartServiceByName( INTERFACE.MEMBER):StartServiceByNameインタフェースから関数を呼び出すorg.freedesktop.DBus
  • string:org.freedesktop.login1uint32:0はい[CONTENTS...]

もう一度マニュアルページから:

[The message contents] are given as type-specified values and may include containers (arrays, dicts, and variants) as described below.

   <contents>   ::= <item> | <container> [ <item> | <container>...]
   <item>       ::= <type>:<value>
   <container>  ::= <array> | <dict> | <variant>
   <array>      ::= array:<type>:<value>[,<value>...]
   <dict>       ::= dict:<type>:<type>:<key>,<value>[,<key>,<value>...]
   <variant>    ::= variant:<type>:<value>
   <type>       ::= string | int16 | uint16 | int32 | uint32 | int64 | uint64 | double | byte | boolean | objpath

したがって、両方の形式は具体的には次のようになり<item>ます<type>:<value>

  • string:org.freedesktop.login1: ひも"org.freedesktop.login1"
  • uint32:0:32ビット符号なし整数0

この意味を理解するには、以下を参照する必要があります。StartServiceByName の freedesktop 仕様:

明示的な要求(サービスの有効化)で名前に関連付けられた実行可能ファイルを開始しようとします。これは、自動起動に頼る代替手段です。サービスを有効にする方法と自動起動と明示的な有効化の違いの詳細については、「メッセージバス起動サービス(有効化)」セクションを参照してください。

また、主張について詳しく説明します。

メッセージパラメータ:

ディスカッション タイプ 説明する
0 ひも 開始するサービス名
1 UINT32 フラグ(現在使用されていません)

したがって、このdbus-sendコマンドはサービスを開始する要求ですlogin1これはuint32:0、フラグが設定されていないが現在定義されているフラグがないため意味がないことを意味します。

これについて2>&1 > /dev/null簡単に答えると、書き直すこと&> /dev/nullができないということです1> /dev/null。これは、stderrがstdout()と同じストリームにリダイレクトされ、stdoutが(、と同じ)2>&1にリダイレクトされることを指定します。/dev/null> /dev/null1>/dev/nullどちらのストリームも削除されます。リダイレクトの詳細については、次を確認してください。Bashからリダイレクト、リダイレクトのbashのマニュアルページ。

関連情報