我在/dev/video0上有一个U盘摄像头,在用户登录之前我正在尝试访问它(准确地说,我有一个Azure IoT边缘容器运行在一个Ubuntu18.04实例上,它需要以无头模式运行,并且该盒子需要能够在不需要任何人每次物理登录的情况下进行电力循环)。
如果我首先物理登录到该框中,则ACL将正确地设置为/dev/video0,并且我的容器(在myuser下运行)可以愉快地访问/dev/video0:
myuser@myuser-UBUNTU:~$ sudo getfacl /dev/video0
getfacl: Removing leading '/' from absolute path names
# file: dev/video0
# owner: root
# group: video
user::rw-
user:myuser:rw-
group::rw-
mask::rw-
other::---但是,如果我没有实际登录到该框(例如,在重新启动之后),我的用户帐户(myuser)将永远无法访问/dev/video0 (相反,gdm用户将获得它)。
myuser@myuser-UBUNTU:~$ sudo getfacl /dev/video0
getfacl: Removing leading '/' from absolute path names
# file: dev/video0
# owner: root
# group: video
user::rw-
user:gdm:rw-
group::rw-
mask::rw-
other::---我确信这是一个ACL问题,因为当我将ssh放入框中(在物理登录之前),并手动将myuser添加到/dev/video0的ACL列表中,我的容器可以再次愉快地访问/dev/video0。
My问题:如何确保在启动时,在挂载/dev/video0时,这种情况自动发生:
sudo setfacl -m u:myuser:rw /dev/video0将myuser添加到视频组does not work (在这方面,在Ubuntu上ACL似乎已损坏):
sudo usermod -a -G video myuser我尝试了我能想到的每一个变体RE:组,没有任何影响。当Ubuntu启动时,我似乎真的需要将myuser自动添加到/dev/video0的ACL中,但我不知道如何做到这一点。有什么想法吗?
发布于 2019-02-22 18:48:12
准确地说,您需要在Docker启动容器之前启动它。
因此,您可以为Docker systemd单元添加一个插入,以便在Docker启动之前运行您想要的任何内容。
例如,我会创建一个系统插入,如下所示:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/video-permissions.conf <此时,每当Docker启动时,指示的命令将预先运行。
https://serverfault.com/questions/955324
复制相似问题