You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bash脚本批量打开多个virt-viewer虚拟机窗口

问题原因

这是前台进程阻塞导致的。virt-viewer默认以前台模式运行,加了--wait参数后会一直占用终端等窗口关闭才退出,脚本按顺序执行命令时,第一条跑起来之后就会卡住,等第一个窗口关闭才会执行第二条,自然只能打开一个窗口。之前用bash -c、/bin/sh -ce包裹命令本质上还是前台运行,没有解决阻塞问题,所以不生效。

解决方法

方法1:加&丢后台运行(最省事)

每条命令末尾加&,把virt-viewer进程放到后台执行,脚本就不会被单条命令阻塞,会顺次拉起所有配置的窗口:

#!/bin/bash
virt-viewer --connect qemu:///session --wait vm-bigfg-1 &
virt-viewer --connect qemu:///session --wait vm-nexus-1 &
virt-viewer --connect qemu:///session --wait 其他虚拟机名 &

如果不想看到后台进程打印的日志,可以把输出重定向到空设备:

#!/bin/bash
virt-viewer --connect qemu:///session --wait vm-bigfg-1 >/dev/null 2>&1 &
virt-viewer --connect qemu:///session --wait vm-nexus-1 >/dev/null 2>&1 &
virt-viewer --connect qemu:///session --wait 其他虚拟机名 >/dev/null 2>&1 &

把内容保存为脚本文件(比如open_vms.sh),执行chmod +x open_vms.sh添加执行权限,直接运行即可。

方法2:nohup启动(关闭终端不影响窗口)

如果需要启动完窗口就关闭执行脚本的终端,不想连带关闭virt-viewer窗口,可以用nohup包裹命令再放到后台:

#!/bin/bash
nohup virt-viewer --connect qemu:///session --wait vm-bigfg-1 >/dev/null 2>&1 &
nohup virt-viewer --connect qemu:///session --wait vm-nexus-1 >/dev/null 2>&1 &
nohup virt-viewer --connect qemu:///session --wait 其他虚拟机名 >/dev/null 2>&1 &

进阶自动脚本

不想每次手动维护虚拟机列表的话,可以写循环自动读取所有处于运行状态的虚拟机,批量打开对应窗口:

#!/bin/bash
# 拉取所有running状态的虚拟机名称
vm_list=$(virsh list --state-running --name)
for vm_name in $vm_list
do
  # 变量加双引号兼容带空格的虚拟机名
  nohup virt-viewer --connect qemu:///session --wait "$vm_name" >/dev/null 2>&1 &
done

*如果使用系统级KVM连接,把命令里的qemu:///session替换为qemu:///system即可。

内容的提问来源于stack exchange,提问作者searchbruh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:31:16