我使用 SelfControl 应用程序。
有没有办法总是跑步?
答案1
是的。只需从/Applications
文件夹中打开“系统偏好设置”,选择“帐户”,在左侧列表中突出显示您的用户名后,选择“登录项”选项卡。将 SelfControl 拖放到列表中,或单击“+”按钮并导航到其位置。
然后,当您登录时,SelfControl 将始终启动。
您需要下载并安装 Daniel Jalkut 的可用钥匙串脚本,以便快速安全地访问您的管理员密码,从而激活 SelfControl。
将密码添加到钥匙串
打开钥匙串访问.app。通过键入 Cmd-N 或转到文件 » 新密码项... 来创建新密码。在钥匙串项名称下,键入“SelfControl”。在下一个字段中输入任意帐户名称,在密码字段中键入您的用户帐户密码(您将使用该密码在 OS X 中验证任何内容)。单击“添加”,现在您的钥匙串中应该有一个名为“SelfControl”的新应用程序密码。
创建 AppleScript
粘贴以下内容(原文来自这里)到新窗口AppleScript 编辑器.app:
on run argv
set defaultTime to 1440
try
set myTime to item 1 of argv as number
on error
set myTime to defaultTime
end try
tell application "Usable Keychain Scripting"
tell current keychain
set myPass to (password of first generic item ¬
whose name contains "SelfControl")
-- eliminate invisible characters, or "gremlins," from password
set x to quoted form of myPass
set myPass to do shell script "echo " & x & " | perl -pe 's/[^[:print:]]//g'"
end tell
end tell
tell application "SelfControl" to activate
tell application "System Events"
tell process "SelfControl"
tell slider of window "SelfControl" to set value to myTime
click button "Start" of window "SelfControl"
end tell
tell window 1 of process "SecurityAgent"
with timeout of 15 seconds
repeat
set tryAgain to false
try
set value of text field 2 of scroll area 1 of group 1 to myPass
on error
delay 1
set tryAgain to true
end try
if not tryAgain then exit repeat
end repeat
click button 2 of group 2
end timeout
end tell
end tell
end run
我们defaultTime
在这里设置为 1440(即 24 小时),这样您就可以在最长时间内自动启动 SelfControl。
现在,从 AppleScript 编辑器中,按以下方式将此文件保存到某处文件 » 保存例如/Users/your-username/SelfControl.scpt
,它将位于我们的主文件夹中。记住该路径。
创建 launchd 条目
然后打开您最喜欢的文本编辑器或房产列表编辑器.app它随 Snow Leopard 上的 Mac OS X Dev 工具一起提供,或者集成到 Lion 上的 Xcode 中。
无论哪种方式,粘贴以下内容,但请确保相应地更改脚本的路径(它是我们上面记住的路径):
<?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>my.selfcontrol.launcher</string>
<key>ProgramArguments</key>
<array>
<string>osascript</string>
<string>/Users/your-username/SelfControl.scpt</string>
</array>
<key>StartInterval</key>
<integer>86400</integer>
<key>RunAtLoad</key>
<false/>
<key>KeepAlive</key>
<false/>
</dict>
</plist>
将此文件以.plist
扩展名保存在 下/Users/your-username/Library/LaunchAgents/my.selfcontrol.launcher.plist
。如果 Library 文件夹被隐藏,您可以打开 Finder,按下CmdShiftG并粘贴~/Library
即可打开它。
加载 launchd 条目
最后,打开终端并运行:
launchctl load ~/Library/LaunchAgents/my.selfcontrol.launcher.plist
这将告诉 launchd 每二十四小时打开 AppleScript 并启动 SelfControl 二十四小时。
因为它在,所以~/Library/LaunchAgents
当您登录时它将自动加载。如果您想要恢复您的计算机,请将load
上面的命令替换为unload
,然后等待剩余的 SelfControl 时间到期。
答案2
你可以很容易地让 SelfControl 阻止任意长度的时间--虽然我们没有提供“无限”设置,但我认为一年的封锁可以实现大部分相同的目的。然后您可以随时重新启动它。要封锁长达一年,首先关闭自我控制, 然后打开终端并运行以下命令:
defaults write org.eyebeam.SelfControl MaxBlockLength -int 31556900
defaults write org.eyebeam.SelfControl BlockLengthInterval -int 432000
重新打开 SelfControl,滑块将一直移动到一年(间隔 5 天)。您可以使用以下方法完成此操作任意块长度和间隔,尽管我们的显示目前无法显示年份——它可能会以天或周为单位显示长度。
有关详细信息,请参阅For more information, see本文在我们的 wiki 上。不过请注意,如果您在终端中搞砸了您的计算机,我们无法提供支持,因此这仅适用于专业用户。有关此类调整的更多信息最终将在我们的新网站。
答案3
这是一个有助于安排 SelfControl 的小实用程序: https://github.com/andreasgrill/auto-selfcontrol 有了它,您可以轻松创建一个每天从凌晨 12 点到晚上 11:59 运行的计划。此实用程序直接使用 SelfControl 的命令行 API,无需将您的管理员密码存储在文件中。
答案4
另一个选择是设置一个 cronjob 来进行自我控制。这必须由具有管理员权限的人从终端完成。为此,首先输入
id -u $USER
并记住这个数字,说XXXX
。接下来使用以下命令打开根 crontab 文件
sudo crontab -e
系统将提示您输入密码,并且这只适用于管理员帐户。现在添加以下几行(前两行是解释最后一行的注释):
# Cron syntax: minute hour day_of_month month day_of_week <command>
# Run self-control at 11pm every day for user XXXX = $(id -u $USER)
0 23 * * * /Applications/SelfControl.app/Contents/MacO/org.eyebeam.SelfControl XXXX --install
XXXX
您在第一步中获得的数字在哪里。如果您想从周一到周五上午 8:30 自动运行 selfcontrol,那么 crontab 行的开头将是
30 10 * * 1-5 /Applications/...
您可以根据需要添加任意数量的 crontab 行,以安排在不同时间运行任意命令。顺便说一句,默认情况下,您将使用以下方式编辑 crontab 文件六,因此您可以使用 保存文件ZZ
,例如。
将 Selfcontrol 作为 root cronjob 运行的优点是,这样它已经具有“管理员权限”(root 访问),并且不需要为其提供管理员密码。Selfcontrol 将使用当前设置运行。您可以使用 selfcontrol 应用程序或从命令行使用以下命令查看这些设置
defaults read org.eyebeam.SelfControl
类似地,您可以使用 修改设置defaults write ...
,这样您就可以确保 selfcontrol 使用您想要的设置运行,方法是在启动之前添加另一个 cronjob 来设置 selfcontrol。例如,添加以下行
59 22 * * * /usr/bin/defaults write org.eyebeam.SelfControl BlockDuration 420
将会把自控运行的时长设置为每天 22:59 的 7 小时。