一个基于 Web 的远程关机/重启控制应用。通过安全的 HTTPS 连接,你可以在任何设备上通过浏览器远程控制电脑的关机和重启操作。
- 🔒 安全加密:使用自签名证书提供 HTTPS 加密连接
- 📱 跨平台支持:支持 Windows、Linux 系统
- 🌐 响应式界面:现代化的 Web 界面,支持桌面和移动端访问
- 📲 PWA 支持:可安装为 Progressive Web App,支持离线访问
- ⚡ 轻量高效:后端采用 Rust 编写,性能优异,资源占用低
- 🔄 开机自启:支持系统启动时自动运行服务
.
├── client/ # Web 前端项目
│ ├── apps/web/ # React + Vite + TanStack Router 应用
│ └── packages/ui/ # 共享 UI 组件库
├── server/ # Rust 后端服务
│ ├── src/ # 源代码
│ ├── config.toml # 配置文件模板
│ ├── cert.pem # SSL 证书
│ └── key.pem # SSL 私钥
├── dist/ # 构建后的分发目录
│ ├── shutdown-auto # Linux 后端程序
│ ├── shutdown-auto.exe # Windows 后端程序
│ ├── web/ # 前端静态文件
│ ├── config.toml # 配置文件
│ ├── install.sh # Linux 安装脚本
│ └── install.ps1 # Windows 安装脚本
├── build.sh # Linux 构建脚本
├── build.ps1 # Windows 构建脚本
├── install.sh # Linux 安装脚本(根目录)
└── install.ps1 # Windows 安装脚本(根目录)
- Linux: systemd 初始化系统(大多数现代 Linux 发行版)
- Windows: Windows 10/11,PowerShell
- 网络: 确保客户端设备可以访问服务器所在机器的 IP 地址和端口
# 赋予构建脚本执行权限
chmod +x build.sh
# 执行构建
./build.sh# 以管理员身份运行 PowerShell
.\build.ps1构建完成后,所有必要文件将打包到 dist 目录中,并生成 shutdown-remote.zip 压缩包。
-
解压安装包(如果使用的是 zip 包):
unzip shutdown-remote.zip -d shutdown-remote cd shutdown-remote -
运行安装脚本:
chmod +x install.sh sudo ./install.sh
-
安装过程会自动完成:
- 复制文件到
/usr/local/share/shutdown-remote - 创建 systemd 服务
shutdown-remote.service - 设置开机自启动
- 立即启动服务
- 复制文件到
-
查看服务状态:
systemctl status shutdown-remote
-
查看实时日志:
journalctl -u shutdown-remote -f
-
解压安装包:
- 右键点击
shutdown-remote.zip,选择"全部提取"
- 右键点击
-
以管理员身份运行 PowerShell:
- 在开始菜单搜索 "PowerShell"
- 右键点击,选择"以管理员身份运行"
-
进入解压目录并执行安装:
# 切换到解压目录 cd C:\Users\你的用户名\Downloads\shutdown-remote # 如果提示执行策略限制,先运行以下命令 Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned # 执行安装脚本 .\install.ps1
-
安装过程会自动完成:
- 复制文件到
%USERPROFILE%\shutdown-remote - 创建计划任务
ShutdownRemoteAutoStart - 设置开机自启动
- 复制文件到
服务的配置文件位于:
- Linux:
/usr/local/share/shutdown-remote/config.toml - Windows:
%USERPROFILE%\shutdown-remote\config.toml
默认配置示例:
[server]
port = 8443 # 服务端口
https = true # 是否启用 HTTPS
[security]
shutdown_key = "your-secret-key-here" # 关机操作的安全密钥修改配置后需要重启服务:
# Linux
sudo systemctl restart shutdown-remote
# Windows
# 在任务计划程序中找到并重新运行任务,或重启电脑安装完成后,你可以通过以下方式访问:
-
本地访问:
https://localhost:8443 -
局域网访问:
https://<服务器IP地址>:8443 -
首次访问:
- 由于使用自签名证书,浏览器会显示安全警告
- 点击"高级" → "继续访问"(Chrome)或"接受风险并继续"(Firefox)
本应用支持 Progressive Web App (PWA),可以在手机上获得类似原生应用的体验。
- 使用 Chrome 浏览器访问应用地址
- 点击浏览器菜单(三个点)→ "添加到主屏幕"
- 或者点击地址栏右侧的 "安装" 图标(如果显示)
- 重要:建议通过浏览器弹出的"安装应用"提示进行安装,这样可以获得更好的离线支持和无地址栏体验
- 使用 Safari 浏览器访问应用地址
- 点击底部分享按钮(方框带箭头图标)
- 选择 "添加到主屏幕"
- 点击右上角的"添加"
- ✅ 必须使用 HTTPS:PWA 的 Service Worker 只能在 HTTPS 环境下工作(localhost 除外)
- ✅ 首次加载需联网:确保首次访问时网络正常,以便缓存必要资源
- ✅ 清除缓存重装:如果遇到问题,可以尝试清除站点数据后重新安装
- 打开应用:在浏览器中访问
https://<IP地址>:8443 - 查看设备信息:首页会显示当前设备的系统信息、CPU、内存等
- 执行关机:点击"关机"按钮,输入配置的安全密钥确认
- 执行重启:点击"重启"按钮,输入配置的安全密钥确认
你也可以通过 HTTP API 直接控制:
# 获取设备状态
curl -X POST https://<IP>:8443/getStatus \
-H "Content-Type: application/json" \
-d '{"key": "your-secret-key"}'
# 执行关机
curl -X POST https://<IP>:8443/shutdown \
-H "Content-Type: application/json" \
-d '{"key": "your-secret-key"}'
# 执行重启
curl -X POST https://<IP>:8443/reboot \
-H "Content-Type: application/json" \
-d '{"key": "your-secret-key"}'# 1. 停止服务
sudo systemctl stop shutdown-remote
# 2. 禁用开机自启
sudo systemctl disable shutdown-remote
# 3. 删除服务文件
sudo rm /etc/systemd/system/shutdown-remote.service
# 4. 重载 systemd 配置
sudo systemctl daemon-reload
# 5. 删除应用文件
sudo rm -rf /usr/local/share/shutdown-remote
# 6. (可选)清理日志
sudo journalctl --vacuum-time=1s-
删除计划任务:
- 按
Win + R,输入taskschd.msc,回车 - 在左侧找到"任务计划程序库"
- 找到
ShutdownRemoteAutoStart任务 - 右键点击,选择"删除"
- 按
-
删除应用文件:
- 打开文件资源管理器
- 进入
C:\Users\你的用户名\ - 删除
shutdown-remote文件夹
-
或使用 PowerShell 一键卸载:
# 以管理员身份运行 Unregister-ScheduledTask -TaskName "ShutdownRemoteAutoStart" -Confirm:$false Remove-Item -Path "$env:USERPROFILE\shutdown-remote" -Recurse -Force
问题:浏览器显示"无法连接"或"连接被拒绝"
解决方案:
-
检查服务是否正在运行:
# Linux systemctl status shutdown-remote # Windows # 查看任务计划程序中的任务状态
-
检查防火墙设置,确保端口(默认 8443)已开放
-
确认服务器和客户端在同一网络中
问题:访问时浏览器提示"您的连接不是私密连接"
解决方案:
- 这是正常现象,因为使用的是自签名证书
- 点击"高级" → "继续访问"即可
- 如果需要正式证书,可以替换
cert.pem和key.pem文件
问题:添加到主屏幕后,离线无法访问
解决方案:
- 确认使用 HTTPS 访问(localhost 除外)
- 首次访问时确保网络正常,让 Service Worker 完成缓存
- 尝试清除浏览器缓存后重新安装 PWA
- 在 Chrome 中访问
chrome://serviceworker-internals/检查 SW 状态
问题:点击按钮后没有反应
解决方案:
-
检查
config.toml中的shutdown_key是否正确 -
查看服务日志确认是否有错误:
# Linux journalctl -u shutdown-remote -e # Windows # 查看事件查看器或程序输出
-
确认后端程序有执行关机/重启的系统权限
问题:systemctl start shutdown-remote 失败
解决方案:
-
查看详细错误信息:
journalctl -u shutdown-remote -e
-
常见原因:
- 端口被占用:修改
config.toml中的端口号 - 证书文件缺失:确认证书文件存在且可读
- 权限问题:确保文件所有权正确
- 端口被占用:修改
- 前端:React 18, Vite, TanStack Router, TypeScript, TailwindCSS
- UI 组件:shadcn/ui
- PWA:vite-plugin-pwa, Workbox
- 后端:Rust, Axum, tokio, rustls
- 状态管理:Zustand
# 1. 启动后端(开发模式)
cd server
cargo run
# 2. 启动前端(新终端)
cd client/apps/web
pnpm dev前端开发服务器运行在 http://localhost:5173,会自动代理 API 请求到后端。
参见上方的"从源码构建"部分。
MIT License
欢迎提交 Issue 和 Pull Request!
如有问题,请提交 Issue 或通过以下方式联系:
- 提交 GitHub Issue
- 查看项目文档
享受便捷的远程控制体验! 🎉