2010-03-25 5 views
4

Mac OSX 10.6 시스템의 로그인 컨텍스트에서 실행되는 시작 데몬이 있습니다. 해당 에이전트에서 각 사용자에 대한 에이전트를 시작하고 에이전트를 사용자의 로그인 컨텍스트에서 실행하게하고 싶습니다. 그러나 에이전트 응용 프로그램에 대한 정확한 인수를 매우 신중하게 제어해야합니다. 따라서 데몬과 같은 발사 에이전트를 사용할 수 없습니다.사용자 컨텍스트에서 데몬에서 시작 에이전트

로그인 한 사용자의 컨텍스트에서 실행되는 프로세스는 어떻게 만듭니 까? 나는 seteuidsetuid 호출을 사용했지만 이것들은 에이전트 응용 프로그램의 실행 컨텍스트를 변경하지 않습니다.

이 방법은 권장되는 Apple 방식이 아니라는 점을 알고 있습니다. 그러나이 문제에 대해서는 선택의 여지가 없습니다. 데몬 응용 프로그램의 디자인은 꽤 융통성이 없습니다 (다양한 유연성을 제공해야합니다. 시스템). 로그인 컨텍스트에서 실행중인 데몬에서 로그인 한 사용자의 GUI 컨텍스트에서 응용 프로그램을 실행할 수있는 해결 방법이 있습니까?

저는 C++, Carbon & 코코아를 사용하고 있습니다.

답변

0

발사 에이전트를 사용하십시오. 다른 모든 방법으로 쓸모없는 세부 사항 및 숨겨진 트릭의 톤과 함께 당신의 마음을 날려 버릴 것입니다. 일반적으로 많은 코너 케이스가있는 매우 복잡한 작업이며 제대로 구현하기가 어렵습니다. Launchd 에이전트를 사용하면 작업에 집중하고 많은 시간을 절약 할 수 있습니다.

가장 좋은 해결책은 에이전트를 다시 작성하고 명령 줄을 사용하지 않고 launchd 데몬에 연결하고 적절한 옵션/설정을 요청하는 것입니다.

가능하지 않거나 어렵다면 시작시 데몬에 연결할 래퍼 실행 에이전트를 작성하고 옵션을 요청한 다음 적절한 명령 줄을 사용하여 원래 에이전트를 시작할 수 있습니다.

"데몬 연결"기계를 구현하는 것이 너무 어렵다고 생각한다면 ... 어쩌면 그렇지만 데몬에서 다른 세션의 에이전트를 시작하는 것보다 훨씬 쉽습니다 (다른 코너 케이스 지원으로 구현했을 때) .

하지만 실제로 아무 문제가없는 경우 더러운 방식으로 원하는 경우 "launchctl bsexec"으로 게임 할 수 있습니다. 작동하는 몇 가지 예 : Starting/stopping a launchd agent for all users with GUI sessions ("launchctl load"대신 세션 컨텍스트에서 실행 파일을 시작할 수 있음).

일부 업데이트되었습니다.

ps aux | grep loginwindow | grep user | awk '{ system("sudo launchctl bsexec "$2" sudo -u user /Applications/TextEdit.app/Contents/MacOS/TextEdit") }'

, 당신이 원하는 세션에서 일부 응용 프로그램을 찾아 가지고는 PID와 당신이 원하는 것을 실행 "launchctl bsexec"전화 : 그 같은 의미 "bsexec launchctl와 함께 플레이"으로

같은 세션. 위의 예는 로그온 한 다른 사용자 acount 또는 서비스에서 해당 행이 실행 되더라도 로그온 한 "사용자"세션에서 TextEdit을 시작합니다.

하지만 라이온에서 테스트했는데 작동하지 않습니다. Leopards (10.5/10.6)에서만 작동합니다. 발사 요원을 사용하지 않고 말하려고했던 것은 당신의 엉덩이와 그 밖의 다른 것에는 끊임없는 고통을 줄 것입니다. 그런 일이 12 번 있었을 때 우리는 발사 요원에 대해 전적으로 전환했으며 지금은 행복합니다 :)

+0

전적으로 발사 요원으로 전환 한 것에 대해 의견을 말할 수 있습니까? 설치 후에 시작할 에이전트를 사용하고 있기 때문에 설치 (특히, 포스트 플라이트 스크립트)가 루트로 실행 중입니다. 언급 한대로 발사 요원을 시작하는 데 사용되는 bsexec 각도이지만 라이온에서는 그렇지 않습니다. 로그인 한 각 사용자의 발사 에이젼트를 처음부터 시작하는 방법은 무엇입니까? – devguydavid

+0

ps aux | grep loginwindow.app | grep -v grep | awk '{system ("sudo launchctl bsexec"$ 2 "sudo -u"$ 1 "launchctl load -S Aqua /Library/LaunchAgents/com.my.agent.plist")}' –

+0

하지만 원하면 라이온에게 문제가 있습니다. 몇 가지 UI를 보여줍니다. 우리는 아직 그것을 풀지 않습니다. –