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 ( ) 相同的流,2>&1
并将 stdout 重定向到/dev/null
( ,与)> /dev/null
相同,因此1>/dev/null
两个流都被丢弃。有关重定向的更多信息,您可能应该查看bash 中的重定向,有关重定向的 bash 手册页。