2010-02-21 77 views
4

我已經寫了一個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錯誤條件,使其中噴出錯誤信息到日誌:

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 

我要指出的是,」 ......不是在允許的系統Mach引導程序「消息,無論系統啓動後多長時間。

有沒有解決方法,以便我可以產生我的屏幕會話?

按照聯機幫助頁的launchd,

守護進程不應嘗試顯示UI或直接與用戶的登錄會話交互。

這可能表明launchd將這種行爲看作與另一個會話進行交互並拒絕它。代碼在這裏,但我不熟悉它:http://launchd.macosforge.org/trac/browser/trunk/launchd/src/launchd_core_logic.c#L8250

+0

是的,我無法使用LaunchAgents或LaunchDaemons以任何配置(在plist文件中指定用戶名和/或用戶組)。最終,我最終爲使用Automator的個人用戶創建了一個登錄項目,將shell腳本變爲一個應用程序。當然,這不是一個理想的解決方案,但蘋果似乎已經在這裏阻撓我們。 – Dalmazio 2014-02-20 04:05:44

回答

0

顯然你不能在系統引導中分離(使用-D)。你可以在啓動器中執行此操作(或者在用戶引導程序中)。

+0

是的,但如果我不分離(使用-D或-d),屏幕抱怨我沒有tty。 由於WindowServer作爲一個不同的用戶運行,我不認爲我可以爲它創建一個LaunchAgent。 – rgov 2010-02-22 02:04:56

1

我正在使用屏幕版本4.0.3遇到此問題。我在git://git.sv.gnu.org/screen.git上構建了可用的最新版本(4.1.dev),併爲我解決了這個問題。

+0

這並沒有解決山獅的問題。經過一番研究後,問題似乎與屏幕無關,而是在啓動期間啓動不允許交互式會話。而'屏幕'似乎被launchd視爲'互動'。 – Dalmazio 2014-02-20 04:10:09