Android Studio: / dev / kvm у дозволі пристрою відмовлено


556

Коли я намагаюся запустити свою програму Android на емуляторі, я отримую цю помилку:

/ dev / kvm у дозволі відмовлено.

Я перевірив дозволи та додав користувача, з яким я зараз увійшов до групи kvm. Що не так?

Відповіді:


868

Як згадувалося в коментарях, починаючи з 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.


123
Після встановлення qemu-kvmта додавання мого користувача до групи kvmце не працювало. Але це було зроблено після перезавантаження комп'ютера (Ubuntu 18.04).
sdlins

7
Що робити, якщо користувач був, rootа група була root. Чи слід змінювати її групу?
Майкл Фултон

4
Мені довелося щоразу вмикати свій ПК sudo chown -R ім'я користувача: ім'я користувача / dev / kvm Ці кроки врятували мій головний біль кожного разу. Thansk @ serv-inc Це слід сприймати як правильну відповідь.
Садід Зеб

3
Ви можете скористатися цією командою для автоматичного додавання поточного користувача до kvmsudo adduser $USER kvm
Munish Chandel

16
Мені також потрібно було надавати право власності на kvm користувачеві: sudo chown $USER /dev/kvm
Iván Rodríguez Torres

534

Ось так я змусив його працювати в Ubuntu 18.04

sudo apt install qemu-kvm

Додайте свого користувача до групи kvm, використовуючи:

sudo adduser <Replace with username> kvm

Якщо досі відображається дозвіл відмовлено :

sudo chown <Replace with username> /dev/kvm

Спробуй це.


2
збережи мій день своєю останньою відповіддю.
Sathish Sundharam

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

33

Спробуйте це, для мене це спрацювало:

  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/InstallationSense(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

Це не стійко через перезавантаження. Демон демов може повторно налаштувати дозволи під час його виконання та надавати іншим виконуваний біт дозволу просто зайвий.
maxschlepzig

27

Це тому, що /dev/kvmце недоступно. Щоб зробити доступним з андроїд-студії, запустіть команду нижче

sudo chmod 777 -R /dev/kvm

Він запитає ваш пароль. Після цього перезавантажте Android Studio.

KVMнеобхідний для емулятора рому. Якщо ви ще не встановили його, тоді встановіть його

sudo apt install qemu-kvm

Ця відповідь зробила трюк у моєму випадку, після того, як слідкував за найбільш відповідальною відповіддю! Дякую!
Кроно

1
Не роби цього. Дивіться мою відповідь вище.
andrzejwp

@andrzejwp: Яка відповідь? Я не бачу відповіді від вас. З огляду на те, наскільки ви ставитеся до своєї відповіді, чи можете ви посилання на неї ?
Дан Даскалеску

Чому ви рекурсивно ( -R) змінюєте дозволи на одному файлі пристрою? Крім того, дозволи на виконання є зайвими. Нарешті, udev може коригувати дозволи після кожного запуску емулятора.
maxschlepzig

25
sudo chown $USER /dev/kvm

Просто запустивши, що одна команда працювала для мене тут у вересні 2019 року:

Опис: Ubuntu 18.04.3

Випуск LTS: 18.04

Кодове ім'я: біонічне


1
Не роби цього. Дивіться мою відповідь вище.
andrzejwp

1
@andrzejwp Де ваша відповідь? Це в коментарі? Якщо він є, він, ймовірно, згорнувся, і я не бачу цього. Я шукав тег користувача на сторінці, але не можу його знайти. Я радий спробувати вашу відповідь - оскільки моя відповідь не зовсім правильна (не зберігається) - але я не можу її знайти. Залиште посилання або створіть нову відповідь, і я спробую.
raddevus

Скористайтеся верхньою голосовою відповіддю. Не використовуйте 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.

Це робиться в три простих кроки.

Спочатку:

Створіть kvm-групу

groupadd -r kvm

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

Друге:

Змінити дозволи на /dev/kvm. Це можна зробити як частину qemu-kvmвстановлення, оскільки одна із залежностей встановлюється 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" ...

Це воно.

Щоб нові правила і налаштування групи набули чинності, найпростіше перезавантажити та увійти знову.

Ви також можете виконати

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 з цим програмним забезпеченням сторонньої сторони, що не було перевірено .

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

Потім після встановлення відкрийте Програмне забезпечення та оновлення та перейдіть на вкладку Додаткові драйвери. Виберіть найбільш сучасні фірмові драйвери, які також були протестовані, та застосуйте зміни. Потрібно перезапустити машину, щоб зміни вплинули.

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


3

Це працювало для мене на Linux (x18) ☑ Сподіваюся, що це буде працювати і для вас

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

Перевірте, чи ваш користувач вже входить до групи 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

Велика перевага: Вам не потрібно виходити з системи та знову входити в систему, щоб ці зміни були ефективними.

Невирішення

  • виклик 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замість судо.
JJJ

так, CD / Dev
Дамінду Лакмаль

1
Це працює. Але робити це потрібно кожного разу, коли комп'ютер перезавантажується.
Lanil Marasinghe

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

0

Я опинився в подібній ситуації з однаковою помилкою дозволів на / dev / kvm, я зробив необхідні установки, але не додав користувача до групи kvm. Все, що мені потрібно було зробити, це

sudo adduser <Replace with username> kvm

і звичайно НЕ забудьте перезапустити ваш екземпляр Ubuntu.


6
Не достатньо виходу / входу?
користувач1053510


-1

Я отримав цю помилку після оновлення мого ubuntu до 18.04.1. Я просто завантажую новий імідж системи для емулятора, або ви можете сказати, що завантажуйте новий емулятор, і він працює для мене.


1
Це нічого не змінить щодо початкової проблеми з /dev/kvm-дозволами.
Герд


-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 Studio) або улюблений текстовий редактор, щоб відкрити такий файл:

$ code /etc/network/interfaces     

Під час першого відкриття цього файлу він може бути порожнім або містити лише пару рядків. Ваш інтерфейс мосту викликається br0, тому додайте наступний рядок, щоб інтерфейс вийшов за замовчуванням:

auto br0    

Під цим рядком додайте наступний рядок для вашого поточного мережевого інтерфейсу (той, хто назвав вас раніше, визначений).

iface enp2s0 inet manual

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

iface br0 inet dhcp
      bridge_ports enp2s0

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

Файл конфігурації мережевих інтерфейсів

Збережіть зміни та закрийте файл.

Додайте свого користувача до груп

Для управління вашою віртуальною машиною (машинами) без кореневих привілеїв користувачеві потрібно буде належати до двох груп користувачів. Виконайте такі команди, щоб додати свого користувача до відповідних груп (замінивши 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 

Отже, тепер вам добре піти, перезавантажте андроїд-студію і почати створювати програми за допомогою емулятора.



-4

Запуск команди нижче в Ubuntu 18.04 працював для мене sudo chown -R / dev / kvm


1
По-перше: ніколи не змінюйте право власності на системні файли --- друге: як /dev/kvmфайл -Rне має ефекту --- по-третє: chownпотрібен new ownerаргумент --- четверте: після перезавантаження потрібно робити це знову і знову.
Герд

-9

Якщо ви відкриєте свою ідею із судо. У вас не буде цієї проблеми.


7
чому на землі мені потрібні дозволи судо для розробки програми для Android?
технокрас

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