Ошибка в QEMU при использовании evdev passthrough: Permission denied

Ошибка в QEMU при использовании evdev passthrough: Permission denied

Вступление

В данной статье рассмотрим как можно исправить ошибку, возникающую при использовании evdev passthrough, который позволяет использовать одну клавиатуру и/или мышку для доступа как к хосту, так и к виртуальной машине без установки какого-либо стороннего софта, вроде synergy.
Выглядит ошибка таким вот образом:

Error starting domain: internal error: process exited while connecting to monitor: 2020-08-01T16:55:57.909849Z qemu-system-x86_64: -object input-linux,id=kbd1,evdev=/dev/input/by-id/usb-Logitech_USB_Receiver-event-kbd,grab_all=on,repeat=on: Could not open '/dev/input/by-id/usb-Logitech_USB_Receiver-event-kbd': Permission denied

Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 75, in cb_wrapper
callback(asyncjob, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 111, in tmpcb
callback(*args, **kwargs)
File "/usr/share/virt-manager/virtManager/object/libvirtobject.py", line 66, in newfn
ret = fn(self, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/object/domain.py", line 1279, in startup
self._backend.create()
File "/usr/lib/python3/dist-packages/libvirt.py", line 1234, in create
if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirt.libvirtError: internal error: process exited while connecting to monitor: 2020-08-01T16:55:57.909849Z qemu-system-x86_64: -object input-linux,id=kbd1,evdev=/dev/input/by-id/usb-Logitech_USB_Receiver-event-kbd,grab_all=on,repeat=on: Could not open '/dev/input/by-id/usb-Logitech_USB_Receiver-event-kbd': Permission denied

Исправляем ошибку

Для исправления этой ошибки, необходимо внести кое-какие правки в файл с настройками libvirt для apparmor, на примере Linux Mint это будет файл /etc/apparmor.d/abstractions/libvirt-qemu
Открываем его любым текстовым редактором и в самый низ дописываем следующую строчку:

/dev/input/* rw,
Если вам важно предоставить доступ не для всех устройств ввода, а для конкретных, то вместо * нужно указывать эти устройства

После сохранения настроек, необходимо перезапустить службу apparmor, сделать это можно следующей командой:

sudo service apparmor restart

После этого, пытаемся запустить виртуалку и ошибка должна уйти.

Была ли эта статья Вам полезна?

Добавить комментарий

Ваш адрес email не будет опубликован.

Напоминаем Вам, что Ваше сообщение будет опубликовано только после проверки администратором сайта. Обычно это занимает 1-2 рабочих дня.