macOS 上 配置 Launchctl 运行 Clash Meta(Mihomo)内核服务
status
Published
type
Post
slug
use-launchctl-to-start-clash-meta-kernel-on-macos
date
Nov 12, 2024
tags
Mac
Network
Config
summary
文章介绍了如何在 macOS 上使用
launchctl
配置和启动 Clash Meta(Mihomo)内核服务。首先,讲解了 launchd
和 launchctl
的基本概念及常用命令,随后提供了 clash.plist
配置文件的示例,说明了如何设置服务标识、运行参数和日志路径。接着,详细描述了如何移动内核和配置文件到相应路径,并以 root 权限启动服务。最后,介绍了如何通过 Web 面板管理 Clash,包括修改控制 API 端口和设置鉴权的建议。背景
Clash 是一个简单而强大的网络代理工具,在原有的 Clash Premium 内核停更后就切换到了 Meta (Mihomo)内核,macOS 上就直接使用了 客户端,但最近可能是 macOS 15 的问题,开启 tun 接口有点问题。想了想还是干脆和在 Linux 上一样直接裸跑内核服务。下面记录下配置:
ClashX.Meta
Github
ClashX.Meta
Owner
MetaCubeXUpdated
Nov 20, 2024Launchd
launchd
是 macOS 的系统和服务管理工具,负责启动、管理和停止后台进程。它通过 plist
配置文件来定义服务的启动行为,包括服务依赖、运行时环境以及日志管理等。launchd
管理的服务可以是系统级别的守护进程,也可以是用户级别的应用程序和工具。launchctl
是与 launchd
配合使用的命令行工具,允许用户手动加载、启动、停止和卸载服务。通过 launchctl
,用户可以查看正在运行的服务、控制服务状态,或在需要时重新加载服务配置。launchctl
常用命令:# 加载并启动指定的服务。 launchctl load xxx # 停止并卸载指定的服务。 launchctl unload xxx # 列出所有已加载的服务及其状态。 launchctl list # 启动或停止指定的服务。 launchctl start xxx launchctl stop xxx
plist 配置文件
编写配置文件如下:(此处以用户名 app 为例)
clash.plist
<?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>clash</string> <!-- 系统启动并加载这个服务时自动运行 --> <key>RunAtLoad</key> <true /> <!-- 限定为系统会话类型 --> <key>LimitLoadToSessionType</key> <array> <string>System</string> </array> <!-- 程序运行命令参数 --> <key>ProgramArguments</key> <array> <!-- 内核位置 --> <string>/usr/local/bin/clash</string> <string>-d</string> <!-- 配置文件路径,路径下的 config.yaml --> <string>/Users/app/.config/clash</string> </array> <!-- 程序运行工作路径 --> <key>WorkingDirectory</key> <string>/Users/app/.config/clash</string> <!-- 标准输出日志路径 --> <key>StandardOutPath</key> <string>/Users/app/.config/clash/clash_stdout.log</string> <!-- 标准错误日志路径 --> <key>StandardErrorPath</key> <string>/Users/app/.config/clash/clash_stderr.log</string> </dict> </plist>
Clash Meta 内核及配置
对照👆上面配置文件的定义,将 Clash Meta 内核与相应的配置文件移动到对应的路径下,并修改相关权限。
选择需要的内核下载,我这里是 mihomo-darwin-arm64-go122-v1.18.10.gz ,将其解压并重命名为 clash,再执行命令
sudo mv clash /usr/local/bin/ sudo chown root clash sudo chmod +x clash
同理操作配置文件,配置文件命名为
config.yaml
mkdir -p /Users/app/.config/clash mv config.yaml /Users/app/.config/clash chmod 644 /Users/app/.config/clash/config.yaml
Clash Meta 配置文件此处不做展开,请参考
config.yaml
MetaCubeX
配置加载服务
完成👆上面的各项配置后,此时我们就可以重新回到 Launchd 的操作了。因为我要使用 tun 接口,也就是要以 root 权限启动,故需要将
clash.plist
配置移动到 /Library/Daemons
下。sudo mv clash.plist /Library/Daemons sudo chown root clash.plist sudo chmod 644 clash.plist
现在我们就可以通过
launchctl
命令来加载并启动服务了。sudo launchctl load /Library/LaunchDaemons/clash.plist # 查看服务 sudo launchctl list | grep clash # 卸载停止服务 # sudo launchctl unload /Library/LaunchDaemons/clash.plist
Meta 面板管理
此时 clash 已经以后台服务形式运行了,基于 Clash 的外部控制 API,我们可以通过相应的 Web 面板来管理,按照上面仓库配置文件,本地会有管理面板的 UI 文件,访问 http://127.0.0.1:9090/ui 即可进入。
强烈建议修改此默认控制 API 端口,并设置 API 鉴权
如下为我的修改:
external-controller: 127.0.0.1:39090 secret: "ClashPasswd" external-ui: ui external-ui-url: "https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip" # RESTful API CORS标头配置 external-controller-cors: allow-origins: - 'http://127.0.0.1' allow-private-network: true
此时访问 http://127.0.0.1:39090/ui 输入 external-controller 和 secret 对应的值即可进入管理面板了,面板功能还是挺全的,很好使。