달성하고자하는 것은 가능하지만 어렵다. 적절한 사용자 세션 내에서 응용 프로그램을 시작해야합니다. 보안상의 이유로 사용자 세션 분할을 교차하는 것은 어렵습니다.
다른 사용자 세션에서 이미 실행중인 프로세스가 있어야 사용자의 요청을 듣고 사용자를 대신하여 응용 프로그램을 시작할 수 있습니다.
발사 된 bsexec
고맙게도 최신 버전 launchd
에는이 기능이 있습니다. Apple 엔지니어는 일반적인 사용을 권장하지 않습니다. 적절한 사용자 세션을 대상으로하려면 launchctl 의 bsexec
옵션을 사용하십시오 .
bslist [PID | ..] [-j]
This prints out Mach bootstrap services and their respective states. While the namespace
appears flat, it is in fact hierarchical, thus allowing for certain services to be only avail-
able to a subset of processes. The three states a service can be in are active ("A"), inactive
("I") and on-demand ("D").
If [PID] is specified, print the Mach bootstrap services available to that PID. If [..] is
specified, print the Mach bootstrap services available in the parent of the current bootstrap.
Note that in Mac OS X v10.6, the per-user Mach bootstrap namespace is flat, so you will only
see a different set of services in a per-user bootstrap if you are in an explicitly-created
bootstrap subset.
If [-j] is specified, each service name will be followed by the name of the job which regis-
tered it.
bsexec PID command [args]
This executes the given command in the same Mach bootstrap namespace hierachy as the given
PID.
bstree [-j]
This prints a hierarchical view of the entire Mach bootstrap tree. If [-j] is specified, each
service name will be followed by the name of the job which registered it. Requires root priv-
ileges.
권장되는 방법은 시작된 작업 티켓을 작성하고 Mac을 재시동하거나 사용자에게 로그 아웃했다가 다시 로그인하도록 요청하는 것입니다.
문제의 원인
응용 프로그램이 잘못된 WindowServer
프로세스 에 연결되어 문제가 발생 합니다. 각 사용자 세션에는 별도의 WindowServer가 있습니다. 이 프로세스는 사용자 인터페이스를 처리합니다. 이전 방법은 프로세스의 소유권을 올바른 사용자에게 부여하지만 자신의 WindowServer 프로세스에 연결합니다.
이 문제는 Apple 의 데몬 및 에이전트 기술 노트에 언급되어 있습니다.
경험
나는 개인적인 경험에서 이것을 알고 있습니다. Power Manager의 경우 각 사용자 세션 내에 pmuser 가 존재하도록 썼습니다 . pmuser
데몬을 듣고 사용자 별 실행 및 명령을 처리합니다. 데몬은 루트 권한을 가지고 있지만 사용자 세션 내에서 안정적으로 작동하려면 사용자 별 프로세스가 필요했습니다.
open
사용하여 명령 을 시도 했습니까SSH
?