Создать сеанс экрана из демона запуска - PullRequest
4 голосов
/ 21 февраля 2010

Я написал launchd .plist, который должен подключать отладчик к WindowServer при его запуске. Основная часть скрипта выглядит как

screen -D -m -S "WindowServer Debugger" \
gdb \
-x $GDBSCRIPT \
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/WindowServer \
$WSPID

Это запускает сеанс отдельного экрана, в котором GDB подключен к WindowServer.

Однако, похоже, это вызывает состояние ошибки в launchd под Snow Leopard, из-за чего он выводит сообщения об ошибках в журнал:

com.apple.launchd[1] (0x10011c070.anonymous.screen[961]) Bug: launchd_core_logic.c:8250 (23932):0
com.apple.launchd[1] (0x10011c070.anonymous.screen[961]) Switching sessions is not allowed in the system Mach bootstrap.
com.apple.launchd[1] (0x10011c070.anonymous.screen[961]) _vprocmgr_switch_to_session(): kr = 0x44c

Следует отметить, что сообщения «... не разрешено в системном загрузчике Маха» появляются независимо от того, сколько времени прошло с момента загрузки системы.

Есть ли обходной путь для этого, чтобы я мог вызвать сеанс экрана?

Согласно справочной странице для launchd,

Демоны не должны пытаться отображать пользовательский интерфейс или напрямую взаимодействовать с сеансом входа пользователя в систему.

Это может указывать на то, что launchd рассматривает это поведение как взаимодействие с другим сеансом и отрицает его. Код здесь, но я не знаком с ним: http://launchd.macosforge.org/trac/browser/trunk/launchd/src/launchd_core_logic.c#L8250

Ответы [ 2 ]

1 голос
/ 14 октября 2010

Я столкнулся с этой проблемой при использовании версии экрана 4.0.3. Я создал последнюю доступную версию (4.1.dev) для git: //git.sv.gnu.org/screen.git, и это помогло мне решить проблему.

1 голос
/ 21 февраля 2010

Очевидно, что вы не можете отсоединиться (используя -D) в системной загрузке. Вы можете сделать это в агенте запуска (или в другом месте в вашей начальной загрузке).

...