libinput在docker容器中

时间:2018-06-11 00:21:14

标签: linux docker input raspberry-pi3

与我上一篇文章相关的问题" 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很新,所以可能会遗漏一些简单的事情 - 感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

默认情况下,Docker容器不能访问任何主机设备。 Libinput告诉你实情 - 容器无法看到连接到主机的任何输入设备。

您可以使用--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中的信息,其中未公开。{1}} 容器默认情况下。您可以使用-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