是否可以将Internet共享配置为允许计算机进入睡眠状态?


9

TL; DR:Internet共享阻止我的Mac进入睡眠状态。我需要定期手动休眠系统。我想要一种配置Internet共享以停止睡眠的方法。

我家里的卧室里的iMac距离路由器太远,无法使用无线网络,而且3G覆盖范围很广,因此我启用了Internet共享功能,因此可以通过我的iPhone / iPad连接使用iMac。

在工作中,我使用的是公司网络,而无线网络有些la脚且过于严格,因此我也在MacBook Pro上启用了Internet共享,因此我的iPhone可以访问内部设备。

问题是:当我按下+ + (或>睡眠)时,两台计算机都无法进入所需的睡眠状态;除非我先禁用Internet共享。

在家里,我想让计算机在我睡觉的时候睡觉(节省电源+更多的静音),而在回家时我也想让它睡觉,所以我不必关闭所有连接的应用程序(Adium,Colloquy等),并且第二天再次重新开放。

如何配置pmset或共享Internet,这样我就可以在不遇到此问题的情况下使计算机休眠?

注意:我已经习惯于pmset检查是否还有其他原因,并且违规行为pid始终为com.apple.InternetSharing

编辑:我意识到,使计算机处于休眠状态将使其无法使用Internet共享。我希望它完全睡眠,并且我希望仅在计算机唤醒时才能重新启用Internet共享。


我在上述命令中的输出是DenySystemSleep。尽管找到了字符串,但是我无法sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.nat用来更改行为。您能否扩大回答范围?
Irae Carvalho

因此,例如,您需要关闭共享然后休眠的东西。唤醒后会自动打开共享的其他内容。
GEdgar 2012年

究竟!这正是我需要的
Irae卡瓦略

Answers:


8

我已经尝试过使用ControlPlane实现您想要的。我的初步结果是,它将完成您想要的。

ControlPlane会检测对系统的更改,称为“证据源”。更改以“规则”评估,“规则”定义“上下文”中的更改。与每个上下文相关联的是“动作”。

“证据来源”之一是睡眠/唤醒事件。因此,我配置了一个规则,以便在睡眠事件(例如,您在Apple菜单中单击“睡眠”)时,触发“睡眠时间”上下文。在这种情况下,我使用了“ ToggleInternetSharing”操作。

单击“睡眠”后,我会收到一条警报,提示Internet共享已关闭,过了一会儿(似乎永远,但可能只有10或20秒),Mac进入了睡眠状态。

我有第二条规则,以便在唤醒事件时触发上下文“ Waking Up”,并具有将“ ToggleInternetSharing”设置为打开的动作。

我的规则和动作:

在此处输入图片说明 在此处输入图片说明

尝试一下!

这仅仅是ControlPlane可以做的事情的表面。


惊人的应用程序!它就像一个魅力!非常感谢您的详细解释。此外,我确实检查了该应用程序是否完全免费且开源。对我来说,这是赞成使用它的
优点

我已经了解ControlPlane一段时间了,但是没有使用它。您的问题是探索其功能的绝佳理由-谢谢。
吉尔比(Gilby),2013年

在这里+1 ... OS X Mavericks v10.9.4和仍然像魅力一样工作。感谢的
转基因生物

似乎是一个很好的应用程序!不幸的是,暂时在El Capitan中切换Internet共享是行不通的(在Sierra中也可能行不通)。
Winterflags

2

如果您正在运行Lion, InternetSharing则明确锁定SystemSleep。看一下:

strings /usr/libexec/InternetSharing | grep SystemSleep

该命令的输出:DenySystemSleep是InternetSharing有意阻止内核进入睡眠状态的证明。对此保护措施有一个简单的解释:一旦启动InternetSharing,此Mac的客户端可能会将其用作路由器以访问Internet。许多事情可能会自动在此Internet连接上运行,而无需屏幕前人员的任何知识。

此连接只能由启动它的系统的管理员来破坏,而不是任何自动的系统行为。

这是安全的行为。

因此,InternetSharing当Mac睡眠按以下顺序安排4个事件时,正确的确保方法已关闭:

InternetSharing off
    system sleep
    system wakeup
InternetSharing on

这是由提供的计划ControlPlane


我在上述命令中的输出是DenySystemSleep。尽管找到了字符串,但是我无法sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.nat用来更改行为。您能否扩大回答范围?
Irae Carvalho

1
我相信@ daniel-azuelos的意思是证明InternetSharing负责。他建议的命令通过InternetSharing二进制文件进行搜索,并找到与阻止睡眠有关的字符串。这有助于确定可能是造成睡眠障碍的原因,而不是导致您想要的行为的原因。
Graham Miln

1

使启用了Internet共享的Mac能够进入睡眠状态是不切实际的。

Internet共享功能是路由器的软件版本:它充当Internet的网关,DHCP服务器,防火墙和DNS转发器。它的功能就像您可以从当地零售商购买的路由器一样。而且是免费的。

但是,这有一个很大的缺点:如果充当网关的Mac已关闭或处于睡眠状态,则其他计算机将无法联机。

这就是Internet共享阻止您的计算机进入睡眠状态的原因。

但是我可以在睡眠时共享文件/ iTunes /屏幕

是的,您可以共享所有这些东西,以及更多。但是,当您访问这些文件时,Mac会唤醒。这称为“按需唤醒”和“ Bonjour睡眠代理”

当Mac处于睡眠状态时,它可使网络连接保持“活动”状态;它正在监听Bonjour的“数据包”以唤醒计算机。这由Airport设备(网络适配器)本身处理;不是电脑。当Mac收到“唤醒数据包”时,Mac将会唤醒,您可以开始共享资源。

Bonjour 1是一个零配置发现服务,它使用多播域名服务(mDNS),这是一种UDP 2协议(它是广播的,不能路由),它是一种小型,无状态且最少的面向消息的传输。

基本上,UDP(Bonjour所基于的)非常适合向计算机发送一条消息,说“唤醒!”。

为了浏览Internt(使用Mac网关后面的计算机),您需要基于TCP的完整协议栈。它将需要DHCP,NAT,防火墙等,这意味着必须先启动所有这些服务,然后才能允许客户端浏览Web。这将导致大量的延迟。

回到更实用的方法,如果您的Mac确实进入睡眠状态并充当网关,它将永远不会进入睡眠状态,或者像失眠严重的人一样起伏不定。


1 Bonjour是Apple零配置网络(zeroconf)的实现,这是一组技术,其中包括服务发现,地址分配和主机名解析。Bonjour使用多播域名系统(mDNS)服务记录来定位诸如打印机,其他计算机之类的设备以及这些设备在本地网络上提供的服务。

2 UDP是最小的面向消息的传输层协议。UDP不为上层协议提供消息传递的任何保证,并且UDP层一旦发送便不保留UDP消息的状态。它很简单,适合在没有完整协议栈(例如DHCP和琐碎文件传输协议)的情况下进行引导或其他用途。


艾伦,感谢您的见解。在我的特定情况下,由于MBP是我通过Thunderbolt Bridge连接到iMac以获得以太网(100 Mbit而不是30 Mbit Wifi)的优势,因此我仅使用Internet共享。我不将Internet共享用作“路由器”。因此,对我来说,通过脚本或自动化找到一种方法来启用/禁用Internet共享(或强制睡眠)是很实际的。
Winterflags

Internet共享把你的Mac变成一个路由器-这是一个什么样的互联网分享功能的核心功能。
艾伦

我了解,但我不是用技术术语来谈论它。我仅在通过Thunderbolt Bridge将MBP连接到iMac时使用Internet共享,因此,无论iMac是否已连接,都永远不要进入睡眠状态是没有意义的。因此,寻找一种解决方法,可能涉及脚本。
Winterflags

1
好吧,您不会因为Internet共享而阻止MBP进入睡眠状态,但是如果您想要“替代方法”,请看这里: apple.stackexchange.com/questions/2488/…–
艾伦

谢谢-我已经尝试过这些答案,但无法让它们与El Capitan一起使用(可能是由于SIP),但需要进一步调查。
Winterflags


0

当计算机的电源管理单元使设备进入睡眠状态时,它将进入低功耗模式。您计算机上的平均可执行代码不是以正常方式运行的:计算机保持足够的能力来刷新内存(如有必要),几乎没有其他功能。当计算机进入睡眠状态时,您将无法进行通用计算。

但是,您应该考虑一个很好的选择。而不是让整个装置处于休眠状态,而是在中检出display sleep System Preferences -> Energy Saver。在我的用例中,我有一个热角设置(可以在中启用System Preferences -> Desktop & Screen Saver -> Screen Saver),这样当我午餐时需要锁定屏幕和/或仅使显示器进入睡眠状态时,我将移至底部-左上角。对我来说效果很好,计算机无法从睡眠例程恢复,并且我遗忘的任何长时间运行的进程都不会中断。就您而言,这意味着您的WiFi热点不会丢失。


1
这确实非常有用,我使用<kbd> ^ </ kbd> + <kbd>⇧</ kbd> + <kbd>⏏</ kbd>来做到这一点。但这不是我想要的。电脑睡觉时不需要互联网共享。我需要计算机真正入睡,甚至关闭共享和wifi。将编辑我的问题以澄清。仍然感谢=)
Irae Carvalho 2012年

0

一段时间不活动后,可以使用电源管理器使Mac进入睡眠状态。Power Manager可以推翻阻止空闲睡眠(包括Internet共享)的进程和应用程序。

用户指南逐步介绍了如何进行设置:

更好的不活动触发睡眠

电源管理器提供了一种替代方法。我们提供不活动触发的睡眠。闲置时间与空闲时间的测量方法不同;闲置是一种更简单的度量,它完全由用户活动决定。

另外,以下食谱显示了如何创建电源管理器事件,以使Mac在一段时间不活动后进入睡眠状态

电源管理器:不活动任务后关闭电源

免责声明:我为开发Power Manager的公司工作。


主动启用Internet共享对我不起作用。-1浪费了我一小时的生命。
Winterflags

您想实现什么,什么对您没有用?
格雷厄姆·米尔恩,2016年

与OP和您的答案相同。我配置了“不活动睡眠”,希望它可以在“ 系统偏好设置”>“共享”中启用Internet共享后“强制睡眠” 。它没有,但是如果禁用Internet共享,它将激活睡眠。
Winterflags

1
电源管理器向macOS发出睡眠请求。如另一个问题所示,如果您在睡眠方面遇到问题,则相同的睡眠问题也将影响第三方应用程序发出的睡眠请求。当然,在了解您的情况时,我可能会犯错或简单地犯错。希望您能找到解决方案。
Graham Miln

1
明确要求睡眠时,macOS始终会睡眠-Finder>苹果(菜单)>睡眠。不睡眠的行为表明Mac出现问题。
Graham Miln
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.