Ubuntu 16.04 上 LXD 容器的 USB 直通

Ubuntu 16.04 上 LXD 容器的 USB 直通

我需要将我的 USB 接口暴露给我的 LXD 容器,我使用的是 Ubuntu 16.04 机器。运行“lsusb”,我可以看到主机和容器上的接口相同。

在我的容器内,我正在使用一个利用这个 USB 接口(以及相关的连接设备)的软件,但在执行阶段出现一条消息:

“USB 打开失败:权限不足”

如何永久添加所需的直通?

任何建议都将不胜感激

非常感谢

答案1

请记住,我是第一次回答,因此请根据需要进行编辑。

最近,我需要将 PS3 控制器添加到容器中,并且可以通过以下方式进行添加:

首先,我们需要找到我们的设备信息。也就是说,vendoridproductid 我们运行lsusb

输出应类似于此:

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 004: ID 058f:6362 Alcor Micro Corp. Flash Card Reader/Writer
Bus 001 Device 006: ID 054c:0268 Sony Corp. Batoh Device / PlayStation 3 Controller

对于我们的容器,我们感兴趣的是 ID 部分。因此,在我的例子中 054c:0268

054c我们的“vendorid”,是 0268 我们的“productid”

因此,根据配置文档,我们应该使用这样的命令来添加我们的设备

lxc config device add \
<ContainerName> \
<DeviceName> \
usb \
vendorid=<vendorid>

这是添加设备所需的最低要求,但是由于只指定了 vendorid,它将添加具有匹配 vendorid 的所有设备。如果您只想要那一个特定的设备,您也可以指定 productid。

因此就我的情况而言(展示一个具体的例子),我有:

lxc config device add \
pcsx2 \
ps3controllerblack \
usb \
vendorid=054c \
productid=0268

如图所示,我的 ContainerName 是“pcsx2”,DeviceName 可以是任何你想要的,它不必与任何东西相对应,所以我的设置为“ps3controllerblack”,这对我来说很容易记住

最后要注意的一点是,即使将设备添加到容器中,为了使我的控制器正常工作,我还需要将其设备文件添加到容器中。

所以对我来说,我必须找到设备文件,确定它的类型(unix-char 或 unix-block),然后添加它。

我的控制器提供了一个字符设备,/dev/input/js0 因此我的命令最终是:

lxc config device add \
pcsx2 \
joystickdevice \
unix-char \
path=/dev/input/js0

这样我就应该可以访问我的 USB 设备了。可能需要在配置中添加更多内容并指定模式、uid 或 gid,以便容器内的适当用户可以访问它。

如果您碰巧在命令中输入了错误的信息并且需要重新输入,请先移除设备然后重试

lxc config device remove <ContainerName> <DeviceName>

例子:

lxc config device remove pcsx2 ps3controllerblack

答案2

LXD GitHub 有很多与配置相关的文档。

https://github.com/lxc/lxd/blob/master/doc/configuration.md

在那里搜索 USB 你就会找到你需要的东西。

引用:设备配置

LXD 将始终为容器提供标准 POSIX 系统运行所需的基本设备。这些设备在容器或配置文件配置中不可见,并且可能无法覆盖。

其中包括:

/dev/null (character device)
/dev/zero (character device)
/dev/full (character device)
/dev/console (character device)
/dev/tty (character device)
/dev/random (character device)
/dev/urandom (character device)
/dev/net/tun (character device)
/dev/fuse (character device)
lo (network interface)

任何其他内容都必须在容器配置或其配置文件之一中定义。默认配置文件通常包含一个网络接口,该接口将成为容器中的 eth0。

要向容器添加额外的设备,可以将设备条目直接添加到容器或配置文件中。

容器运行时可以添加或删除设备。

每个设备条目都由一个唯一名称标识。如果在后续配置文件或容器自己的配置中使用了相同的名称,则整个条目将被新定义覆盖。

设备条目通过以下方式添加:lxc config device add [key=value]...

= = = 结束引用 = = =

示例命令:

lxc 配置文件设备添加 [key=value]…

此外,如果您使用 LXD,我强烈建议您订阅 lxc-users 邮件别名,因为开发人员会监控该邮件并每天回答问答。

https://lists.linuxcontainers.org/

最后,Reddit 上有一个 LXD 子版块(如果您使用 Reddit?),它不是为了支持而存在的,但确实提供了许多有关 LXD 的很棒的信息。

https://www.reddit.com/r/LXD/

相关内容