十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ubuntu虚拟机网络图标消失与USB不识别?VMware Tools修复指南

Ubuntu虚拟机网络图标消失与USB不识别?VMware Tools修复指南 1. 问题现象与根因分析1.1 两个问题同时出现其实是同一类故障先说结论Ubuntu虚拟机里网络图标消失和USB设备不自动弹出十次里有八次是同一类原因——虚拟机的“基础服务”没跑起来或者跑起来之后没被正确加载到桌面环境。我为什么敢这么说因为我在这上面踩过好几次坑。第一次遇到是在一次演示前客户现场打开VMware里的Ubuntu 22.04任务栏右上角的网络图标突然不见了网络还能上网但图标没了怎么看怎么别扭。接着往USB口上插U盘宿主机有提示音Ubuntu里却一点反应都没有。我当时第一反应是“坏了USB控制器坏了”后来排查了一圈发现根本不是硬件问题而是虚拟机内部的服务状态出了问题。网络图标消失本质上是桌面环境的系统托盘System Tray里少了一个网络管理器的状态指示器。Ubuntu桌面上那个网络图标不是系统内核画的而是NetworkManager这个服务在提供网络管理功能的同时往GNOME桌面托盘里塞了一个图标组件。如果NetworkManager服务挂了或者桌面环境没加载到对应的Applet插件图标就会消失。而USB设备不自动弹出通常是两个层面的问题一是在宿主机层虚拟机软件没有把USB设备正确“传递”给客户机二是在客户机层Ubuntu里缺少USB设备挂载管理的组件或者桌面环境的自动挂载开关没打开。这两个问题撞在一起往往意味着你的虚拟机软件集成组件没有正确安装或者桌面环境依赖的几个后台服务没有全部跑起来。1.2 为什么集成组件这么关键虚拟机不是真实硬件它是一堆软件模拟出来的设备。要让Ubuntu“感知”到USB设备插拔需要虚拟机软件和客户机操作系统之间有一条“隧道”——这个隧道就是VMware Tools如果是VirtualBox则是对应的增强功能。VMware Tools里面包含了一堆驱动和服务其中和网络图标、USB自动弹出强相关的有虚拟网卡驱动负责让Ubuntu里的网卡正常工作鼠标、显示、剪贴板等增强驱动一个叫vmtoolsd的后台守护进程负责宿主机和客户机之间的通信一个负责把宿主机USB设备“桥接”进客户机的内核模块。如果你的虚拟机是装完Ubuntu后一直没装VMware Tools或者装了之后因为内核升级导致模块失效那么USB设备传不进去是必然的。而网络图标消失很多时候是在这种“集成组件半坏不坏”的状态下Systemd服务在启动时按顺序等待VMware Tools服务结果等待超时或者服务崩溃连带NetworkManager没起来。所以当我们处理这类问题时绝对不能只盯着表面的图标和USB去折腾而是要沿着“服务层-驱动层-桌面层”三层路径去排查。2. 网络图标消失的排查与恢复2.1 先确认网络到底通不通在动手恢复图标之前先做一次基础的连通性测试。这一步非常关键因为“网络图标消失”和“网络断开”是完全不同的两道题。打开终端输入ping -c 4 223.5.5.5这里用-c 4是限制只发4个数据包不然会一直ping下去。223.5.5.5是国内的公共DNS我用它做连通性测试你也可以换成114.114.114.114。如果ping通了说明网络是通的问题只是出在“图标”和“服务状态显示”这一层。如果ping不通那问题就大了得先解决网卡驱动和网络配置。然后检查NetworkManager服务状态systemctl status NetworkManager正常状态下你会看到类似Active: active (running)的输出并且进程那一行会显示主进程的PID。如果看到的是inactive (dead)或者failed说明服务确实挂掉了。2.2 恢复NetworkManager服务的经典套路如果NetworkManager服务是死的直接启动它sudo systemctl start NetworkManager sudo systemctl enable NetworkManager第一条命令是立即启动第二条是设置开机自启。enable这个动作不是可选项我强烈建议每次都执行。因为很多情况下服务之所以挂掉就是因为开机时没被启动而某些桌面组件比如GNOME的托盘只会检测“开机后服务是否在运行”半路启动的服务它能识别到图标但偶尔会出现图标加载不出来的情况。启动之后再检查一次systemctl status NetworkManager如果状态变成了active (running)但是图标还没出现先别急重启一下桌面环境的后台进程。在Ubuntu 22.04等使用GNOME桌面的版本上可以按Alt F2在弹出的对话框中输入r回车。这个操作是重启GNOME Shell不会关闭你的应用程序。如果这种“软重启”不行那再考虑注销重新登录或者重启虚拟机。2.3 托盘图标组件的补装有些发行版为了做精简或者你在安装系统时选择了最小安装可能桌面上根本没有“系统托盘”里网络图标的显示组件。打开终端安装sudo apt update sudo apt install gnome-shell-extension-appindicator这个包是GNOME桌面下用来显示托盘图标的扩展。装完后执行gnome-extensions enable ubuntu-appindicatorsubuntu.com然后重启GNOME ShellAlt F2输入r回车或者注销重登。为什么这里专门提AppIndicator因为Ubuntu的桌面右上角区域是一个传统意义上的托盘很多状态图标输入法、网络、音量、蓝牙都是通过AppIndicator协议显示在这个区域的。如果这个扩展没装或者被禁用了那么即使NetworkManager服务运行正常你也见不到右上角的网络图标。2.4 图标正常但网络连不上时的排查如果图标回来了但是点击图标发现“未连接”或者一直在转圈这种情况和“图标消失”其实是两码事但很多人会混在一起处理导致越修越乱。这个时候优先检查网卡是否被识别ip addr show看输出结果里有没有一个带IP地址的ens33或者ens160之类的网卡条目。如果有说明网卡驱动正常。如果只有lo回环网卡没有其他网卡说明VMware虚拟网卡驱动可能没加载。此时检查VMware Tools的内核模块lsmod | grep vmw正常应该能看到vmw_vmci、vmxnet3之类的模块。如果什么都没有说明VMware Tools需要重新安装或修复。这个问题我会在第3节详细讲因为USB设备不弹出也依赖同样的模块。3. USB设备没有自动弹出的解决全流程3.1 确认VMware Tools是否就位在VMware虚拟机里USB设备要正常传递最核心的依赖就是VMware Tools。先检查它到底装没装、装的状态对不对。在Ubuntu终端里执行vmware-toolbox-cmd --version如果返回了类似VMware Tools 11.x.x build-xxxxx的输出说明装的是原版VMware Tools。如果提示command not found则可能没装或者装的是open-vm-tools。现在很多虚拟机装Ubuntu时会默认使用open-vm-tools这个开源版本它是VMware Tools的开源替代品在大多数情况下功能完全够用甚至在部分内核版本上兼容性更好。查看open-vm-tools是否安装dpkg -l | grep open-vm-tools如果有输出说明装了。如果连这个都没有那就得老老实实安装。3.2 正确安装VMware Tools的两种姿势方式一安装open-vm-tools官方开源版这是我最推荐的方式尤其是Ubuntu 20.04及以上版本用命令行安装最省心sudo apt update sudo apt install open-vm-tools open-vm-tools-desktop注意这里一定要装open-vm-tools-desktop这个包。它提供的是桌面环境相关的增强功能包括X11显示驱动、剪贴板共享、拖拽文件等。如果只装open-vm-toolsUSB设备的自动弹出和共享剪贴板都会不正常。安装完成后重启虚拟机或者执行sudo systemctl restart open-vm-tools但部分内核模块需要重启才能加载所以直接重启更稳妥。方式二安装VMware原版Tools如果你用的是比较老的VMware Workstation版本或者open-vm-tools在特定内核下出问题可以在VMware菜单栏上点击“虚拟机”-“安装VMware Tools”然后在Ubuntu的Files管理器里找到自动挂载的虚拟光驱解压里面的VMwareTools-x.x.x-xxxxx.tar.gz执行安装脚本sudo ./vmware-install.pl -d-d参数表示使用默认配置一路安装。这种方式装出来的是VMware官方编译的版本兼容性最好但嵌合度不如open-vm-tools和发行版系统深度集成来的好。我个人的经验是Ubuntu 22.04及以上版本优先用open-vm-tools-desktop省事且稳定。3.3 虚拟机设置里的USB控制器陷阱解决了客户机里的驱动问题接下来要看向宿主机那边的VMware虚拟机设置。右键虚拟机标签页点击“设置”Settings在“硬件”选项卡里找到“USB控制器”。这里有几个关键的选项设置USB兼容性默认是USB 2.0如果你插的是USB 3.0的U盘建议选择“USB 3.1”。但注意如果客户机Ubuntu内核较老比如18.04及更早USB 3.1控制器可能反而会导致设备反复断连此时回退到USB 2.0反而更稳定。“自动连接新的USB设备”务必要勾选这个选项。不勾选的话插上USB设备后Ubuntu里永远不会有反应因为设备压根没有被传递进虚拟机。“显示所有USB输入设备”如果USB外设是特殊的HID设备勾选这个选项可以避免一些兼容性问题。修改完这些设置后点击确定。然后需要把虚拟机关机再重新开机不要用“重启客户机”因为USB控制器属于硬件级虚拟化配置重启操作系统不一定能重新加载。3.4 验证USB设备能否被识别与挂载完成上面的设置后插上一个U盘然后在Ubuntu终端里执行lsusblsusb会列出所有USB总线上的设备注意看有没有出现类似Kingston、SanDisk等U盘品牌名。如果能看到设备说明USB设备已经被传递进虚拟机了。但被识别不代表能弹出还需要看系统有没有自动挂载。执行lsblk如果出现一个sdb或者sdc等设备并且带有分区如sdb1说明挂载路径已经有了。再看看这个分区有没有被挂载到/media/用户名/xxx目录下ls /media/如果/media/下能看到以U盘标签命名的文件夹说明系统已经自动挂载并弹出了窗口。如果lsusb能看到设备但lsblk里没有对应盘符那问题出在自动挂载服务上。3.5 自动挂载服务的修复桌面环境的自动挂载依赖一个叫udisks2的守护进程负责处理USB存储设备的挂载和弹出。检查它的状态systemctl status udisks2如果没在运行启动它sudo systemctl start udisks2 sudo systemctl enable udisks2如果服务正常运行但U盘还是不弹窗可能是GNOME FilesNautilus的自动挂载开关被关掉了。打开“文件”管理器点击右上角的菜单按钮横线图标选择“首选项”在“可移动介质”标签页里确认“插入可移动介质时自动安装并打开”这个选项是勾选状态。3.6 命令行手动挂载作为临时方案如果以上步骤都执行了U盘依然没有自动弹出可以使用命令行手动挂载来应急至少保证数据能用sudo mkdir -p /mnt/usb sudo mount /dev/sdb1 /mnt/usb cd /mnt/usb用完后卸载cd / sudo umount /mnt/usb这里/dev/sdb1是假设的设备名实际请以lsblk输出为准。手动挂载不建议长期使用但作为临时查看文件的手段比干等着强。4. 常见问题与排查技巧实录4.1 网络图标消失但网络正常怎么快速重显这是所有问题里最好解决的也是最常见的。可以先不重启系统按优先级做检查NetworkManager服务运行状态检查AppIndicator扩展是否启用重启GNOME Shell。我遇到过一次比较诡异的场景NetworkManager服务运行正常AppIndicator扩展也启用了但图标就是不出来。后来发现是系统语言从中文切换到英文后GNOME Shell出现了一个兼容性问题。解决办法是注销重新登录问题消失。遇到类似情况优先考虑注销重登不用急着重启虚拟机。4.2 USB设备在Windows宿主机上有反应但Ubuntu里没反应这种“单侧失灵”的现象几乎可以肯定是USB设备没有传递进虚拟机。常见原因有三个VMware里没有勾选“自动连接新的USB设备”VMware Tools未安装或未正常运行USB控制器兼容性设置错误。排查顺序也按这个来先看VMware设置再看Tools状态最后调整USB控制器版本。有条件的可以试着在VMware菜单栏的“虚拟机”-“可移动设备”里手动点击设备名选择“连接”试试看看是否会传递进虚拟机。4.3 插了U盘后整个虚拟机卡死这个问题比较邪门但确实存在。尤其是使用USB 3.0高速度U盘且在VMware里开启了USB 3.1控制器老旧内核的Ubuntu客户机会出现内核级USB子系统死锁表现为整个虚拟机画面卡住鼠标键盘都无响应。解决办法是先强制重启虚拟机然后在VMware设置里把USB控制器兼容性改为USB 2.0。这个做法看起来是“降级”但实测下来在多数Linux环境下反而更稳定。4.4 升级Ubuntu内核后USB设备和共享剪贴板都失效这是open-vm-tools的经典问题。Ubuntu内核升级后内核头文件和模块没有同步更新导致vmw_vmci等模块无法编译或加载。解决方法很简单sudo apt install --reinstall open-vm-tools open-vm-tools-desktop sudo reboot重装过程中系统会根据新内核重新编译内核模块。如果重装不行考虑安装dkms包它可以让VMware Tools模块在内核更新时自动重建sudo apt install dkms4.5 常见问题速查表现象优先排查项常用修复命令/操作网络图标消失网络正常NetworkManager服务、GNOME Shellsystemctl start NetworkManagerAltF2输入r网络图标消失网络不通虚拟网卡驱动、网络配置lsmod | grep vmw重新安装open-vm-tools插U盘无任何反应VMware USB控制器设置、验证lsusb勾选“自动连接新的USB设备”切换USB版本lsusb有设备但无弹窗udisks2服务、Nautilus自动挂载systemctl start udisks2检查“文件”首选项U盘能识别但读取极慢USB控制器版本过高在VMware中把USB控制器降为2.0更新内核后设备全部失效模块未重新编译apt install --reinstall open-vm-tools*4.6 一个值得注意的细节不要同时插太多USB设备在虚拟机里同时连接多个USB设备尤其是同时连接多个U盘或者外接硬盘容易导致VMware后端的USB仲裁出现问题。轻则设备识别混乱重则整个虚拟机的USB子系统崩溃。我自己就遇到过连了三个U盘后所有USB设备全部断开的情况。所以建议是需要哪个设备就先把其他U盘拔掉再连接目标设备。用完弹出后再插下一个。这种“单设备”模式虽然麻烦一点但稳定得很特别是在做USB抓包或者调试嵌入式开发板的时候。5. 一些隐藏细节与后续建议5.1 网络图标消失和NetworkManager无关的特殊情况有一种情况容易漏掉如果Ubuntu里装了某个桌面美化工具比如dock类插件、tweaks工具它们有时会把GNOME Shell的扩展状态搞乱。特别是通过gnome-tweaks手动关闭了“Ubuntu AppIndicators”扩展后图标自然就消失了。这时用gnome-extensions list查看已安装的扩展列表再用gnome-extensions enable ubuntu-appindicatorsubuntu.com重新启用即可。很多人不知道这个命令导致图标消失后只能重启系统其实几秒钟就能解决。5.2 虚拟机里建议使用静态IP既然聊到了网络配置这里顺手提一个和“网络图标”相关但不完全相同的建议如果你经常用虚拟机做开发、跑服务建议给Ubuntu配置静态IP而不是依赖DHCP动态分配。理由是虚拟机系统的IP一旦固定SSH工具、数据库连接配置、Docker端口映射等都能稳定使用。DHCP模式下IP地址一旦变化你会发现宿主机访问虚拟机的SSH连接全部断开这种“连不上”的感觉和网络图标消失完全不同但容易被误诊为系统网络故障。在Netplan配置中修改Ubuntu 22.04的配置文件为/etc/netplan/01-network-manager-all.yamlnetwork: version: 2 renderer: NetworkManager ethernets: ens33: dhcp4: no addresses: - 192.168.100.10/24 routes: - to: default via: 192.168.100.1 nameservers: addresses: [223.5.5.5, 114.114.114.114]执行sudo netplan apply生效。注意ens33要替换成你虚拟机实际网卡名用ip addr查看。5.3 针对USB串口调试的特殊提醒如果你像热词里搜的那样用USB转串口模块CP2102、FT232、CH340等连开发板调试除了上面的USB设备传递问题还要留意设备权限。在Ubuntu中普通用户默认没有权限访问/dev/ttyUSB0这类设备需要把用户加入dialout组sudo usermod -aG dialout $USER执行后注销重登再使用minicom或者screen /dev/ttyUSB0 115200时就不会报权限错误了。这个坑做嵌入式开发的人几乎都踩过顺便写在这里给有需要的人参考。5.4 关于VMware Tools更新的建议最后给一个长期维护的建议如果你经常更新Ubuntu内核或者VMware Workstation频繁升级版本VMware Tools的状态很容易“悄悄变差”。我个人的经验是每隔一段时间执行一次sudo apt update sudo apt upgrade让系统保持最新状态。新版本的内核和open-vm-tools通常已经做好了适配自动更新能避免很多“莫名其妙”的兼容性问题。如果遇到升级后VMware Tools失效就按第4.4节的方法重装。这套“更新-重装-重启”三部曲解决了我使用虚拟机的绝大部分麻烦。
返回列表