libinput в док-контейнере - PullRequest
0 голосов
/ 11 июня 2018

Вопрос, связанный с моим предыдущим постом " Не включен ввод при запуске приложения QT в док-контейнере на Raspberry PI ": похоже, проблема с libinput в док-контейнере (Ubuntu 16.04), работающем на RaspberryPi 3 (Ubuntu Mate): libinput-list-devices ничего не возвращает, когда я запускаю его в контейнере, в то время как он возвращает правильные устройства, когда я запускаю на самом RP3.Я довольно плохо знаком с пользовательским интерфейсом в Linux, поэтому могу упустить некоторые простые вещи - любая помощь приветствуется.

1 Ответ

0 голосов
/ 11 июня 2018

Контейнер 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
...