我需要将我的 USB 接口暴露给我的 LXD 容器,我使用的是 Ubuntu 16.04 机器。运行“lsusb”,我可以看到主机和容器上的接口相同。
在我的容器内,我正在使用一个利用这个 USB 接口(以及相关的连接设备)的软件,但在执行阶段出现一条消息:
“USB 打开失败:权限不足”
如何永久添加所需的直通?
任何建议都将不胜感激
非常感谢
答案1
请记住,我是第一次回答,因此请根据需要进行编辑。
最近,我需要将 PS3 控制器添加到容器中,并且可以通过以下方式进行添加:
首先,我们需要找到我们的设备信息。也就是说,vendorid
让productid
我们运行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 的很棒的信息。