首页 > 解决方案 > docker容器中的libinput

问题描述

与我之前的帖子“ No input enabled while running QT app in docker container on Raspberry PI ”相关的问题:似乎在 Raspberry Pi 3(Ubuntu Mate)上运行的 docker 容器(Ubuntu 16.04)中的 libinput 存在问题:libinput-当我在容器中运行 list-devices 时,它不会返回任何内容,而当我在 RP3 本身上运行时它会返回正确的设备。我对 Linux 上的 UI 很陌生,所以可能会遗漏一些简单的东西——感谢任何帮助。

标签: linuxdockerinputraspberry-pi3

解决方案


默认情况下,Docker 容器无法访问任何主机设备。Libinput 告诉您真相——容器无法看到连接到您的主机的任何输入设备。

您可以使用 to 的--device参数向容器公开特定设备docker run。您可以使用该标志公开主机上的所有--privileged设备,这会禁用 Docker 提供的大部分保护(即,应谨慎使用)。

例如,在我的主机上,我有:

# ls /
by-id    event0  event10  event12  event14  event16  event3  event5  event7  event9  mouse0
by-path  event1  event11  event13  event15  event2   event4  event6  event8  mice          

如果我启动一个普通容器,这些设备都不可见:

# docker run -it --rm fedora bash
[root@9582799320ff /]# ls /dev/input
ls: cannot access '/dev/input': No such file or directory

但是,如果我将该设备暴露给容器:

# docker run -it --rm --device /dev/input/event3 fedora bash

我懂了:

[root@bcca19a2341b /]# ls /dev/input/
event3

我可以打开该设备并与之交互。

请注意,即使像这样公开输入设备,libinput list-devices如果没有额外的配置,发现(例如,)也不会工作。该libput list-devices命令依赖于 中的信息/run/udev/data,默认情况下不暴露在容器内。您可以使用以下-v参数 将其公开docker run

# docker run -it --rm --device /dev/input/event3 \
  -v /run/udev/data:/run/udev/data fedora bash

现在发现有效:

[root@e897d760a147 /]# libinput list-devices
Device:           daskeyboard
Kernel:           /dev/input/event3
Group:            1
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Accel profiles:   n/a
Rotation:         n/a

推荐阅读