如何在无需登录的情况下在 Mac OS X Mountain Lion 上运行 Dropbox?

如何在无需登录的情况下在 Mac OS X Mountain Lion 上运行 Dropbox?

我使用 Dropbox 将文件同步到我的网站,该网站运行在 Mac OS X Mountain Lion 上。问题是,如果我没有登录,Dropbox 就不会运行,因此,我在另一台链接到 Dropbox 的计算机上对我的网站所做的任何更改,网站都不会更新。

我尝试通过让 Dropbox 在启动时作为守护进程运行来解决问题。我使用 UserName 键在 /Library/LaunchDaemons 中创建了一个 launchd 条目,以我自己的身份运行 Dropbox,它启动了,但没有任何更新。当我将 Dropbox 可执行文件的输出重定向到文件时,我看到以下错误,虽然我并不认为这是致命的,但我仍然在进程列表中看到 Dropbox。

/Applications/Dropbox.app/Contents/Resources/lib/python2.7/lib-ol_RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.
2013-09-15 17:42:20.592 Dropbox[267:707] Unable to simultaneously satisfy constraints:

(
    <NSLayoutConstraint:0x5636c30 H:[_NSAlertContentView:0x56319e0(<=0)]>,
    <NSLayoutConstraint:0x5636b70 H:[_NSAlertContentView:0x56319e0(>=420)]>
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x5636c30 H:[_NSAlertContentView:0x56319e0(<=0)]>

Set the NSUserDefault NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints to YES to have -[NSWindow visualizeConstraints:] automatically called when this happens.  And/or, break on objc_exception_throw to catch this in the debugger.
2013-09-15 17:42:20.593 Dropbox[267:707] Unable to simultaneously satisfy constraints:

(
    <NSLayoutConstraint:0x5637240 V:[_NSAlertContentView:0x56319e0(<=0)]>,
    <NSLayoutConstraint:0x5637180 V:[_NSAlertContentView:0x56319e0(>=131)]>
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x5637240 V:[_NSAlertContentView:0x56319e0(<=0)]>

Set the NSUserDefault NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints to YES to have -[NSWindow visualizeConstraints:] automatically called when this happens.  And/or, break on objc_exception_throw to catch this in the debugger.
2013-09-15 17:42:20.612 Dropbox[267:707] Error (1000) creating CGSWindow on line 259
2013-09-15 17:42:20.614 Dropbox[267:707] (
0   CoreFoundation                      0x98598e8b __raiseError + 219
1   libobjc.A.dylib                     0x987e152e objc_exception_throw + 230
2   CoreFoundation                      0x98598d21 -[NSException raise] + 17
3   _objc.so                            0x02b30b2f PyObjCErr_ToObjCWithGILState + 63
4   _objc.so                            0x02b11501 PyObjCFFI_BuildResult + 4673
5   _objc.so                            0x02b0254f ffi_closure_SYSV_inner + 127
6   _objc.so                            0x02b02352 ffi_closure_SYSV + 34
7   libobjc.A.dylib                     0x987ee5d3 -[NSObject performSelector:withObject:] + 70
8   Foundation                          0x90d9d326 __NSThreadPerformPerform + 395
9   CoreFoundation                      0x9846f04f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
10  CoreFoundation                      0x9846ea79 __CFRunLoopDoSources0 + 233
11  CoreFoundation                      0x98494826 __CFRunLoopRun + 934
12  CoreFoundation                      0x9849401a CFRunLoopRunSpecific + 378
13  CoreFoundation                      0x98493e8b CFRunLoopRunInMode + 123
14  HIToolbox                           0x9107af5a RunCurrentEventLoopInMode + 242
15  HIToolbox                           0x9107acc9 ReceiveNextEventCommon + 374
16  HIToolbox                           0x9107ab44 BlockUntilNextEventMatchingListInMode + 88
17  AppKit                              0x9907693a _DPSNextEvent + 724
18  AppKit                              0x9907616c -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 119
19  AppKit                              0x9906c5cc -[NSApplication run] + 855
20  _objc.so                            0x02b022ad ffi_call_SYSV + 29
21  _objc.so                            0x02b025c9 ffi_call + 89
22  _objc.so                            0x02b1b2e9 PyObjCFFI_Caller + 2809
23  _objc.so                            0x02b4006a PyObjCSelector_GetClass + 698
24  Python                              0x02209918 PyObject_Call + 88
25  Python                              0x022be2cf PyEval_EvalFrameEx + 5663
26  Python                              0x022c4571 PyEval_EvalCodeEx + 2081
27  Python                              0x022c20d3 PyEval_EvalFrameEx + 21539
28  Python                              0x022c4571 PyEval_EvalCodeEx + 2081
29  Python                              0x022c20d3 PyEval_EvalFrameEx + 21539
30  Python                              0x022c4571 PyEval_EvalCodeEx + 2081
31  Python                              0x0223b3d2 PyClassMethod_New + 1138
32  Python                              0x02209918 PyObject_Call + 88
33  Python                              0x022bea8c PyEval_EvalFrameEx + 7644
34  Python                              0x022c4571 PyEval_EvalCodeEx + 2081
35  Python                              0x022c20d3 PyEval_EvalFrameEx + 21539
36  Python                              0x022c2fb2 PyEval_EvalFrameEx + 25346
37  Python                              0x022c2fb2 PyEval_EvalFrameEx + 25346
38  Python                              0x022c2fb2 PyEval_EvalFrameEx + 25346
39  Python                              0x022c4571 PyEval_EvalCodeEx + 2081
40  Python                              0x022c46f7 PyEval_EvalCode + 87
41  Python                              0x022e8fa5 PyRun_SimpleFileExFlags + 789
42  Python                              0x022e90f8 PyRun_SimpleFile + 40
43  Dropbox                             0x000067f1 start + 17777
44  Dropbox                             0x00006f89 main + 1481
45  Dropbox                             0x00002382 start + 258
46  Dropbox                             0x000022a9 start + 41

`

答案1

似乎有很多工作需要完成,而这些工作可以通过在目标机器上运行 Mercurial/Git 来完成,无需登录。这样,您就可以获得源代码控制的额外优势。

从 Mercurial 自动拉取

答案2

这 ”在第 259 行创建 CGSWindow 时出错(1000)“显示内部 Python 应用程序需要某种形式的图形界面(可能是闪烁屏幕或菜单弹出)。默认情况下,LaunchAgents/Daemons 没有图形访问,甚至可能尚未激活。

launchctl手册页中:

目前已知的会话类型包括:Aqua、LoginWindow、Background、StandardIO 和 System。

在 launchd plist 文件中,尝试添加LimitLoadToSessionType“Aqua”和“LoginWindow”会话类型的要求。

<key>LimitLoadToSessionType</key>
  <array>
    <string>LoginWindow</string>
    <string>Aqua</string>
  </array>

请注意,登录时应用程序可能会退出并重新启动。从Apple Daemon 技术说明

如果您将 LimitLoadToSessionType 设置为数组,请注意代理的每个实例都会独立运行。例如,如果您将代理设置为在 LoginWindow 和 Aqua 中运行,系统将首先在 loginwindow 上下文中运行代理的一个实例。当用户登录时,该实例将被终止,第二个实例将在标准 GUI 上下文中启动。

相关内容