UTM不提供虚拟传感器硬件,需通过USB直通物理传感器、宿主中转数据或纯软件模拟三种方式实现:USB直通最接近真实读取;宿主中转需用网络/文件/串口传递数据;软件模拟可用Python生成假数据或伪造sysfs节点。
utm 本身不提供虚拟传感器硬件(如温度、加速度计、陀螺仪等),它是一个系统级虚拟机平台,主要模拟 cpu、内存、磁盘、网络和基础显示设备。在虚拟机内部,linux 或 windows 系统默认只能访问 utm 暴露的虚拟硬件——比如 virtio 网卡、virtio-blk 磁盘、spice 显示、串口或 usb 设备(需手动重定向)。原生的物理传感器(如 mac 的 t2/m系列芯片内置环境传感器、iphone 的加速度计)不会自动映射进虚拟机。
UTM 中如何让虚拟机“读取传感器”?
关键在于明确“传感器”的来源:是宿主设备上的物理传感器,还是虚拟环境里模拟的逻辑信号?两者路径完全不同:
- 宿主物理传感器 → 虚拟机内使用:必须通过宿主操作系统中转。例如,在 macOS 上用 Swift/Python 读取 SMC 温度或 Core Motion 加速度数据,再通过网络 API(HTTP/Socket)、共享文件(virtiofs)、或串口(USB 重定向连接虚拟串口)把数值传给虚拟机内的程序。
-
虚拟机内部“传感器”行为:可由软件模拟。比如在 Ubuntu 虚拟机中运行 Python 脚本,定时生成模拟温湿度数据;或用
sysfs模拟设备节点(如/sys/class/hwmon/hwmon0/temp1_input),配合fake-hwmon工具伪造传感器接口供监控程序读取。 -
USB 外接真实传感器:若你有支持 USB HID 或 CDC 协议的物理传感器模块(如 BME280 USB 版、Arduino 串口温湿度板),可在 UTM 设置中启用 USB 设备重定向,将设备透传给虚拟机。此时虚拟机内可像在物理机上一样用
pyserial、i2c-tools(需加载对应内核模块)读取。
推荐可行方案:USB 传感器直通 + Linux 内核支持
这是最接近“真实读取”的方式,适用于开发测试场景:
- 确保 UTM 虚拟机配置中已勾选 USB 支持,并启用 USB 重定向(Settings → USB → Enable)
- 将 USB 传感器插入 Mac,打开 UTM → 虚拟机设置 → USB → 点击“+”添加该设备(识别为 Vendor ID/Product ID)
- 启动虚拟机后,执行
lsusb确认设备已挂载;若为串口类设备,检查ls /dev/tty*是否出现新端口(如/dev/ttyACM0) - 安装对应驱动与工具:Ubuntu 下通常无需额外驱动,但需
sudo usermod -aG dialout $USER加入串口组,并安装python3-serial或i2c-tools
纯软件模拟:快速验证逻辑,无需硬件
适合教学、CI 测试或原型开发:
- 在虚拟机中创建虚拟设备节点:
sudo mkdir -p /sys/class/i2c-adapter/i2c-0/0-0076,再写入模拟值到temp1_input(需配合内核模块或 debugfs 挂载) - 更简单做法:用 Python 启动一个本地 HTTP 服务,返回 JSON 格式温湿度数据,虚拟机内用
curl http://host.docker.internal:8000/sensor(若启用网络桥接)或直接调用本地脚本生成随机值 - 利用
libgpiod或sysfsutils搭建伪 GPIO 仿真层,配合用户空间程序模拟传感器中断与读数
不复杂但容易忽略:UTM 不是 IoT 平台,它不内置传感器抽象层。所谓“读取传感器”,本质是通信问题——要么打通宿主与客户机的数据通道,要么在客户机内构造可交互的模拟接口。

















