Ошибка в 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 рабочих дня.