mac主机可在虚拟机启动时自动启用勿扰模式,方法包括:1.快捷指令监听prl_client_app或vmware-vmx进程;2.终端脚本+launchd实现毫秒级响应;3.parallels内置命令触发;4.hammerspoon监听窗口标题关键词。

您正在使用Parallels Desktop或VMware Fusion运行Windows/Linux虚拟机,希望Mac主机在虚拟机启动瞬间自动进入勿扰模式,避免被通知弹窗打断操作、遮挡虚拟机全屏界面或泄露敏感信息——这种联动控制必须绕过系统原生的时间表与位置触发逻辑,依赖进程监听与自动化脚本实现。
用快捷指令监听虚拟机进程并触发勿扰
此方法不依赖第三方工具,仅用macOS自带的快捷指令+终端命令,适用于Parallels Desktop(进程名prl_client_app)或VMware Fusion(进程名vmware-vmx)。
第一步:打开“快捷指令”App → 切换到“自动化”标签页 → 点击右上角“+” → 选择“创建个人自动化”。
第二步:触发器选“运行快捷指令”,但先不设置;点击“下一步”跳过,直接进入操作编辑页。
第三步:点击“添加操作” → 搜索“运行shell脚本” → 选择该操作 → 在脚本框中粘贴以下命令:
pgrep -f "prl_client_app\|vmware-vmx" > /dev/null && echo "running" || echo "not running"
第四步:再点“添加操作” → 搜索“如果” → 设置条件为“文本包含” → 填入“running” → 在“如果”分支内添加操作“设置勿扰模式”并设为“开启”。
第五步:关闭“运行前询问”开关——【不关掉这一步,每次检测都会弹窗打断虚拟机操作】。点击“完成”保存,命名为“VM启动时启用勿扰”。
用终端脚本配合launchd实现毫秒级响应
当您对响应延迟敏感(如虚拟机启动后0.3秒内必须静音),快捷指令的轮询机制不够快,需改用系统级守护进程监听。
打开“终端”,依次执行以下命令:
输入:nano ~/vm-dnd-launcher.sh
在编辑器中粘贴脚本内容(按Ctrl+O保存,Ctrl+X退出):
#!/bin/zsh
while true; do
if pgrep -f "prl_client_app\|vmware-vmx" >/dev/null; then
defaults write com.apple.notificationcenterui doNotDisturb -boolean true
killall NotificationCenter
break
fi
sleep 0.1
done
执行:chmod +x ~/vm-dnd-launcher.sh
创建launchd配置文件:nano ~/Library/LaunchAgents/com.user.vm-dnd.plist
填入以下内容(注意将/Users/yourname替换为你实际的用户名路径):
加载守护进程:launchctl load ~/Library/LaunchAgents/com.user.vm-dnd.plist
在Parallels Desktop中设置启动后运行Shell命令
此方法最轻量,仅适用于Parallels Desktop用户,无需额外脚本,利用其内置的“虚拟机启动后执行命令”功能直接调用系统API。
打开Parallels Desktop → 选中目标虚拟机 → 点击右键 → “配置” → 左侧边栏选择“选项” → “其他选项”。
找到“启动虚拟机后运行以下命令”选项 → 勾选启用 → 在输入框中粘贴:
osascript -e 'tell application "System Events" to key code 0 using {option down, command down}'
这行命令模拟按下Option+Command+D快捷键,瞬时触发勿扰模式切换。
注意:必须确保系统设置中该快捷键未被修改——【若已自定义为其他组合键,此处命令将失效】。
用Hammerspoon监听窗口标题变化自动启用
当虚拟机以全屏或独立窗口运行时,其窗口标题通常含“Windows”“Ubuntu”等关键词,Hammerspoon可实时捕获这类变化并触发动作。
安装Hammerspoon后,编辑配置文件(~/.hammerspoon/init.lua),添加以下代码段:
local function checkVMWindow()
local windows = hs.window.allWindows()
for _, win in ipairs(windows) do
local title = win:title()
if title and (string.find(title:lower(), "windows") or string.find(title:lower(), "ubuntu") or string.find(title:lower(), "debian")) then
hs.osascript.applescript('tell app "System Events" to key code 0 using {option down, command down}')
return true
end
end
return false
end
hs.timer.doEvery(1, checkVMWindow)
保存后在Hammerspoon菜单中点击“Reload Config”生效。
该方案每秒扫描一次所有窗口标题,一旦匹配关键词立即执行勿扰快捷键,响应延迟低于1秒,且不干扰虚拟机自身键盘输入。











