![在登录窗口中运行应用程序](https://linux22.com/image/1387674/%E5%9C%A8%E7%99%BB%E5%BD%95%E7%AA%97%E5%8F%A3%E4%B8%AD%E8%BF%90%E8%A1%8C%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
我正在寻找一种方法,在用户登录之前在 Mac 和 PC 上运行像 Reflector 或 AirServer 这样的应用程序,该应用程序几乎没有 GUI,直到有人开始向其发送数据,此时它会全屏显示。
有没有办法在 Mac 和/或 PC 的登录屏幕上运行应用程序?
答案1
在 OS X 中,您可以创建一个登录前启动的代理。例如,将此属性列表保存为/Library/LaunchAgents/some.label.plist
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>some.label</string>
<key>LimitLoadToSessionType</key>
<array>
<string>LoginWindow</string>
<string>Aqua</string>
</array>
<key>ProgramArguments</key>
<array>
<string>say</string>
<string>a</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
确保 plist 归 root 所有。如果不是,则以launchd load
用户身份运行时可以加载它,但 launchd 不会自动加载它。
然后,如果您重新启动,则 say 命令应该在显示登录窗口时运行一次,并在用户以图形方式登录后再次运行。
如果您不希望在用户以图形方式登录时再次运行该程序,请删除<string>Aqua</string>
。
如果启用了自动登录并将LimitLoadToSessionType
其设置为LoginWindow
,则程序根本不会运行。
查看守护进程和代理技术说明或man launchd.plist
了解更多信息。