개요
리눅스 프로세스 간 통신(IPC)의 핵심 메커니즘인 D-Bus 메시지를 터미널에서 직접 송수신하는 dbus-send 명령어 사용법을 정리합니다. 복잡한 매뉴얼 대신 시스템 버스 조회, 속성 확인, 메서드 호출 실습을 통해 실무 감각을 빠르게 익힐 수 있습니다.
D-Bus 패키지 점검 및 활성 서비스 목록 조회
dbus-send 실습을 진행하기 위해 시스템에 D-Bus 패키지가 설치되어 있는지 확인하고 최신 상태를 유지합니다.

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

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

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

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

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

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

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

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

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