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
始めるように指示しました。ログインしました。
質問:
- なぜdbusを送信そんなことがありますか
uint32:0
?それは何をしますか? :0 どういう意味ですか? - エラーメッセージのみを表示するために、与えられた電子の目的を上書きする
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/DBus
(OBJECT_PATH
):サービスがDBusメッセージを転送する場所org.freedesktop.DBus.StartServiceByName
(INTERFACE.MEMBER
):StartServiceByName
インタフェースから関数を呼び出すorg.freedesktop.DBus
string:org.freedesktop.login1
、uint32: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/null
1>/dev/null
どちらのストリームも削除されます。リダイレクトの詳細については、次を確認してください。Bashからリダイレクト、リダイレクトのbashのマニュアルページ。