【发布时间】:2018-06-06 01:15:45
【问题描述】:
我看到了这个问题has been asked,但该问题的上下文不同,因此没有与我的用例相关的答案,所以我要问一个新问题
我有一个Electron based Web Server。它适用于不习惯命令行的初级 Web 开发人员、学生和艺术家(是的,这是一场激烈的辩论,但我被 UCLA 艺术与设计学院的老师责骂让他们的学生使用命令行,因此是一个带有 GUI 的简单服务器。请不要争论这一点。这不是问题的重点)
无论如何,使用此 Web 服务器的人有时希望在端口 80 上运行。在 Mac(和 Linux?)上,端口 80 需要管理员权限,因此我想升级服务器的权限来执行此操作。
我的理解是最简单(唯一?)的方法是生成另一个进程。由于我的 Web 服务器的服务器部分实际上是用 node.js 编写的,并且由于 node.js(或至少是 API)内置于 Electron 中,所以似乎最好的解决方案是重新生成我的 Electron 应用程序以运行只有服务器部分。
换句话说,想象一下我可以像这样运行应用程序
/Applications/Servez.app/Contents/MacOS/Servez --no-gui --server-only --port 80
然后我可以在 Mac 上使用一些 spawn 命令,比如
/usr/bin/osascript -e '
do shell "/Applications/Servez.app/Contents/MacOS/Servez --no-gui --server-only --port 80" with administrator privileges
'
macOS 会在运行服务器之前要求管理员权限。
如果我不能在没有 GUI 的情况下运行 Electron,那么我可以在 Electron 包中包含一个 node.js 的副本,但考虑到相同的功能已经在 Electron 中,这似乎是一种巨大的空间浪费。或者也许还有其他解决方案? (我可以进行一些 API 调用来请求使用端口 80 的权限?)
【问题讨论】:
-
也许 electron-sudo 项目可以使用github.com/automation-stack/electron-sudo
-
感谢您的链接。该项目对于使用管理员启动跨平台流程很有用,但它对您想要自行启动的流程没有帮助。换句话说,它将帮助我启动具有特权的节点。它不会帮助我在没有 GUI 的情况下启动 Electron。所以,超级有用,谢谢,但不能解决我的问题。
-
那么您应该能够通过不打开窗口而无需 ui 启动?
-
@Teak,我试过了,但它仍然在 Dock 中放置了一个图标并且仍然有一个菜单(默认应用程序菜单,而不是我的代码创建的菜单)
-
在 Linux 中,您可以允许特定的二进制文件在没有 root 的情况下侦听特权端口。查找“
setcap CAP_NET_BIND_SERVICE=+eip”。authbind可能适用于 macOS。阅读更多:superuser.com/a/892391/653985
标签: macos electron privileges