TeamViewer连接虚拟机失败,绝大多数情况下是网络模式、服务配置或协议版本这三类问题导致的,直接按“桥接模式+服务重启+版本统一”的顺序排查,基本能解决。
先从网络模式排查
虚拟机连不上TeamViewer,第一个要怀疑的就是网络,TeamViewer是依赖UDP和TCP端口的远程控制软件,虚拟机如果用的是NAT模式,宿主机和虚拟机之间的网络隧道会把TeamViewer的流量挡在外面。
具体操作路径:VMware里右键虚拟机 → 设置 → 网络适配器 → 网络连接 → 改成桥接模式,VirtualBox的操作类似,设置 → 网络 → 连接方式 → 改成桥接网卡。
改完之后记得重启虚拟机的网络服务,Linux执行 systemctl restart network,Windows虚拟机就在控制面板里禁用再启用网卡。
改完桥接模式后,在虚拟机里检查一下IP地址是否和宿主机在同一网段,如果虚拟机IP变成169.254开头的,说明DHCP没拿到地址,手动设置一个静态IP,网关指向路由器地址。
还有一个小细节:桥接模式要选对物理网卡,如果宿主机同时插着有线网线和Wi-Fi,VirtualBox里默认桥接到某个网卡,但实际连的可能是另一个,这时候就出现“虚拟机有IP但无法上网”的情况,去虚拟机设置里手动指定桥接的物理网卡名称。
服务端与客户端版本不匹配
行业共识认为:TeamViewer不同大版本之间的连接成功率有明显差异,2026年以后发布的TeamViewer 15系列和旧的13、14版本在握手协议上不兼容,两个端版本差距过大,就会一直卡在“正在初始化”或“连接中”的状态。
在虚拟机和宿主机两端都检查一下版本号,路径是:帮助 → 关于TeamViewer,如果两端版本差两个大版本以上,去官网下载最新版,直接覆盖安装,不需要卸载。
安装完新版本后,Windows虚拟机里要以管理员身份运行TeamViewer,否则部分功能会被UAC拦截,Linux虚拟机里如果是通过dep或rpm包安装的,需要手动启动守护进程:
sudo systemctl start teamviewerd sudo systemctl enable teamviewerd
很多Linux用户只运行了GUI客户端,后台守护进程没起来,宿主机发起连接时就会报“对方未在运行”,启动守护进程后,再看TeamViewer主界面上是否分配了新的ID和密码,如果ID没变,重启一下服务再确认。
TeamViewer连接ubuntu卡在正在初始化
这是Linux虚拟机里最典型的故障场景,Ubuntu虚拟机里打开TeamViewer,输入伙伴ID后一直停在“正在初始化”,连接不建立也不报错,原因通常是Wayland显示服务器不兼容。
Ubuntu 21.10以后的版本默认使用Wayland,TeamViewer对Wayland的支持远不如X11,很多依赖X11协议的远程操作在Wayland下直接失效,解决办法是登录界面点击用户名旁边的齿轮图标,选择“Ubuntu on Xorg”登录,再打开TeamViewer连接。
如果你的ubuntu虚拟机里根本没有Xorg选项,安装一下:
sudo apt install ubuntu-session
装完重启虚拟机,登录界面就能看到Xorg选项了。
GA(Guest Additions)没装或者版本太旧也会导致TeamViewer的显示画面异常,在虚拟机里重新安装增强功能,重启后确认 /usr/lib/VBoxGuestAdditions 目录存在且版本号与VirtualBox版本一致。
关于TeamViewer连接ubuntu失败的价格问题,也有人会问“免费版够不够用”,个人使用场景下免费版完全够,免费版限制的是商业用途的会话时长,不是个人远程控制的次数,日常操作ubuntu虚拟机,免费版不会弹出商业使用警告,只有频繁远程办公且对方也是一台办公电脑时,才需要考虑购买收费版本,个人开发者在虚拟机上调试代码,完全不用急着付费。
防火墙和路由器阻挡
宿主机能ping通虚拟机,但TeamViewer连接不上,大概率是防火墙策略挡了协议。
TeamViewer通话建立的典型流程是:先通过8080端口建立HTTPS隧道,然后切换到UDP 5938或TCP 5938端口传输数据,任何一环被防火墙拦,画面就出不来,卡在“正在初始化”之后。
Windows宿主机检查防火墙规则:
- 控制面板 → Windows Defender防火墙 → 高级设置 → 入站规则
- 找到TeamViewer相关的规则,确认是“允许连接”
- 如果没找到,手动新建规则 → 端口 → TCP/UDP 5938,放行
Linux虚拟机用iptables或ufw管理的,临时关掉ufw试一把:
sudo ufw disable
如果能连上,再精确放行端口:
sudo ufw allow 5938/tcp sudo ufw allow 5938/udp
家庭路由器里的AP隔离功能也会挡掉设备之间的互访,登录路由器管理界面,检查无线设置里是否开启了“AP隔离”或“客户端隔离”,开启的话关掉。
公司网络环境更复杂,许多企业用深信服或Citrix的外设管理策略,把TeamViewer的远程音频和外设重定向给禁了,现象是能连接但画面黑屏,或者鼠标键盘操作没响应,这类网络策略问题无法靠升级TeamViewer解决,建议换用虚拟机的原生控制台VMware的Web Console或VirtualBox的显示菜单。
虚拟机里的TeamViewer ID为空
有些时候连接失败的根源没那么高端,就是虚拟机里的TeamViewer根本没拿到ID,打开虚拟机里的TeamViewer主界面,“你的ID”一栏是空的,密码栏也是空的。
这种情况在精简版Linux系统(比如CentOS最小化安装)上很常见,TeamViewer依赖Qt库和X11库,系统缺少这些库文件时客户端能启动但无法注册到服务器。
缺库的解决办法:
sudo yum install qt5-qtbase.x86_64 qt5-qtdeclarative.x86_64
CentOS或Rocky Linux安装完依赖后重启TeamViewer,等一分钟,ID就会自动分配出来。
Windows虚拟机ID为空的情况较少,但偶尔出现在远程桌面服务被组策略锁定的机器上,检查本地组策略编辑器:计算机配置 → 管理模板 → Windows组件 → 远程桌面服务 → 远程桌面会话主机 → 连接 → 允许用户通过使用远程桌面服务进行远程连接,改成“已启用”。
虚拟机快照也可以用起来,排查过程中每改一项设置,就拍一个快照,改坏了直接恢复快照,不用重装系统,快照路径在VMware的“虚拟机 → 快照 → 拍摄快照”,VirtualBox的“控制 → 生成备份”。
账号授权与无人值守访问
连接报“白名单”或“未授权”错误的,属于访问控制问题,TeamViewer的企业账号体系里,虚拟机的ID必须加入账号的电脑列表中,并且分配给自己的账号才有权连接。
确认方法:宿主机登录TeamViewer账号 → 您的电脑和联系人 → 计算机 → 找到那台虚拟机的ID → 右键 → 设置访问权限 → 授予完全控制权限。
这里有个容易踩的坑:虚拟机里登录了另一个TeamViewer账号,导致访问权限归属不明,确保宿主机和虚拟机登录的是同一个TeamViewer账号。
还遇到一种情况:虚拟机的无人值守访问功能没启用,路径是:TeamViewer主界面右上角齿轮图标 → 常规 → 启动TeamViewer随Windows一同启动 → “无人值守访问”部分点击分配设备到账号,输入登录账号完成绑定。
分配完成后,宿主机端的TeamViewer就能随时发起连接,不用虚拟机里有人点头同意。
连接后黑屏或画面不刷新
连接是连上了,但虚拟机屏幕一片黑,或者画面卡在某个时间点不动,查看眼前的虚拟机控制台窗口,如果控制台画面是正常的,说明TeamViewer的显示捕捉层出了问题。
黑屏里相当一部分情况是显卡驱动不兼容,Linux虚拟机安装开源驱动而非官方驱动时,TeamViewer的捕捉方式不同会导致输出为黑,检查虚拟机系统设置里是否启用了3D加速,VMware里:虚拟机设置 → 显示器 → 加速3D图形,关掉这个选项再连一次。
Windows的虚拟机黑屏则多半是GPU硬件加速开了但虚拟显卡不支持,TeamViewer设置 → 远程控制 → 显示设置 → 禁用硬件加速,重新发起连接就会正常显示画面。
画面卡住不动往往和路由器的NAT超时有关,TeamViewer长时间连接后,NAT会话表项被路由器回收,外部数据无法转发到虚拟机,断开连接,在虚拟机里重启TeamViewer服务,再重新连接就能恢复,治本的办法是在路由器里给虚拟机的内网IP设置端口转发(通常叫虚拟服务器或端口映射),把UDP 5938转发到虚拟机的IP,穿透NAT超时问题算是彻底解决。
常见问题速答
TeamViewer连接VMware虚拟机时提示“安装的TeamViewer版本太旧”怎么解决?
提示版本太旧说明宿主机和虚拟机之间的TeamViewer主版本号差距过大,VMware虚拟机下载新版安装包安装即可,不用卸载旧版,覆盖安装会保留已分配的ID和无人值守授权,虚拟机无法联网下载的,在宿主机下载好安装包,拖拽或使用VMware的共享文件夹功能拷进虚拟机里安装。
TeamViewer连接不上VirtualBox虚拟机,单独用“网络地址转换(NAT)”模式有影响吗?
有影响,VirtualBox的默认NAT模式对外表现为一个独立的网络栈,宿主机发起的TeamViewer连接会被NAT层隐藏,指向虚拟机的UDP数据包无法正确送达,需要改为桥接模式后连接,或是在VirtualBox的端口转发规则里手动添加,把宿主机的5938端口转发到虚拟机的5938端口,端口转发的设置路径是:网络 → 高级 → 端口转发 → 添加规则。
连接linux虚拟机时速度慢、画面频繁卡顿,是TeamViewer不支持linux还是网络本身的问题?
先在宿主机ping虚拟机的IP确认延迟,局域网内延迟超过50ms就要检查路由或无线信号,延迟正常的先降低TeamViewer远程控制质量:远程控制窗口顶部 → 查看 → 质量 → 优化速度,还卡的话,Linux虚拟机桌面环境换成轻量级的Xfce或LXQt,GNOME在高分屏下TeamViewer传输带宽占用非常大,桌面环境轻量了,远程画面的流畅度会明显改善。
TeamViewer的生态里,连接虚拟机失败的排查链条已经比较固定:从网络模式起步,逐步检查服务、防火墙、显示服务器和账号权限,每一步都能通过界面直接确认状态,不存在需要猜的项目,按上面顺一遍,多数问题会在前三步暴露出来,实在搞不定,用虚拟机的原生控制台先把系统里需要的数据备份出来,之后重装TeamViewer再去连,远程控制工具本身的容错性比不了真实网络,多准备一个备用方案总是好的。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/626706.html




