如何使 USB 在 LXD 容器中可见

如何使 USB 在 LXD 容器中可见

我对 LXD Conatiners 还很陌生。我有一台正在运行的主机 ubuntu 16.04 机器,它有一个容器:

root@ubuntu-blade1:/etc/udev/rules.d# lxc list
+-------------+---------+----------------------+------+------------+-----------+
|    NAME     |  STATE  |         IPV4         | IPV6 |    TYPE    | SNAPSHOTS |
+-------------+---------+----------------------+------+------------+-----------+
| nish-ubuntu | RUNNING | 10.20.186.185 (eth0) |      | PERSISTENT | 0         |
+-------------+---------+----------------------+------+------------+-----------+
root@ubuntu-blade1:/etc/udev/rules.d# 

我有一个连接到主主机系统的 USB 设备:

Disk /dev/sde: 14.7 GiB, 15795748864 bytes, 30851072 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0527cd14

lsusb 输出如下:

root@ubuntu-blade1:/etc/udev/rules.d# lsusb
Bus 002 Device 005: ID 8564:1000 Transcend Information, Inc. JetFlash
Bus 002 Device 004: ID 0424:2512 Standard Microsystems Corp. USB 2.0 Hub
Bus 002 Device 003: ID 0424:2512 Standard Microsystems Corp. USB 2.0 Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 005: ID 0624:0251 Avocent Corp. Virtual Mass Storage
Bus 001 Device 004: ID 0624:0249 Avocent Corp. Virtual Keyboard/Mouse
Bus 001 Device 003: ID 0624:0248 Avocent Corp. Virtual Hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

现在我需要检测/连接容器内的 USB (/dev/sde)。我对 udev 有一些了解,并看到了关于同一问题的几个堆栈问题,但没有一个有明确的程序来执行此操作。有人可以指导一下吗?

答案1

这个问题已经很老了,但我今天偶然发现了同样的用例,我发现了一个非常简单的解决方案,可能 7 个月前还没有。

在这关联人们可以找到更多信息,但本质上是这样的:

假设我们在 /dev/ttyUSB2 上有一个调制解调器设备(AT 命令)和一个容器“xenial1”,可以使用以下命令将 ttyUSB2 添加到容器中:

$ lxc config device add xenial1 ttyUSB2 unix-char path=/dev/ttyUSB2

容器是否运行并不重要

此配置永久保存在容器的默认配置文件中:

$ lxc config show xenial1
architecture: x86_64
config:
  security.privileged: "true"
  volatile.base_image: <numbers>
  volatile.eth0.hwaddr: xx:xx:xx:xx:xx:xx
  volatile.idmap.base: "0"
  volatile.idmap.next: '[]'
  volatile.last_state.idmap: '[]'
  volatile.last_state.power: RUNNING
devices:
  root:
    path: /
    type: disk
  ttyUSB1:
    path: /dev/ttyUSB1
    type: unix-char
  ttyUSB2:
    path: /dev/ttyUSB2
    type: unix-char
ephemeral: false
profiles:
- default

要删除设备,请使用“删除”命令代替“添加”命令。

注意:我的容器是“特权”的,因此此解决方案可能不适用于非特权容器

答案2

如果您使用的是非特权容器,您还可以为该设备设置正确的权限...我的经验是,当我尝试在容器中使用网络摄像头时就是这种情况...也许这也有帮助.. 。

lxc config device add containerName yourNameForTheDevice unix-char path=/path/to/device

lxc 配置设备集容器名称 yourNameForTheDevice 模式 666

另请注意,USB 直通仅适用于 lxd 2.5 或更高版本,正如 Stephan Graber 在https://stgraber.org/(向下滚动到容器中的 USB 设备)。所以也许您还需要从 lxd-developers 添加存储库......此时,“正常”ubuntu-xenial 存储库只有 lxd-version 2.0.9

检查您拥有的版本

dpkg -l lxd

查看此页面并考虑使用该存储库: https://launchpad.net/~ubuntu-lxc/+archive/ubuntu/lxd-stable

如果你这样做,你可以将其更新到版本 2.15

相关内容