mac-mini-as-headless-server

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Configure macOS for Server Use

将macOS配置为服务器使用

Overview

概述

Configures macOS for unattended 24/7 server operation by disabling sleep, screen saver, screen lock, and App Nap, while enabling Wake-on-LAN, auto-restart after power failure, and SSH remote login.
Requires
sudo
.
Target: Mac Mini or any Mac used as a headless server.
通过禁用睡眠、屏幕保护程序、屏幕锁定和App Nap,同时启用Wake-on-LAN、断电后自动重启和SSH远程登录,将macOS配置为无人值守的7×24小时服务器运行状态。
需要
sudo
权限。
适用对象:Mac Mini或任何用作无头服务器的Mac。

When to Use

使用场景

  • Setting up a Mac as a home server, CI runner, or always-on machine
  • Preparing a Mac Mini for headless/remote-only operation
  • Troubleshooting a Mac that keeps sleeping, locking, or becoming unreachable
  • 将Mac设置为家庭服务器、CI运行器或始终在线设备
  • 为Mac Mini配置无头/仅远程访问模式
  • 排查Mac频繁睡眠、锁定或无法访问的问题

Quick Reference

快速参考

SettingCommandEffect
Screen saver off
defaults -currentHost write com.apple.screensaver idleTime -int 0
Disables screen saver activation
Screen lock off
defaults write com.apple.screensaver askForPassword -int 0
No password on wake
Lock delay off
defaults write com.apple.screensaver askForPasswordDelay -int 0
Immediate effect
System sleep off
pmset -c sleep 0
Never sleep
Display sleep off
pmset -c displaysleep 0
Never turn off display
Disk sleep off
pmset -c disksleep 0
Never spin down disks
Dim before sleep off
pmset -c halfdim 0
No pre-sleep dimming
Wake-on-LAN
pmset -c womp 1
Wake on network access
Auto-restart
pmset -c autorestart 1
Restart after power loss
App Nap off
defaults write NSGlobalDomain NSAppSleepDisabled -bool YES
Prevents app throttling
SSH on
systemsetup -setremotelogin on
Enables Remote Login
设置命令效果
关闭屏幕保护程序
defaults -currentHost write com.apple.screensaver idleTime -int 0
禁用屏幕保护程序启动
关闭屏幕锁定
defaults write com.apple.screensaver askForPassword -int 0
唤醒时无需密码
关闭锁定延迟
defaults write com.apple.screensaver askForPasswordDelay -int 0
立即生效
关闭系统睡眠
pmset -c sleep 0
永不睡眠
关闭显示器睡眠
pmset -c displaysleep 0
永不关闭显示器
关闭磁盘睡眠
pmset -c disksleep 0
永不停止磁盘转动
关闭睡眠前变暗
pmset -c halfdim 0
睡眠前不降低亮度
启用Wake-on-LAN
pmset -c womp 1
网络访问时唤醒
启用自动重启
pmset -c autorestart 1
断电后自动重启
关闭App Nap
defaults write NSGlobalDomain NSAppSleepDisabled -bool YES
阻止应用节流
启用SSH
systemsetup -setremotelogin on
启用远程登录

Implementation

实现步骤

Run as root.
REAL_USER
is resolved from
$SUDO_USER
to apply per-user defaults correctly.
bash
#!/usr/bin/env bash
set -euo pipefail
以root身份运行。
REAL_USER
$SUDO_USER
获取,以正确应用每个用户的默认设置。
bash
#!/usr/bin/env bash
set -euo pipefail

Require root

Require root

if [[ $EUID -ne 0 ]]; then echo "Error: run with sudo." exit 1 fi
REAL_USER="${SUDO_USER:-$USER}"
if [[ $EUID -ne 0 ]]; then echo "Error: run with sudo." exit 1 fi
REAL_USER="${SUDO_USER:-$USER}"

1. Disable screen saver

1. Disable screen saver

sudo -u "$REAL_USER" defaults -currentHost write com.apple.screensaver idleTime -int 0
sudo -u "$REAL_USER" defaults -currentHost write com.apple.screensaver idleTime -int 0

2. Disable screen lock password

2. Disable screen lock password

sudo -u "$REAL_USER" defaults write com.apple.screensaver askForPassword -int 0 sudo -u "$REAL_USER" defaults write com.apple.screensaver askForPasswordDelay -int 0
sudo -u "$REAL_USER" defaults write com.apple.screensaver askForPassword -int 0 sudo -u "$REAL_USER" defaults write com.apple.screensaver askForPasswordDelay -int 0

3. Prevent all sleep (charger profile — only profile on Mac Mini)

3. Prevent all sleep (charger profile — only profile on Mac Mini)

pmset -c sleep 0 pmset -c displaysleep 0 pmset -c disksleep 0 pmset -c halfdim 0
pmset -c sleep 0 pmset -c displaysleep 0 pmset -c disksleep 0 pmset -c halfdim 0

4. Wake-on-LAN

4. Wake-on-LAN

pmset -c womp 1
pmset -c womp 1

5. Auto-restart after power failure

5. Auto-restart after power failure

pmset -c autorestart 1
pmset -c autorestart 1

6. Disable App Nap globally

6. Disable App Nap globally

sudo -u "$REAL_USER" defaults write NSGlobalDomain NSAppSleepDisabled -bool YES
sudo -u "$REAL_USER" defaults write NSGlobalDomain NSAppSleepDisabled -bool YES

7. Enable SSH

7. Enable SSH

systemsetup -setremotelogin on 2>/dev/null || { launchctl load -w /System/Library/LaunchDaemons/ssh.plist 2>/dev/null || true }
systemsetup -setremotelogin on 2>/dev/null || { launchctl load -w /System/Library/LaunchDaemons/ssh.plist 2>/dev/null || true }

Verify

Verify

pmset -g
undefined
pmset -g
undefined

Common Mistakes

常见错误

  • Running without sudo
    pmset
    and
    systemsetup
    require root;
    defaults
    commands must run as the real user via
    sudo -u
  • Forgetting
    -c
    flag
    — Without
    -c
    (charger/AC), settings apply to battery profile, which doesn't exist on Mac Mini
  • Expecting immediate effect — Screen saver and password changes may require logout/restart
  • FileVault blocking auto-login — Auto-login (System Settings > Users & Groups > Login Options) requires FileVault off
  • 未使用sudo运行
    pmset
    systemsetup
    需要root权限;
    defaults
    命令必须通过
    sudo -u
    以实际用户身份运行
  • 忘记
    -c
    参数
    — 如果没有
    -c
    (充电器/交流电),设置会应用到电池模式,而Mac Mini没有电池模式
  • 期望立即生效 — 屏幕保护程序和密码设置的更改可能需要注销或重启才能生效
  • FileVault阻止自动登录 — 自动登录(系统设置 > 用户与群组 > 登录选项)需要关闭FileVault

Reverting

恢复设置

To restore display sleep later:
bash
sudo pmset -c displaysleep 10  # 10 minutes
之后如需恢复显示器睡眠:
bash
sudo pmset -c displaysleep 10  # 10 minutes