如何在Kubuntu系统中定期对VirtualBox虚拟机窗口进行外部截图
如何在Kubuntu系统中定期对VirtualBox虚拟机窗口进行外部截图
嘿,我来给你几个实用的方案,完美解决你在Kubuntu上定时对VirtualBox虚拟机进行外部截图的需求——全程在宿主机操作,完全不用折腾虚拟机内部~
方案一:用VirtualBox官方命令行工具(最稳定推荐)
VirtualBox其实自带了命令行控制工具VBoxManage,这是最靠谱的方法:不管虚拟机窗口在哪个桌面、有没有被其他窗口覆盖,它都能直接从VirtualBox底层完成截图,完全不受窗口显示状态影响。
步骤如下:
- 先确认你的虚拟机名称或UUID:
打开终端输入这条命令,就能列出所有已创建的虚拟机信息:
记下你要截图的那台虚拟机的名称(比如叫"My Work VM")。VBoxManage list vms - 手动测试截图命令:
把下面的路径和VM名称换成你自己的,先测试一下能否成功截图:
这里用VBoxManage controlvm "My Work VM" screenshotpng /home/你的用户名/vm_screenshots/screenshot_$(date +%Y%m%d_%H%M%S).pngdate命令生成带时间戳的文件名(比如screenshot_20240520_143000.png),避免每次截图覆盖旧文件。记得提前创建好保存截图的目录:mkdir -p /home/你的用户名/vm_screenshots - 设置定时执行:
用Kubuntu自带的cron来实现每30分钟自动执行一次。打开终端输入:
选择你习惯的编辑器(比如nano)后,在最后添加一行:crontab -e
注意这里的*/30 * * * * VBoxManage controlvm "My Work VM" screenshotpng /home/你的用户名/vm_screenshots/screenshot_$(date +\%Y\%m\%d_\%H\%M\%S).png%要加反斜杠转义成\%,因为在cron里%有特殊含义。保存退出后,cron就会自动每30分钟给你的VM截一次图啦。
方案二:结合xdotool定位虚拟机窗口后截图
如果你更想针对虚拟机的可视化窗口本身截图(类似手动点击窗口截图的效果),可以用xdotool找到VM窗口的ID,再配合截图工具完成操作。
步骤:
- 先安装xdotool:
sudo apt update && sudo apt install xdotool - 找到虚拟机窗口的标识:
可以输入这条命令(替换成你的VM窗口标题):
或者输入xdotool search --name "My Work VM"xprop WM_CLASS后点击虚拟机窗口,会输出窗口的类名(通常是VirtualBox Machine)。 - 测试截图命令:
用scrot的话:
或者用Kubuntu自带的scrot -b /home/你的用户名/vm_screenshots/screenshot_$(date +%Y%m%d_%H%M%S).png -w $(xdotool search --class "VirtualBox Machine" | head -n1)spectacle:
其中spectacle -b -n -o /home/你的用户名/vm_screenshots/screenshot_$(date +%Y%m%d_%H%M%S).png --window $(xdotool search --class "VirtualBox Machine" | head -n1)-b参数表示包含窗口边框,-w/--window用来指定要截图的窗口ID。 - 设置定时任务:
同样通过crontab -e添加定时执行的命令即可。不过这个方法依赖虚拟机窗口处于运行状态,要是窗口被关闭就会失效,稳定性不如方案一。
方案三:模拟Host+E快捷键截图
如果你想模拟手动按Host+E的操作,也可以用xdotool实现:
xdotool search --class "VirtualBox Machine" windowfocus key --window %@ Ctrl_R+e
这里默认Host键是右Ctrl(Ctrl_R),如果你的Host键是其他键(比如左Alt),就换成对应的键名(比如Alt_L)。不过这个方法可能受窗口焦点影响——要是VM窗口没在前台,按键可能会发送到其他窗口,所以优先级不如前两个方案。
总结一下,优先选方案一:用VirtualBox官方的命令行工具,稳定又省心,完全不用管虚拟机窗口的显示状态,定时任务配置也简单。
备注:内容来源于stack exchange,提问作者dargaud




