Skip to content

HaoHao233/MacLock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MacLock

macOS 14+ Swift 5.9 Java 8+ Spring Boot 2.7 MIT License

通过手机或网页远程锁定你的 Mac 屏幕


MacLock 是一个轻量级的远程锁屏解决方案,由三个组件组成:

  • macOS 客户端 - 常驻菜单栏的 Swift 应用
  • 中继服务器 - Java Spring Boot 后端服务
  • 移动端控制器 - 简洁的 Web 页面

功能特性

  • 一键远程锁定 Mac 屏幕
  • 菜单栏常驻,无 Dock 图标干扰
  • 支持开机自启动
  • 断线自动重连(5秒间隔)
  • 实时连接状态显示
  • 跨平台控制(手机浏览器、PC 浏览器均可)

系统架构

┌─────────────┐     HTTP POST      ┌─────────────┐      SSE Push       ┌─────────────┐
│   手机/Web   │ ───────────────▶  │   服务端     │  ───────────────▶   │   Mac App   │
│  (控制端)    │    /api/lock      │  (中继)      │    lock event      │  (被控端)    │
└─────────────┘                    └─────────────┘                     └─────────────┘

通信流程:

  1. Mac 客户端启动后通过 SSE (Server-Sent Events) 连接到服务端
  2. 用户在手机/网页点击锁屏按钮,发送 HTTP POST 请求到服务端
  3. 服务端通过 SSE 推送 lock 事件到所有已连接的 Mac 客户端
  4. Mac 客户端收到事件后执行锁屏操作

快速开始

1. 启动服务端

环境要求: Java 8+, Maven 3.6+

cd server
mvn clean package
java -jar target/maclock-server-1.0.0.jar

服务端默认运行在 http://localhost:8080

2. 运行 Mac 客户端

环境要求: macOS 14+, Xcode 15+ (或 Swift 5.9+)

cd app/MacLock
swift build
.build/debug/MacLock

或使用 Xcode 打开项目直接运行。

3. 配置客户端

  1. 点击菜单栏的锁图标
  2. 选择「设置服务器」
  3. 输入服务器地址(如 http://192.168.1.100:8080
  4. 点击「连接」

4. 使用移动端控制

在手机浏览器中打开 mobile/index.html(需要先修改其中的 SERVER_URL 为你的服务器地址),或直接访问:

http://你的服务器地址:8080/mobile/index.html

提示:可以将服务端的 mobile/index.html 部署为静态资源,方便手机访问。

项目结构

mac_lock/
├── app/MacLock/                    # Swift macOS 客户端
│   ├── MacLock/
│   │   ├── MacLockApp.swift        # 应用入口 + 菜单栏管理
│   │   ├── SettingsWindow.swift    # 设置界面
│   │   ├── LockScreenService.swift # 锁屏实现 (AppleScript)
│   │   ├── SSEClient.swift         # SSE 客户端
│   │   ├── LaunchAtLoginManager.swift # 开机启动管理
│   │   ├── Info.plist              # 应用配置
│   │   └── MacLock.entitlements    # 权限配置
│   └── Package.swift               # Swift Package 配置
│
├── server/                         # Java Spring Boot 服务端
│   ├── src/main/java/com/maclock/
│   │   ├── MacLockApplication.java       # Spring Boot 入口
│   │   ├── controller/
│   │   │   └── LockController.java       # REST API 控制器
│   │   └── service/
│   │       └── SseService.java           # SSE 广播服务
│   └── pom.xml                     # Maven 配置
│
└── mobile/                         # 移动端 Web 控制页面
    └── index.html                  # 单页面控制界面

API 接口

SSE 连接

GET /api/sse/connect?clientId={clientId}

Mac 客户端调用,建立 SSE 长连接。

事件类型:

  • connected - 连接成功
  • lock - 锁屏指令

发送锁屏指令

POST /api/lock

响应示例:

{
  "success": true,
  "message": "锁屏指令已发送",
  "clients": 1
}

获取状态

GET /api/status

响应示例:

{
  "clients": 1
}

技术实现

Mac 客户端

  • 锁屏方式: 通过 AppleScript 模拟 Ctrl+Cmd+Q 快捷键
  • UI 框架: SwiftUI + AppKit (NSPanel)
  • 网络通信: URLSession 实现 SSE 客户端
  • 开机启动: SMAppService (macOS 13+) / SMLoginItemSetEnabled
  • 菜单栏: NSStatusItem

服务端

  • 框架: Spring Boot 2.7
  • SSE 实现: SseEmitter
  • 心跳检测: 每 5 秒发送 ping,自动清理失效连接
  • 依赖: Hutool (工具库), Lombok

移动端

  • 纯静态页面: 无需构建,直接使用
  • 响应式设计: 适配手机屏幕
  • Fetch API: 发送锁屏请求

部署建议

服务端部署

  1. 内网部署(推荐)

    • 将服务端部署在家庭/办公网络的服务器上
    • Mac 和手机连接同一网络即可使用
  2. 公网部署

    • 需要有公网 IP 或使用内网穿透工具
    • 建议配置 HTTPS 和访问认证

Docker 部署(可选)

FROM openjdk:8-jre-slim
COPY target/maclock-server-1.0.0.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]
docker build -t maclock-server .
docker run -d -p 8080:8080 maclock-server

安全说明

  • 本项目设计用于个人/家庭内网环境
  • 如需公网部署,强烈建议:
    • 添加访问认证机制
    • 使用 HTTPS
    • 限制 IP 访问范围
  • 锁屏功能需要 macOS 的辅助功能权限(首次使用会弹出授权请求)

常见问题

Q: Mac 客户端无法锁屏?

A: 首次运行时,macOS 会请求「辅助功能」权限。请在「系统设置 → 隐私与安全性 → 辅助功能」中允许 MacLock。

Q: 连接状态一直显示「未连接」?

A: 检查以下几点:

  1. 服务端是否正常运行
  2. 服务器地址是否正确(包含 http:// 前缀)
  3. 防火墙是否阻止了 8080 端口

Q: 如何让 Mac 客户端开机自启?

A: 在设置界面勾选「开机时自动启动」选项。

开发计划

  • 添加密码/Token 认证
  • 支持多 Mac 设备管理
  • iOS/Android 原生 App
  • 支持更多远程操作(休眠、关机等)
  • Web 管理后台

贡献

欢迎提交 Issue 和 Pull Request!

许可证

MIT License


Made with ❤️ for Mac users

About

通过手机或浏览器远程锁定 Mac 屏幕。轻量级解决方案:macOS 菜单栏应用 + Spring Boot 服务端 + 移动端网页控制器。

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors