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