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

Ubuntu20.04下Chromium 118无法通过Web Serial API识别串口求助

解决Snap版Chromium Web Serial API无法识别ESP32串口的问题

问题背景

Ubuntu 20.04系统中,通过Snap安装的Chromium 118.0.5993.88使用Web Serial API连接USB ESP32时,串口列表为空;但相同测试脚本在Google Chrome中可正常识别所有串口。已确认Arduino能识别该串口,用户已加入dialout组,执行过sudo snap connect chromium:raw-usb并重装Chromium,问题仍未解决。

解决步骤

1. 赋予Chromium串口接口权限

Snap的raw-usb权限不覆盖串口设备的单独访问权限,需手动连接serial-port接口:

sudo snap connect chromium:serial-port

执行完成后重启Chromium,重新测试串口识别。

2. 添加ESP32专属udev规则

如果系统未正确赋予ESP32串口设备访问权限,需添加udev规则:

  • 创建规则文件:
sudo nano /etc/udev/rules.d/99-esp32.rules
  • 在文件中写入以下内容(可通过lsusb命令查看你的ESP32的VID和PID,示例为常见的ESP32参数):
SUBSYSTEM=="tty", ATTRS{idVendor}=="10C4", ATTRS{idProduct}=="EA60", MODE="0666", GROUP="dialout"
  • 保存文件后重载udev规则并触发设备刷新:
sudo udevadm control --reload-rules && sudo udevadm trigger

拔掉并重新插入ESP32,重启Chromium测试。

3. 检查并配置Snap允许的串口路径

Snap应用仅能访问特定路径下的串口设备(默认/dev/ttyUSB*、/dev/ttyACM*),若ESP32被识别为其他路径(如/dev/ttyS*),需手动添加到允许列表:

  • 查看ESP32的实际设备路径:
ls /dev/tty* | grep -E "(USB|ACM)"
  • 将设备路径添加到Snap的Chromium配置:
sudo snap set chromium serial-port.paths=/dev/ttyS0

(多个路径用逗号分隔,如/dev/ttyS0,/dev/ttyUSB0)
重启Chromium后测试。

4. 切换为Deb版Chromium(备选方案)

若Snap沙箱限制无法绕过,可卸载Snap版并安装Deb版:

sudo snap remove chromium
sudo apt update && sudo apt install chromium-browser

Deb版无Snap的严格沙箱限制,Web Serial API可正常识别串口。

测试脚本(格式化版)

<!DOCTYPE html>
<html>
<head>
  <title>Serial Ports List</title>
</head>
<body>

<h1>Serial Ports Test</h1>

<button id="listPortsButton">List Serial Ports</button>

<script>
  async function listSerialPorts() {
    try {
      const availablePorts = await navigator.serial.getPorts();
      availablePorts.forEach(port => {
        console.log('Port:', port);
      });
    } catch (error) {
      console.error('There was an error listing serial ports:', error);
    }
  }

  document.querySelector("#listPortsButton").addEventListener("click", async () => {
    try {
      const port = await navigator.serial.requestPort();
      console.log('User-selected port:', port);
      listSerialPorts();
    } catch (err) {
      console.error('There was an error selecting a port:', err);
    }
  });
</script>

</body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:45:11