개요
리눅스 데스크톱 및 시스템 데몬 간의 IPC 통신을 중계하는 D-Bus의 실시간 메시지 흐름을 추적하는 dbus-monitor 명령어 활용법을 알아봅니다. 시스템 버스와 세션 버스의 시그널 및 메서드 호출을 모니터링하고 실무 디버깅에 적용하는 방법을 단계별로 소개합니다.
D-Bus 패키지 점검 및 서비스 상태 확인
dbus-monitor 실습 환경을 구성하기 위해 apt-get update -qq && apt-get install -y dbus dbus-x11 명령어를 실행하여 D-Bus 관련 패키지를 설치합니다.

which dbus-monitor 명령어를 실행하여 도구의 설치 경로를 확인하고 실행 준비가 완료되었는지 점검합니다.dbus-monitor는 D-Bus 메시지 버스를 오가는 신호와 메서드 호출을 실시간으로 감시하는 도구입니다.
⚙️ [주요 옵션]
--system : 시스템 버스(System Bus)를 모니터링합니다.--session : 사용자 세션 버스(Session Bus)를 모니터링하며 옵션을 지정하지 않을 경우 기본값으로 적용됩니다.--pcap : 메시지를 PCAP 형식으로 출력하여 Wireshark 등의 분석 도구에서 활용할 수 있도록 합니다.--binary : 수신한 메시지를 원시 바이너리 형태로 출력합니다.--monitor : 메시지 전체 내용을 사람이 읽기 쉬운 텍스트 형식으로 모니터링합니다.--profile : 성능 측정을 위해 타임스탬프와 지연 시간이 포함된 프로파일링 형식으로 출력합니다.

D-Bus 시스템 데몬이 정상적으로 동작하고 있는지 확인하기 위해 systemctl status dbus --no-pager 명령어를 실행합니다.
출력 결과의 Active: active (running) 항목을 통해 메시지 중계를 담당하는 D-Bus 서비스가 활성화되어 있음을 확인합니다.

시스템 버스(System Bus) 실시간 트래픽 모니터링
시스템 버스를 오가는 전체 트래픽을 5초 동안 실시간 감시하기 위해 timeout 5s dbus-monitor --system || true 명령어를 실행합니다.
출력 결과에서 프로세스가 버스에 연결되며 고유 주소를 할당받는 NameAcquired 시그널과 연결이 종료될 때 발생하는 NameLost 시그널이 캡처된 것을 확인할 수 있습니다.

메서드 호출이나 응답 메시지를 제외하고 브로드캐스트 이벤트인 시그널 메시지만 선별하여 모니터링하기 위해 timeout 5s dbus-monitor --system "type='signal'" || true 명령어를 실행합니다.
매치 규칙(type='signal')이 지정되어 시스템 버스에서 발생하는 상태 변경 시그널만 필터링되어 출력되는 것을 확인할 수 있습니다.

인터페이스 및 멤버 기반 필터링 규칙 적용
특정 인터페이스에서 전달되는 D-Bus 메시지만 선별하여 감시하기 위해 timeout 5s dbus-monitor --system "interface='org.freedesktop.DBus'" || true 명령어를 실행합니다.
출력 결과를 통해 D-Bus 기본 관리 인터페이스(org.freedesktop.DBus)에서 발생한 NameAcquired 및 NameLost 시그널만 필터링되어 캡처된 것을 확인할 수 있습니다.

특정 메서드 호출 이벤트만 정밀하게 추적하기 위해 timeout 5s dbus-monitor --system "type='method_call',member='ListNames'" || true 명령어를 실행합니다.
메시지 유형(type='method_call')과 멤버 이름(member='ListNames') 조건을 함께 지정하여 등록된 버스 목록을 조회하는 메서드 호출 트래픽을 선별 모니터링하도록 규칙을 적용할 수 있습니다.

dbus-send를 활용한 메시지 송수신 테스트 및 검증
D-Bus 시스템 버스에 등록된 서비스 목록을 조회하고 정상적인 응답이 반환되는지 확인하기 위해 timeout 3s dbus-send --system --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames 명령어를 실행합니다.
출력 결과를 통해 D-Bus 데몬(org.freedesktop.DBus)으로부터 systemd1, login1 등 현재 시스템 버스에 활성화된 서비스 이름 목록이 배열 형태로 정상 반환됨을 확인할 수 있습니다.

dbus-monitor를 백그라운드에서 실행하여 특정 인터페이스를 감시하도록 지정한 뒤, dbus-send로 사용자 정의 시그널을 직접 발행하고 프로세스를 정리하기 위해 (dbus-monitor --session "interface='org.example.Test'" &); sleep 1; dbus-send --session --type=signal /org/example/TestObject org.example.Test.CustomSignal string:"Ping"; sleep 1; killall dbus-monitor || true 명령어를 실행합니다.
사용자 세션 버스에서 org.example.Test 인터페이스를 대상으로 테스트 시그널을 전송하여 메시지 송수신 흐름을 검증하고 테스트 완료 후 모니터링 프로세스를 정상 종료합니다.

지금까지 우분투 환경에서 dbus-monitor를 활용해 D-Bus 메시지를 실시간으로 모니터링하고 필터링하는 방법을 간단하게 살펴보았습니다.
시스템 내부의 통신 흐름을 직접 추적하며 프로세스 간 통신(IPC) 디버깅과 트러블슈팅에 유용하게 활용해보시기 바랍니다.