어려운 man 페이지 대신 실습으로 끝내는 리눅스 dbus-send 완벽 가이드

개요

리눅스 프로세스 간 통신(IPC)의 핵심 메커니즘인 D-Bus 메시지를 터미널에서 직접 송수신하는 dbus-send 명령어 사용법을 정리합니다. 복잡한 매뉴얼 대신 시스템 버스 조회, 속성 확인, 메서드 호출 실습을 통해 실무 감각을 빠르게 익힐 수 있습니다.

D-Bus 패키지 점검 및 활성 서비스 목록 조회

dbus-send 실습을 진행하기 위해 시스템에 D-Bus 패키지가 설치되어 있는지 확인하고 최신 상태를 유지합니다.

apt-get update -qq && apt-get install -y dbus

D-Bus 메시지 통신이 원활히 동작하려면 백그라운드 데몬이 활성화되어 있어야 하므로 systemctl status dbus 명령어로 서비스 구동 상태를 점검합니다.

systemctl status dbus –no-pager

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)을 지정합니다.

dbus-send –system –print-reply –dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames

시스템 속성(Properties) 단일 및 전체 값 읽기

호스트 이름 관리 서비스인 org.freedesktop.hostname1의 org.freedesktop.DBus.Properties.Get 메서드를 호출하여 단일 속성인 Hostname 값을 조회합니다.
실행 결과 시스템의 호스트 이름이 D-Bus의 가변 데이터 형식인 variant 타입으로 감싸져 정상 반환됩니다.

dbus-send –system –print-reply –dest=org.freedesktop.hostname1 /org/freedesktop/hostname1 org.freedesktop.DBus.Properties.Get string:org.freedesktop.hostname1 string:Hostname

시간 및 날짜 관리 서비스인 org.freedesktop.timedate1의 org.freedesktop.DBus.Properties.GetAll 메서드를 호출하여 해당 서비스의 모든 속성값을 한 번에 조회합니다.
실행 결과 타임존(Timezone), 로컬 RTC 사용 여부(LocalRTC), NTP 동기화 가능 여부(CanNTP)를 비롯한 시스템 시간 설정 전체가 딕셔너리 배열 형태로 출력됩니다.

dbus-send –system –print-reply –dest=org.freedesktop.timedate1 /org/freedesktop/timedate1 org.freedesktop.DBus.Properties.GetAll string:org.freedesktop.timedate1

객체 인트로스펙션(Introspection)으로 인터페이스 탐색

D-Bus 인트로스펙션 결과로 반환되는 XML 데이터를 처리하고 검증하기 위해 libxml2-utils 패키지를 설치합니다.

apt-get update -qq && apt-get install -y libxml2-utils

로그인 관리 서비스인 org.freedesktop.login1의 org.freedesktop.DBus.Introspectable.Introspect 메서드를 호출하여 객체가 제공하는 인터페이스 구조를 탐색합니다.
실행 결과 지원하는 인터페이스와 메서드, 매개변수 정보가 포함된 XML 형식의 명세 데이터가 문자열 형태로 반환됩니다.

dbus-send –system –print-reply –dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.DBus.Introspectable.Introspect

로그인 세션 관리자 메서드 호출 및 인자 전달 실습

시스템 로그인 및 세션 관리 데몬인 org.freedesktop.login1 서비스의 org.freedesktop.login1.Manager.ListSessions 메서드를 호출하여 현재 시스템에 생성된 모든 세션 목록을 조회합니다.
현재 환경에서는 활성화된 사용자 세션이 존재하지 않아 빈 배열(array []) 형태로 응답이 반환됩니다.

dbus-send –system –print-reply –dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.ListSessions

로그인 관리 서비스의 org.freedesktop.login1.Manager.ListUsers 메서드를 호출하여 현재 시스템에 로그인한 사용자 계정 목록을 조회합니다.
현재 실행 중인 사용자 로그인 세션이 없으므로 빈 배열(array [])이 출력되며, 실제 다중 사용자 로그인 환경에서는 로그인한 사용자의 UID와 사용자 이름 등의 정보가 배열 구조체로 반환됩니다.

dbus-send –system –print-reply –dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.ListUsers

지금까지 복잡한 man 페이지 대신 실용적인 실습 예제로 리눅스 dbus-send의 핵심 개념과 명령어 활용법을 간단하게 살펴보았습니다.
오늘 정리한 내용들을 직접 터미널에서 실행해 보며 시스템 프로세스 간 통신(IPC)을 한층 더 수월하게 다뤄보시기 바랍니다.