피드로 돌아가기
Dev.toInfrastructure
원문 읽기
D-Bus Race Condition 해결을 통한 Wayland 원격 입력 제어 구현
How I fixed a silent hang in the XDG Desktop Portal and turned it into an npm package
AI 요약
Context
Wayland 보안 모델로 인해 앱의 직접적인 입력 주입이 제한되어 XDG Desktop Portal RemoteDesktop 인터페이스 사용이 필수적인 구조. GNOME 환경에서 Portal API 호출 시 응답 신호가 구독 시점보다 빠르게 발생하는 Race Condition으로 인한 시스템 Hang 현상 발생.
Technical Solution
- D-Bus 응답 경로의 결정론적 구조(/org/freedesktop/portal/desktop/request/{sender}/{token}) 파악을 통한 사전 경로 계산 로직 도입
- '호출 후 구독' 방식에서 '사전 구독 후 호출' 방식으로 시퀀스를 변경하여 즉각적인 응답 누락 방지
- handle_token을 직접 생성하여 요청과 응답 경로를 일치시키는 예측 기반 매칭 아키텍처 설계
- CreateSession, SelectDevices, Start로 이어지는 Portal 세션 라이프사이클의 전체 비동기 흐름 제어
- X11 환경과의 호환성을 위한 xdotool Fallback 매커니즘 통합
실천 포인트
- 비동기 이벤트 기반 시스템 설계 시 이벤트 발생 시점과 구독 시점의 간극으로 인한 Race Condition 가능성 검토 - 결정론적 경로(Deterministic Path)를 생성할 수 있는 API의 경우, 사전 구독 전략을 통해 메시지 유실 방지 - OS 레벨의 보안 샌드박스 인터페이스 구현 시 타임아웃 설정 및 Fallback 경로 확보