【问题标题】:Permission error accessing USB from homeassistant docker从 homeassistant docker 访问 USB 的权限错误
【发布时间】:2021-08-29 21:09:25
【问题描述】:

我正在使用 Raspbian 的 RPi 4 上的 docker 容器中运行 homeassistant。我正在使用 tributs scripts 来提升以 root 身份运行 docker 映像的需求。这一切都很有效。但现在我正在尝试添加the dsmr integration,但我没有成功。集成需要通过 USB 连接到“Slimme Meter”。但是,我收到权限错误。我对 docker 和 linux 特权的了解太有限了,不知道从哪里开始调试。有没有人指点我一下?

这是家庭助理向我抛出的错误消息:

Logger: homeassistant.components.dsmr
Source: components/dsmr/config_flow.py:93
Integration: dsmr (documentation, issues)
First occurred: 21:18:17 (1 occurrences)
Last logged: 21:18:17

Error connecting to DSMR
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/serial/serialposix.py", line 322, in open
    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
PermissionError: [Errno 13] Permission denied: '/dev/ttyUSB0'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/dsmr/config_flow.py", line 93, in validate_connect
    transport, protocol = await asyncio.create_task(reader_factory())
  File "/usr/local/lib/python3.9/site-packages/serial_asyncio/__init__.py", line 445, in create_serial_connection
    serial_instance = serial.serial_for_url(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/serial/__init__.py", line 90, in serial_for_url
    instance.open()
  File "/usr/local/lib/python3.9/site-packages/serial/serialposix.py", line 325, in open
    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 13] could not open port /dev/ttyUSB0: [Errno 13] Permission denied: '/dev/ttyUSB0'

【问题讨论】:

    标签: docker home-assistant


    【解决方案1】:

    经过一番研究后,我发现我需要将用户添加到一个名为 dialout 的额外组,因为只有该组的成员才能访问 USB 端口(以及其他设备)。

    首先我通过运行找出了主机(运行docker容器的机器)中拨出组的组id

    cat /etc/group | grep dialout
    

    在我的情况下它返回 20。幸运的是,tributs 的脚本可以通过环境变量EXTRA_GID 将用户添加到额外的组中。所以 docker-compose 文件中用于访问 USB 的所有相关行都是(使用tribut 的脚本时)是:

        devices:
          - /dev/ttyUSB0:/dev/ttyUSB0
        environment:
          - PUID=1000
          - PGID=1000
          - EXTRA_GID=20  # this is the ID of the group 'dialout'
    

    【讨论】:

      猜你喜欢
      • 2021-07-02
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 2020-06-11
      相关资源
      最近更新 更多