linux - 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 很陌生,所以可能会遗漏一些简单的东西——感谢任何帮助。
解决方案
默认情况下,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
推荐阅读
- php - 如何使用 curl 而不是使用 woocommerce rest api 的 file_get_contents 发送获取数据
- php - 在前端编辑现有文章时使用表单覆盖
- node.js - 如何使用 Firebase 函数获取存储桶中的文件列表
- javascript - Javascript 复制功能对输入类型不起作用?
- html - 为什么相同的 H1 位置在两个不同 HTML 文件中的两个相同位置上略有不同?
- javascript - 使用 express 和 multer 上传文件后如何下载?
- scala - sbt update 没有解析存储库中的最新工件
- excel - Excel 公式根据多个条件返回唯一计数
- c++ - 在 C++ 中读取文本文件中的逗号分隔行
- fortran - 为什么在 MPI_IRecv 之后所有进程等级都变为 0?