GUI에 액세스해야하는 루트로 실행되는 데몬 응용 프로그램의 모범 사례는 무엇입니까? [닫은]


1

Windows에서 C ++ / Qt 응용 프로그램을 이식하고 있습니다. Windows에서 프로그램은 서비스로 실행됩니다. 사용자와 상호 작용하고 GUI 요소를 표시하기 위해 서비스로 실행되는 프로그램에서는 사용하지 않는 것이 좋습니다.

따라서 내 프로그램에는 두 부분이 있습니다. 첫 번째 부분은 서비스 데몬으로 실행되며 백그라운드에서 오디오를 재생합니다. 컴퓨터가 시작될 때 프로그램이 시작됩니다. 사용자가 로그인 할 때 시작되는 두 번째 프로그램 (시작 메뉴-> 모든 사용자-> 시작을 통해)은 오디오가 재생 될 때 GUI 팝업을 표시하기 위해 서비스 데몬과 로컬 소켓을 통해 통신합니다.

MacOS로 넘어갈 때 동일한 프로그램을 사용하는 가장 좋은 방법은 무엇입니까?

두 프로그램을 하나로 병합하고 launchd를 통해 루트로 실행하고 하나의 데몬이 GUI를 표시하고 오디오를 재생해야합니까?

아니면 현재와 같은 두 개의 프로그램으로 유지해야합니까? 루트 데몬은 오디오를 재생하고 각 사용자가 로그인 할 때 두 번째 프로그램이 자동으로 실행될 수있는 방법을 찾으십니까?

답변:


2

macOS에서는로 프로세스를 실행하지 않아야합니다 root. Apple은이 유형의 응용 프로그램을 두 부분으로 유지하는 것이 좋습니다. 각 부분에는 적절한 권한이있는 샌드 박스가 있어야합니다.

백그라운드 컴퓨터 전체 프로세스에서 그래픽 인터페이스에 액세스 할 수 없습니다. 당신은 할 필요가 사용자에게 인터페이스를 제공하기 위해 사용자의 세션 내에서 실행하는 두 번째 과정을.

launchd요청시 컴퓨터 전체 프로세스를 시작하는 데 사용 합니다. 아래 XPC 서비스를 참조하십시오. 이렇게하면 아무 것도 재생하지 않아도 리소스 소비를 피할 수 있습니다.

XPC 서비스

macOS의 경우 Apple은 XPC 서비스 아키텍처를 사용하여 통신하기를 원합니다 . 이 접근 방식은 낮은 수준에서 마하 포트를 사용하지만 프로세스가 세부 사항에 대해 너무 걱정할 필요는 없습니다.


괜찮아. 그렇다면 Mac에서 사용자가 시스템에 로그인 할 때 GUI 프로그램이 자동으로 시작되는 것이 가능합니까?
Mikey A. Leonetti

1
예, 시작된 작업 /Library/LaunchAgents/이이를 제공합니다. 자세한 내용 man launchd.plist은 참조하십시오 . 행운을 빕니다; 이것은 도전이 될 것입니다! ;-)
Graham Miln
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.