# Shortcuts Automation Scripts 这个目录存放适合 macOS「快捷指令」自动化调用的脚本。 当前包含 Parallels Desktop 虚拟机权限修复脚本:当快捷指令 App 自动化检测到「打开 Parallels Desktop」时,可通过远程启动器下载最新版主脚本并执行,避免在快捷指令里维护大段 Shell。 ## 文件说明 | 文件 | 作用 | | --- | --- | | `vm-permission-fixer-bootstrap.sh` | 快捷指令入口脚本,下载远程主脚本、可选校验 SHA256、执行后清理临时文件 | | `vm-permission-fixer.sh` | 主脚本,修复指定 Parallels 虚拟机包的所有权 | ## 功能 - 检查目标 `.pvm` 虚拟机包是否存在。 - 通过 `sudo -A` 执行 `chown -R`,把虚拟机包所有者改回当前用户。 - 首次运行时弹窗输入一次 macOS 登录密码 / sudo 密码,并保存到当前用户的 macOS Keychain。 - 后续运行时通过临时 `SUDO_ASKPASS` 脚本从 Keychain 读取 sudo 密码,不在脚本中保存明文密码。 - 写入日志到 `~/Library/Logs/vm_permission_fix.log`。 - 成功或失败时发送 macOS 通知。 ## 快捷指令用法 在快捷指令 App 中创建个人自动化: 1. 触发条件选择「App」。 2. App 选择「Parallels Desktop」。 3. 条件选择「打开」。 4. 动作选择「运行 Shell 脚本」。 5. Shell 选择 `/bin/bash`。 6. 输入以下内容: ```bash curl -fsSL https://git.orionc.me/orion/script/raw/branch/main/shortcuts/vm-permission-fixer-bootstrap.sh | bash ``` 首次运行会弹窗要求输入一次 sudo 密码。保存到 Keychain 后,后续自动化会直接读取。 ## 本地运行 也可以 clone 仓库后本地执行: ```bash cd shortcuts chmod +x vm-permission-fixer-bootstrap.sh vm-permission-fixer.sh ./vm-permission-fixer.sh ``` ## 配置项 默认虚拟机路径: ```bash /Users/Shared/Parallels/VM/Windows 11/Windows 11.pvm ``` 可通过环境变量覆盖: ```bash VM_FIXER_VM_PATH="/path/to/Windows 11.pvm" ./vm-permission-fixer.sh ``` 默认 Keychain service 名称: ```bash vm-permission-fixer-sudo-password ``` 可通过环境变量覆盖: ```bash VM_FIXER_KEYCHAIN_SERVICE=my-vm-fixer-password ./vm-permission-fixer.sh ``` 启动器默认下载地址可覆盖: ```bash VM_FIXER_REMOTE="https://example.com/vm-permission-fixer.sh" ./vm-permission-fixer-bootstrap.sh ``` ## SHA256 校验 启动器支持通过 `VM_FIXER_SHA256` 校验下载到的主脚本: ```bash curl -fsSL https://git.orionc.me/orion/script/raw/branch/main/shortcuts/vm-permission-fixer.sh | shasum -a 256 ``` 运行时指定: ```bash curl -fsSL https://git.orionc.me/orion/script/raw/branch/main/shortcuts/vm-permission-fixer-bootstrap.sh | VM_FIXER_SHA256= bash ``` 如果哈希不匹配,启动器会停止执行。 ## 常见问题 ### 如何删除已保存的 sudo 密码? ```bash security delete-generic-password -a "$USER" -s vm-permission-fixer-sudo-password ``` 下次运行会重新弹窗保存。 ### Keychain 中的 sudo 密码不可用 通常是 macOS 登录密码变更,或 Keychain 条目内容不再正确。删除后重新运行即可: ```bash security delete-generic-password -a "$USER" -s vm-permission-fixer-sudo-password ``` ### 日志在哪里? ```bash ~/Library/Logs/vm_permission_fix.log ``` ### 是否完全没有保存密码? 脚本不再把 sudo 密码明文写在仓库或快捷指令里,但会按你的授权把密码保存到当前用户 Keychain。更严格的做法是配置 sudoers,只允许指定 `chown` 命令免密执行。 ## 注意事项 - 远程启动器属于“下载后执行”模式,只应从可信仓库使用。 - 第一次运行时 macOS 可能请求允许访问 Keychain,请选择允许。 - 如果 Parallels Desktop 已经占用虚拟机包,权限修复可能失败;查看日志确认原因。