Android Studio: доступ к устройству / dev / kvm запрещен


557

Когда я пытаюсь запустить приложение Android на эмуляторе, я получаю эту ошибку:

Разрешение / dev / kvm отклонено.

Я проверил разрешения и добавил пользователя, с которым я сейчас нахожусь, в группу kvm. Что не так?

Ответы:


870

Как уже упоминалось в комментариях, начиная с Ubuntu 18.04 и Linux Mint Tara вам нужно в первую очередь sudo apt install qemu-kvm.

Чтобы проверить право собственности на /dev/kvmиспользование

ls -al /dev/kvm

Пользователь был root, группа kvm. Чтобы проверить, какие пользователи в kvmгруппе, используйте

grep kvm /etc/group

Это вернулся

kvm:x:some_number:

в моей системе: поскольку в финале нет ничего правильного, в группе :нет пользователей kvm.

Чтобы добавить своего пользователя в группу kvm , вы можете использовать

sudo adduser $USER kvm

который добавляет пользователя в группу, и проверьте еще раз с grep kvm /etc/group.

Как уже упоминалось @marcolz, команда newgrp kvmдолжна изменить членство в группе для вас. Если это не сработало, @Knossos упомянул, что вы можете выйти и вернуться (или перезапустить), чтобы разрешения вступили в силу. Или сделайте, как упомянуто @nmirceac, и войдите в ту же оболочку через su - $USER.


124
После установки qemu-kvmи добавления моего пользователя в группу kvmне получилось. Но это произошло после перезагрузки компьютера (Ubuntu 18.04).
Сдлинс

7
Что, если пользователь был, rootа группа была root. Должны ли мы изменить свою группу?
Майкл Фултон

4
Мне приходилось каждый раз включать свой компьютер sudo chown -R username: username / dev / kvm Эти шаги избавили меня от головной боли каждый раз. Thansk @ serv-inc Это должно быть принято как правильный ответ.
Саджид Зеб

3
Вы можете использовать эту команду для автоматического добавления текущего пользователя в kvmsudo adduser $USER kvm
Munish Chandel

17
Мне тоже нужно было предоставить право владения kvm пользователю: sudo chown $USER /dev/kvm
Иван Родригес Торрес

535

Вот так я и начал работать в Ubuntu 18.04

sudo apt install qemu-kvm

Добавьте своего пользователя в группу kvm, используя:

sudo adduser <Replace with username> kvm

Если по-прежнему отображается разрешение отклонено :

sudo chown <Replace with username> /dev/kvm

Попробуй это.


2
сохрани мой день с твоим последним ответом.
Сатиш Сундхарам

14
шаг 2 может потребовать перезагрузки
Якоб Эрикссон

10
Вы не должны менять владельца /dev/kvm/папки. вместо этого вы должны добавить пользователя в kvmгруппу, как в этом ответе: stackoverflow.com/a/45749003/1213934
выход из системы

3
@JakobEriksson Требуется повторный вход в систему. Перезагрузки зарезервированы для Windows (и системных обновлений) ;-)
Bayou

3
Да, так же как и @logoff, вы не должны менять владельца / dev / kvm, потому что при этом вы нарушаете ACL по умолчанию вашей системы Linux, что не является хорошей практикой безопасности. Вместо этого следуйте этой инструкции: stackoverflow.com/a/45749003/7206497
eVagabond

34

Попробуйте это, у меня получилось

  1. sudo apt install qemu-kvm

  2. sudo chown -R <username>:<username> /dev/kvm –


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

6
Это сомнительно, поскольку он рассматривает многопользовательскую систему как однопользовательскую систему. Ни один другой пользователь не сможет использовать KVM при использовании этого подхода. Это хорошая идея? Я сомневаюсь в этом ...
arkascha

1
Это решение совершенно неверно, так как оно изменяет права по умолчанию на / dev / kvm. Дело не только в том, что он не будет сохраняться между перезагрузками / обновлениями системы. Он также принудительно изменяет настройки системы. Держись подальше.
andrzejwp

Не делайте chown- добавьте ваше имя пользователя в соответствующие группы - kvm или libvirt. См. Документацию для [ help.ubuntu.com/community/KVM/Installation](Ubuntu) .
Дайсуке Арамаки

Почему вы записываете файл устройства рекурсивно? Кроме того, что с суффиксом? Это, безусловно, приводит к ошибке.
maxschlepzig

29

Вы также пробовали следующее, это должно работать:

sudo chown <username> /dev/kvm
sudo chmod o+x /dev/kvm

1
chmod o+xсовершенно бесполезно. Первая команда заставляет это работать - но посмотрите мои другие комментарии, почему это плохая идея.
Герд

1
Это работает, но не сохраняется перезагрузка. Я на POP OS, хотя!
Арка Права Басу

1
Это решение неверно, так как оно изменяет права по умолчанию на /dev/kvm. Дело не только в том, что он не будет сохраняться между перезагрузками / обновлениями системы. Он также принудительно изменяет настройки системы. Держись подальше.
andrzejwp

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

28

Это потому что /dev/kvmне доступно. Чтобы сделать доступным из Android Studio запустите команду ниже

sudo chmod 777 -R /dev/kvm

Он попросит ваш пароль. После этого перезапустите Android Studio.

KVMтребуется ром эмулятора. Если вы еще не установили его, установите его

sudo apt install qemu-kvm

Этот ответ сработал в моем случае после того, как последовал самый одобренный ответ! Спасибо!
Crono

1
Не делай этого. Смотрите мой ответ выше.
andrzejwp

@andrzejwp: Какой ответ? Я не вижу ответа от вас. Учитывая, насколько вы непреклонны в своем ответе, можете ли вы дать ссылку на него ?
Дан Дакалеску

Почему вы рекурсивно ( -R) меняете права доступа для одного файла устройства? Кроме того, разрешения на выполнение являются излишними. Наконец, udev может настроить разрешения после каждого запуска эмулятора.
maxschlepzig

25
sudo chown $USER /dev/kvm

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

Описание: Ubuntu 18.04.3

Выпуск LTS: 18.04

Кодовое название: бионический


1
Не делай этого. Смотрите мой ответ выше.
andrzejwp

1
@andrzejwp Где твой ответ? Это в комментарии? Если это так, он, вероятно, рухнул, и я не вижу этого. Я искал на странице ваш пользовательский тег, но не могу найти. Я с удовольствием попробую ваш ответ - потому что мой ответ не совсем правильный (не сохраняется) - но я не могу его найти. Оставьте ссылку или создайте новый ответ и я попробую.
Раддевус

Используйте лучший ответ. Не используйте chmod / chown.
andrzejwp

@andrzejwp: пожалуйста, дайте ссылку на ваши ответы, вместо того, чтобы говорить «выше». Что если ваш ответ окажется ниже того, который вы комментируете?
Дан Даскалеску

Это не является устойчивым при перезагрузках, и демон udev может перенастроить владельца /dev/kvmво время выполнения.
maxschlepzig

21

Я использую Ubuntu 18.04. Я столкнулся с той же проблемой. Я запускаю эту часть команды в терминале, и проблема решена.

sudo chown $USER /dev/kvm

Вышеприведенная команда предназначена для всех пользователей, присутствующих в вашей системе.

Если вы хотите предоставить доступ только определенному пользователю, выполните эту команду

sudo chown UserNameHere /dev/kvm

1
Нет. Это не то, что вы должны делать. Смотрите мой ответ выше.
andrzejwp

Как это ответ отличается от @raddevus' ответа , который он разместил один месяц раньше?
maxschlepzig

20

Это краткая версия ответа Герда

откройте терминал и выполните следующие команды

sudo groupadd -r kvm

sudo gedit /lib/udev/rules.d/60-qemu-system-common.rules

Добавьте следующую строку в открытый файл и сохраните его

KERNEL == "kvm", GROUP = "kvm", MODE = "0660"

Наконец, запустите:

sudo usermod -a -G kvm <your_username>

Перезагрузите компьютер и готово!


Это плохой совет. Никогда не редактируйте напрямую конфигурацию udev /lib/udev/rules.d. У Udev есть оверлейный механизм, в котором размещенная конфигурация /etc/udev/rules.dимеет приоритет над доступной в /lib/udev/rules.d.
maxschlepzig

Я не профессиональный пользователь Linux, это просто решение, которое сработало для меня, и я решил сделать его лаконичным и легким для чтения для других, как я. спасибо за разъяснения, Макс.
Насир Джафарзаде

15

Я столкнулся с той же проблемой, и для решения этой проблемы просто введите следующие команды в терминале для клиентов Linux

   sudo apt-get install qemu-kvm

    // type your password

   sudo chmod 777 -R /dev/kvm

и после этого попробуйте запустить симулятор, он будет работать


1
Боже, нет. Смотрите мои комментарии выше.
andrzejwp

Избыточная установка qemu-kvm, избыточное использование рекурсивной опции и лишние настройки для исполнительного разрешения. Также не сохраняется после перезагрузки и даже во время выполнения udev.
maxschlepzig

13

Нет необходимости устанавливать qemu-kvm(и все его зависимости), если вы хотите запустить только эмулятор Android Studio.

Единственное, что вам нужно сделать, - это предоставить вашему пользователю (то есть тому, с кем вы вошли) право доступа к /dev/kvm-device.

Это делается в три простых шага.

Первый:

Создание kvm-группа

groupadd -r kvm

Опция -rсоздает системную группу, т.е. с GID <= 999 (см. /etc/login.defs=> SYS_GID_MAX)

Во-вторых:

Изменить разрешения на /dev/kvm. Это можно сделать как часть qemu-kvm-installation, потому что устанавливается одна из зависимостей qemu-system-common(в современных системах Ubuntu имя пакета может отличаться), что, в свою очередь, устанавливает файл, /lib/udev/rules.d/60-qemu-system-common.rulesсодержащий следующее:

KERNEL=="kvm", GROUP="kvm", MODE="0660"

Так что, если вы просто создаете файл, /etc/udev/rules.d/60-qemu-permissions.rulesсодержащий вышеуказанную строку, вы сделали первый шаг.

В третьих:

Добавьте свое имя пользователя в группу, выполнив

usermod -a -G kvm <your_username>- -aважно для добавления вашего пользователя в kvm-группу. Без этого вы перезапишете групповые настройки для вашего пользователя только на принадлежность к "kvm" ...

Вот и все.

Чтобы новое правило udev и настройки группы вступили в силу, проще всего перезагрузиться и снова войти в систему.

Вы также можете выполнить

udevadm control --reload-rules && udevadm trigger

для перезагрузки правил, но вам все равно придется выйти и снова войти в систему с учетом новой группы.


10

Я использую Linux Debian, и я сталкиваюсь с тем же путем. В моем AVD, показывающем мне сообщение "/ dev / kvm разрешение отказано", и я попытался найти решение, то, что я делаю, чтобы решить это, в терминале типа это:

sudo chmod -R 777 /dev/kvm

он предоставит доступ к папке / dev / kvm, затем проверьте еще раз на вашем AVD , сообщение об ошибке исчезнет, ​​надеюсь, это поможет.


1
Это совершенно неправильно. Не делай этого никогда. Смотрите мои комментарии выше.
andrzejwp

1
@andrzejwp: комментарии выше, ГДЕ ?!
Дан Даскалеску

Рекурсивный вариант излишен, разрешения на выполнение излишни. Изменения не сохраняются после перезагрузки. Изменения не стабильны во время выполнения udev.
maxschlepzig

9
sudo setfacl -m u:$USER:rwx /dev/kvm

Работал на меня.


2
Гораздо лучше, чем все chownприведенные здесь примеры, но я бы пропустил xиз разрешений.
Герд

Изменения не сохраняются после перезагрузки.
maxschlepzig

5

Только одно небольшое улучшение в ответе Джеррина на исправление этой ошибки в Ubuntu 18.04 с использованием $USERпеременной, доступной в терминале bash. Таким образом, вы можете использовать следующие команды две команды:

sudo apt install qemu-kvm

Добавить текущего пользователя в группу kvm

sudo adduser $USER kvm

Также, если у вас все еще есть проблемы, еще одной проблемой для меня был способ, которым я установил Ubuntu. Я сделал ошибку, установив флажок во время установки для установки стороннего программного обеспечения, которое не очень хорошо подходило для моей видеокарты nvidia для разработки. Поэтому я переустановил Ubuntu с неконтролируемым сторонним программным обеспечением .

введите описание изображения здесь

Затем после установки откройте «Software & Updates» и перейдите на вкладку «Дополнительные драйверы». Выберите самые последние проприетарные драйверы, которые также были протестированы, и внесите изменения. Необходимо перезагрузить машину, чтобы изменения вступили в силу.

введите описание изображения здесь


3

Это сработало для меня в Linux (x18) ope Надеюсь, это сработает и у вас

sudo chown hp /dev/kvm

2
Нет, это не так, и, пожалуйста, не делайте этого.
andrzejwp

Изменения не сохраняются после перезагрузки.
maxschlepzig

3

Под Ubuntu разрешения /dev/kvmобычно выглядят так:

$ ls -l /dev/kvm
crw-rw---- 1 root kvm 10, 232 May 24 09:54 /dev/kvm

Пользователь, который запускает эмулятор Android (т. Е. Ваш пользователь), должен получить доступ к этому устройству.

Таким образом, есть два основных способа получения доступа:

  • Убедитесь, что ваш пользователь входит в группу kvm (требуется изменение имени пользователя после изменения)
  • Расширьте разрешения этого устройства, чтобы у вашего пользователя был доступ (требуется изменение конфигурации демона udev)

Добавить пользователя в KVM Group

Проверьте, входит ли ваш пользователь в группу kvm, например:

$ id 
uid=1000(juser) gid=1000(juser) groups=1000(gms),10(wheel)

Если это не так, добавьте его, например:

$ sudo usermod --append --groups kvm juser

После этого изменения вы должны выйти из системы и войти снова, чтобы изменения вступили в силу (проверьте снова с помощью id).

Расширить разрешения

Кроме того, вы можете просто расширить права доступа к /dev/kvmустройству.

Пример:

echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' \
    | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm

FWIW, это по умолчанию в других дистрибутивах, таких как Fedora и CentOS.

Проверьте эффективность вышеперечисленных команд с другой ls. Вы должны увидеть вывод, похожий тоже:

$ ls -l /dev/kvm
crw-rw-rw-. 1 root kvm 10, 232 2020-05-16 09:19 /dev/kvm

Большое преимущество: вам не нужно выходить из системы и снова входить в систему, чтобы изменения вступили в силу.

Non-решения

  • вызов chmodи chownпрямое включение /dev/kvm- 1) эти изменения не сохраняются после перезагрузок и 2) поскольку /dev/kvmразрешения контролируются демоном udev, он может «исправить» свои разрешения в любое время, например, после каждого запуска эмулятора
  • добавление исполняемых разрешений для /dev/kvm- ваш эмулятор просто требует разрешения на чтение и запись
  • рекурсивное изменение разрешений /dev/kvm- я не знаю, что с этим - похоже на культ груза
  • установка дополнительных пакетов, таких как qemu - у вас уже установлен эмулятор - вам просто нужно получить доступ к /dev/kvmустройству

1

Откройте Терминал и войдите как администратор

sudo su

Перейти в папку dev

cd /dev/

Изменить режим KVM

chmod 777 -R kvm

Я думаю, что вы имеете в виду cd /devвместо sudo.
JJJ

да, кд / дев.
Даминду Лакмал

1
Это работает. Но делать это нужно каждый раз, когда компьютер перезагружается.
Ланил Марасингхе

Почему ты звонишь chmodс -R? Рекурсивное изменение разрешений для одного файла устройства /dev/kvmне выглядит слишком полезным. Кроме того, разрешения на выполнение являются излишними на этом устройстве. Наконец, udev может перенастраивать /dev/kvmразрешения после каждого запуска. Таким образом, этот метод не очень эффективен.
maxschlepzig

0

Я был в аналогичной ситуации с той же ошибкой прав доступа к / dev / kvm, что я сделал необходимые установки, но не добавил пользователя в группу kvm. Все, что мне нужно было сделать, это

sudo adduser <Replace with username> kvm

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


6
Не достаточно ли выйти из системы / войти?
user1053510


-1

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


1
Это ничего не изменит относительно исходной проблемы с /dev/kvm-permissions.
Герд


-1

Хотя KVM - это модуль, встроенный в само ядро ​​Linux, это не означает, что все необходимые пакеты включены в вашу установку Ubuntu / Linux по умолчанию. Вам понадобится несколько, чтобы начать, и они могут быть установлены с помощью этой команды в терминале:

& sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager    

Настройте сетевой мост

Чтобы ваши виртуальные машины могли получить доступ к вашему сетевому интерфейсу и были назначены свои собственные IP-адреса, нам необходимо настроить мостовую сеть в нашей системе.

Сначала запустите следующую команду Linux, чтобы узнать, какому имени был присвоен ваш сетевой интерфейс. Знание этого позволит нам выполнить дополнительную настройку позже.

$ ip a     

Определить имя сетевого интерфейса

В моем случае сетевой интерфейс называется enp2s0. Ваш, вероятно, будет очень похожим именем.

Чтобы сообщить Ubuntu, что мы хотим, чтобы наше соединение было мостовым, нам нужно отредактировать файл конфигурации сетевых интерфейсов. Это никак не повлияет на ваше соединение. Это только позволит этому соединению быть разделенным с виртуальными машинами.

Используйте code(Visual Studio Code) или ваш любимый текстовый редактор, чтобы открыть следующий файл:

$ code /etc/network/interfaces     

Когда вы впервые открываете этот файл, он может быть пустым или содержать всего пару строк. Интерфейс вашего моста называется br0, поэтому добавьте следующую строку, чтобы интерфейс появился по умолчанию:

auto br0    

Под этой строкой добавьте следующую строку для вашего текущего сетевого интерфейса (тот, кого вы назвали ранее).

iface enp2s0 inet manual

Далее вы можете добавить информацию о мосте. Эти строки сообщают Ubuntu, что ваш мост будет использовать DHCP для автоматического назначения IP-адресов, а ваш мост будет управлять вашим текущим интерфейсом.

iface br0 inet dhcp
      bridge_ports enp2s0

Вот как должен выглядеть ваш файл после того, как все изменения были применены (если у вас также есть пара строк, которые уже были там, хорошо иметь их тоже):

Файл конфигурации сетевых интерфейсов

Сохраните ваши изменения и выйдите из файла.

Добавьте своего пользователя в группы

Чтобы управлять вашей виртуальной машиной (-ами) без прав root, ваш пользователь должен принадлежать к двум группам пользователей. Выполните следующие команды, чтобы добавить вашего пользователя в соответствующие группы (заменив user1 именем вашего пользователя):

$ sudo adduser user1 libvirt
$ sudo adduser user1 libvirt-qemu
$ sudo adduser user1 kvm

Когда вы закончите, вы должны перезагрузить систему, чтобы все изменения, внесенные в вашу конфигурацию пользователя и сети, имели возможность вступить в силу.


Downvote: Эта тема не о том, как заставить KVM работать. Речь идет об исключении сообщения «Отказано в доступе» при запуске эмулятора, поставляемого с Andoid Studio. Не нужно libvirtи не нужно настраивать интерфейсы ...
Герд

Хотя я очень новичок в разработке для Android, держу пари, что он выполняет большинство этих шагов для вас. Тем не менее, он просит вас установить множество одинаковых пакетов . (Ожидание того, что каждый разработчик Android правильно настроит мост, немного уходит в поле, даже ограничено разработчиками Linux для Android.)
jpaugh

-1

Чтобы создать виртуальное устройство в Linux - я должен выполнить эту три команды, и это помогает мне избежать проблем при создании устройств AVD - процесс -

sudo apt install qemu-kvm
sudo adduser $USER kvm
sudo chown $USER /dev/kvm 

Итак, теперь все готово, перезапустите Android Studio и начните создавать приложение с эмулятором.



-4

Выполнение приведенной ниже команды в Ubuntu 18.04 сработало для меня sudo chown -R / dev / kvm


1
Первый: Никогда не меняйте владельца системных файлов. --- Второй: поскольку /dev/kvmфайл не -Rимеет никакого эффекта. - Третий: chownтребует new ownerаргумента. --- Четвертый: после перезагрузки вы должны делать это снова и снова.
Герд

-9

Если вы откроете свой иде с помощью sudo. У вас не будет этой проблемы.


7
с какой стати мне нужны разрешения sudo для разработки приложения для Android?
техник

1
Подчеркну еще раз: никогда не надо этого делать. Также посмотрите на gksu и gksudo для запуска приложений с графическим интерфейсом от имени root.
Маниш Радж
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.