Контейнер 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
, которая по умолчанию не отображается внутри контейнера.Вы можете выставить это, используя аргумент -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