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 매뉴얼 페이지.