Android Studio: autorisation d'appareil / dev / kvm refusée

557

Lorsque j'essaie d'exécuter mon application Android sur un émulateur, j'obtiens cette erreur:

Autorisation / dev / kvm refusée.

J'ai vérifié les autorisations et ajouté l'utilisateur avec lequel je suis actuellement connecté au groupe kvm. Qu'est-ce qui ne va pas?

florian.R
la source

Réponses:

870

Comme mentionné dans les commentaires, en commençant par Ubuntu 18.04 et Linux Mint Tara, vous devez d'abord sudo apt install qemu-kvm.

Pour vérifier la propriété d' /dev/kvmutilisation

ls -al /dev/kvm

L'utilisateur était rootle groupe kvm. Pour vérifier quels utilisateurs font partie du kvmgroupe, utilisez

grep kvm /etc/group

Cela est revenu

kvm:x:some_number:

sur mon système: comme il n'y a rien à droite de la finale :, il n'y a pas d'utilisateurs dans le kvmgroupe.

Pour ajouter votre utilisateur au groupe kvm , vous pouvez utiliser

sudo adduser $USER kvm

qui ajoute l'utilisateur au groupe, et vérifiez à nouveau avec grep kvm /etc/group.

Comme mentionné par @marcolz, la commande newgrp kvmdevrait changer l'appartenance au groupe en direct pour vous. Si cela ne fonctionnait pas, @Knossos a mentionné que vous souhaitiez peut-être vous déconnecter et vous reconnecter (ou redémarrer) pour que les autorisations prennent effet. Ou faites comme @nmirceac mentionné et reconnectez-vous dans le même shell via su - $USER.

serv-inc
la source
124
Après l'installation qemu-kvmet l'ajout de mon utilisateur au groupe, kvmcela n'a pas fonctionné. Mais il l'a fait après le redémarrage de l' ordinateur (Ubuntu 18.04).
sdlins
7
Et si l'utilisateur l'était rootet que le groupe l'était root. Faut-il changer de groupe?
Michael Fulton
4
Je devais à chaque fois que j'allumais mon pc sudo chown -R username: username / dev / kvm Ces étapes m'ont sauvé le mal de tête à chaque fois. Thansk @ serv-inc Cela devrait être accepté comme réponse correcte.
Sajid Zeb
3
Vous pouvez utiliser cette commande pour ajouter automatiquement l'utilisateur actuel à kvmsudo adduser $USER kvm
Munish Chandel
17
J'avais aussi besoin d'accorder la propriété de kvm à l'utilisateur: sudo chown $USER /dev/kvm
Iván Rodríguez Torres
534

Voilà comment je l'ai fait fonctionner dans Ubuntu 18.04

sudo apt install qemu-kvm

Ajoutez votre utilisateur au groupe kvm en utilisant:

sudo adduser <Replace with username> kvm

Si l' autorisation est toujours refusée :

sudo chown <Replace with username> /dev/kvm

Essayez-le.

Jerin A Mathews
la source
2
sauve ma journée avec ta dernière réponse.
Sathish Sundharam
14
l'étape 2 pourrait nécessiter un redémarrage
Jakob Eriksson
10
vous ne devez pas modifier la propriété du /dev/kvm/dossier. à la place, vous devez ajouter l'utilisateur au kvmgroupe comme dans cette réponse: stackoverflow.com/a/45749003/1213934
déconnexion le
3
@JakobEriksson Il en faut un pour se reconnecter. Les redémarrages sont réservés à Windows (et aux mises à jour systemd) ;-)
Bayou
3
Oui, tout comme @logoff l'a suggéré, vous ne devriez pas changer la propriété de / dev / kvm, car cela casserait l'ACL par défaut de votre système Linux, ce qui n'est pas une bonne pratique de sécurité. Suivez plutôt ces instructions: stackoverflow.com/a/45749003/7206497
eVagabond
34

Essayez ceci, cela a fonctionné pour moi:

  1. sudo apt install qemu-kvm

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

Milan
la source
1
Vous devrez peut-être vous reconnecter pour que cela prenne effet.
Vadim Peretokin
6
Ceci est discutable, car il traite un système multi-utilisateur comme un système mono-utilisateur. Aucun autre utilisateur ne pourra utiliser KVM en suivant cette approche. est-ce une bonne idée? J'en doute ...
Arkascha
1
Cette solution est tout à fait erronée car elle modifie les droits par défaut sur / dev / kvm. Ce n'est pas seulement qu'il ne persistera pas entre les redémarrages / mises à jour du système. Il modifie également avec force les paramètres système. Reste loin.
andrzejwp
Ne faites pas le chown- ajoutez votre nom d'utilisateur aux groupes appropriés - kvm ou libvirt. Consultez la documentation de [ help.ubuntu.com/community/KVM/Installation diplomatique ( Ubuntu) .
Daisuke Aramaki
Pourquoi affichez-vous récursivement un fichier de périphérique? Aussi, quel est le suffixe? Cela donne sûrement une erreur.
maxschlepzig
29

Avez-vous également essayé de suivre, cela devrait fonctionner:

sudo chown <username> /dev/kvm
sudo chmod o+x /dev/kvm
nobjta_9x_tq
la source
1
chmod o+xest complètement inutile. La première commande le fait fonctionner - mais voyez mes autres commentaires tout en bas pourquoi c'est une mauvaise idée.
Gerd
1
Cela fonctionne mais ne persiste pas un redémarrage. Je suis cependant sur POP OS!
Arka Prava Basu
1
Cette solution est incorrecte car elle modifie les droits par défaut de /dev/kvm. Ce n'est pas seulement qu'il ne persistera pas entre les redémarrages / mises à jour du système. Il modifie également avec force les paramètres du système. Reste loin.
andrzejwp
Ce n'est pas persistant lors des redémarrages. Le démon udev peut réajuster les autorisations pendant son exécution et, pour d'autres, le bit d'autorisation exécutable est tout simplement superflu.
maxschlepzig
28

C'est parce que /dev/kvmn'est pas accessible. Pour faire est accessible à partir du studio Android, exécutez la commande ci-dessous

sudo chmod 777 -R /dev/kvm

Il vous demandera votre mot de passe. Après cela, redémarrez Android Studio.

KVMest requis pour l'émulateur de rhum. Si vous ne l'avez pas encore installé, installez-le

sudo apt install qemu-kvm
Shalauddin Ahamad Shuza
la source
Cette réponse a fait l'affaire dans mon cas après avoir suivi la réponse la plus votée! Merci!
Crono
1
Ne faites pas cela. Voir ma réponse ci-dessus.
andrzejwp
@andrzejwp: Quelle réponse? Je ne vois aucune réponse de votre part. Étant donné à quel point vous êtes catégorique dans votre réponse, pouvez-vous y lier ?
Dan Dascalescu
Pourquoi -Rmodifiez -vous récursivement ( ) les autorisations sur un seul fichier de périphérique? De plus, les autorisations d'exécution sont superflues. Enfin, udev peut ajuster les autorisations après chaque démarrage de l'émulateur.
maxschlepzig
25
sudo chown $USER /dev/kvm

L'exécution d'une seule commande a fonctionné pour moi ici en septembre 2019:

Description: Ubuntu 18.04.3

Sortie LTS: 18.04

Nom de code: bionic

raddevus
la source
1
Ne faites pas cela. Voir ma réponse ci-dessus.
andrzejwp
1
@andrzejwp Où est votre réponse? Est-ce dans un commentaire? Si c'est le cas, il est probablement effondré et je ne le vois pas. J'ai recherché la balise utilisateur sur la page, mais je ne la trouve pas. Je suis heureux d'essayer votre réponse - car ma réponse n'est pas tout à fait correcte (ne persiste pas) - mais je ne la trouve pas. Laissez un lien ou créez une nouvelle réponse et je vais l'essayer.
raddevus
Utilisez la réponse la plus votée. N'utilisez pas chmod / chown.
andrzejwp
@andrzejwp: veuillez lier à vos réponses, au lieu de dire "ci-dessus". Et si votre réponse se retrouve en dessous de celle sur laquelle vous commentez?
Dan Dascalescu
Ce n'est pas persistant pendant les redémarrages et le démon udev peut réajuster la propriété de /dev/kvmpendant son exécution.
maxschlepzig
21

J'utilise ubuntu 18.04. J'étais confronté au même problème. J'exécute cette commande dans le terminal et le problème est résolu.

sudo chown $USER /dev/kvm

la commande ci-dessus est destinée à tous les utilisateurs présents dans votre système.

Si vous souhaitez n'accorder l'accès qu'à un utilisateur spécifique, exécutez cette commande

sudo chown UserNameHere /dev/kvm
ujjal das
la source
1
Non, ce n'est pas quelque chose que vous devriez faire. Voir ma réponse ci-dessus.
andrzejwp
En quoi cette réponse est-elle différente de la réponse de @raddevus qu'il avait publiée un mois plus tôt?
maxschlepzig
20

Ceci est une brève version de la réponse de Gerd

ouvrez le terminal et exécutez les commandes suivantes

sudo groupadd -r kvm

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

Ajoutez la ligne suivante au fichier ouvert et enregistrez-la

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

Enfin exécutez:

sudo usermod -a -G kvm <your_username>

Redémarrez votre PC et c'est fait!

Nasir Jafarzadeh
la source
C'est un mauvais conseil. Ne modifiez jamais directement la configuration udev sous /lib/udev/rules.d. Udev dispose d'un mécanisme de superposition dans lequel la configuration placée /etc/udev/rules.da priorité sur celle disponible sous /lib/udev/rules.d.
maxschlepzig
Je ne suis pas un utilisateur Linux professionnel, c'est juste une solution qui a fonctionné pour moi et je décide de la rendre succincte et facile à lire pour d'autres comme moi. merci pour votre clarification, Max.
Nasir Jafarzadeh
15

J'ai contré le même problème et pour résoudre ce problème, tapez simplement les commandes suivantes dans le terminal pour les clients Linux

   sudo apt-get install qemu-kvm

    // type your password

   sudo chmod 777 -R /dev/kvm

et après cela, essayez d'exécuter le simulateur, cela fonctionnera


la source
1
Dieu non. Voir mes commentaires ci-dessus.
andrzejwp
Installation superflue de qemu-kvm, utilisation superflue de l'option récursive et définit de manière superflue l'autorisation exécutive. Également non persistant au cours des redémarrages et même pendant l'exécution d'udev.
maxschlepzig
13

Il n'est absolument pas nécessaire d'installer qemu-kvm(et toutes ses dépendances) si vous souhaitez uniquement exécuter l'émulateur Android Studio.

La seule chose que vous avez à faire est de donner à votre utilisateur (c'est-à-dire celui avec lequel vous êtes connecté) le droit d'accéder au /dev/kvmpériphérique.

Cela se fait en trois étapes simples.

Première:

Créer le kvmgroupe

groupadd -r kvm

L'option -rcrée un groupe système, c'est-à-dire avec un GID <= 999 (voir /etc/login.defs=> SYS_GID_MAX)

Seconde:

Modifiez les autorisations sur /dev/kvm. Cela pourrait être fait dans le cadre de l' qemu-kvminstallation, car l'une des dépendances est en cours d'installation qemu-system-common(sur les systèmes Ubuntu actuels, le nom du package peut varier), qui à son tour installe le fichier /lib/udev/rules.d/60-qemu-system-common.rulescontenant les éléments suivants:

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

Donc, si vous venez de créer un fichier /etc/udev/rules.d/60-qemu-permissions.rulescontenant la ligne ci-dessus, vous avez terminé avec la première étape.

Troisième:

Ajoutez votre nom d'utilisateur au groupe en exécutant

usermod -a -G kvm <your_username>- le -aest important pour ajouter votre utilisateur au groupe kvm. Sans cela, vous écraserez les paramètres de groupe pour que votre utilisateur n'appartienne qu'à "kvm" ...

C'est ça.

Pour que la nouvelle règle udev et le nouveau paramètre de groupe prennent effet, il est plus facile de redémarrer et de se reconnecter.

Vous pouvez également exécuter

udevadm control --reload-rules && udevadm trigger

pour recharger les règles, mais vous devez toujours vous déconnecter et vous reconnecter en ce qui concerne le nouveau groupe.

Gerd
la source
10

J'utilise Linux Debian, et je fais face à la même manière. Dans mon AVD me montrant un message «/ dev / kvm permission non» et j'ai essayé de trouver la solution, alors ce que je fais pour la résoudre est, dans le type de terminal ceci:

sudo chmod -R 777 /dev/kvm

il accordera un accès au dossier / dev / kvm, puis vérifiez à nouveau sur votre AVD , le message d'erreur disparaîtra, espérons qu'il vous aidera.

Cevin Ways
la source
1
C'est complètement faux. Ne fais jamais ça. Voir mes commentaires ci-dessus.
andrzejwp
1
@andrzejwp: commentaires ci-dessus, OERE?!
Dan Dascalescu
L'option récursive est superflue, les autorisations d'exécution sont superflues. Modification non persistante lors des redémarrages. Changement non stable pendant l'exécution d'udev.
maxschlepzig
9
sudo setfacl -m u:$USER:rwx /dev/kvm

A travaillé pour moi.

Ritwik
la source
2
Bien mieux que tous les chownexemples ici, mais j'omettre xles autorisations.
Gerd
Le changement n'est pas persistant au cours des redémarrages.
maxschlepzig
5

Juste une légère amélioration sur la réponse de Jerrin sur la correction de cette erreur avec Ubuntu 18.04 en utilisant la $USERvariable disponible dans le terminal bash. Vous pouvez donc utiliser les commandes suivantes deux commandes:

sudo apt install qemu-kvm

Ajouter l'utilisateur actuel au groupe kvm

sudo adduser $USER kvm

De plus, si vous rencontrez toujours des problèmes, un autre problème pour moi était la façon dont j'ai installé Ubuntu. J'ai fait l'erreur de cocher la case lors de l'installation pour installer un logiciel tiers qui ne fonctionnait pas bien avec ma carte graphique nvidia pour le développement. J'ai donc réinstallé Ubuntu avec ce logiciel tiers décoché .

entrez la description de l'image ici

Ensuite, après l'installation, ouvrez le logiciel et les mises à jour et accédez à l'onglet Pilotes supplémentaires. Sélectionnez les pilotes propriétaires les plus récents qui ont également été testés et appliquez les modifications. Doit redémarrer la machine pour que les modifications prennent effet.

entrez la description de l'image ici

Andrew Steinmetz
la source
3

Cela a fonctionné pour moi sur Linux (x18) ☑ J'espère que cela fonctionnera pour vous aussi

sudo chown hp /dev/kvm
Varun Pradhan
la source
2
Non, ce n'est pas le cas, et ne le faites pas.
andrzejwp
Le changement n'est pas persistant lors des redémarrages.
maxschlepzig
3

Sous Ubuntu, les autorisations de /dev/kvmressemblent généralement à ceci:

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

L'utilisateur qui exécute l'émulateur Android (c'est-à-dire votre utilisateur) doit avoir accès à cet appareil.

Ainsi, il existe essentiellement 2 façons d'accéder:

  • Assurez-vous que votre utilisateur fait partie du groupe kvm (nécessite une reconnexion de votre utilisateur après le changement)
  • Élargissez les autorisations de cet appareil pour que votre utilisateur y ait accès (nécessite une modification de la configuration du démon udev)

Ajouter un utilisateur au groupe KVM

Vérifiez si votre utilisateur fait déjà partie du groupe kvm, par exemple:

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

Si ce n'est pas le cas, ajoutez-le avec par exemple:

$ sudo usermod --append --groups kvm juser

Après ce changement, vous devez vous déconnecter et vous reconnecter pour rendre le changement de groupe effectif (vérifiez à nouveau avec id ).

Élargir les autorisations

Alternativement, vous pouvez simplement élargir les autorisations du /dev/kvm appareil.

Exemple:

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, c'est la valeur par défaut sur d'autres distributions telles que Fedora et CentOS.

Vérifiez l'efficacité des commandes ci-dessus avec une autre ls. Vous devriez également voir une sortie similaire:

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

Gros avantage: vous n'avez pas besoin de vous déconnecter et de vous reconnecter pour que ce changement soit effectif.

Non-solutions

  • appelant chmodet chowndirectement sur /dev/kvm- 1) ces changements ne sont pas persistants au cours des redémarrages et 2) puisque les /dev/kvmautorisations sont contrôlées par le démon udev, il peut «corriger» ses autorisations à tout moment, par exemple après chaque exécution de l'émulateur
  • ajout d'autorisations exécutables à /dev/kvm - votre émulateur ne nécessite que des autorisations de lecture et d'écriture
  • modification récursive des autorisations sur /dev/kvm - je ne sais pas ce qui se passe - ressemble à un culte du fret
  • installer des packages supplémentaires comme qemu - vous avez déjà installé votre émulateur - il vous suffit d'accéder à l' /dev/kvmappareil
maxschlepzig
la source
1

Ouvrez Terminal et connectez-vous en tant qu'administrateur

sudo su

Accédez au dossier de développement

cd /dev/

Changer le mode kvm

chmod 777 -R kvm
Damindu Lakmal
la source
Je pense que tu veux dire cd /devau lieu de sudo.
JJJ
oui, cd / dev.
Damindu Lakmal
1
Cela marche. Mais je dois le faire à chaque redémarrage de l'ordinateur.
Lanil Marasinghe
Pourquoi appelez-vous chmodavec -R? La modification récursive des autorisations sur un seul fichier de périphérique /dev/kvmne semble pas trop utile. De plus, les autorisations d'exécution sont superflues sur cet appareil. Enfin, udev peut réajuster les /dev/kvmautorisations après chaque exécution. Ainsi, cette méthode n'est pas très efficace.
maxschlepzig
0

J'étais dans une situation similaire avec la même erreur d'autorisations sur / dev / kvm J'avais fait les installations nécessaires mais pas ajouté l'utilisateur au groupe kvm Tout ce que j'avais à faire était

sudo adduser <Replace with username> kvm

et bien sûr N'OUBLIEZ PAS de redémarrer votre instance Ubuntu.

Vineet Jain
la source
6
La déconnexion / connexion n'est-elle pas suffisante?
user1053510
0

Ce qui a finalement été corrigé pour moi sur Ubuntu 18.04 était:

sudo apt install qemu-kvm
sudo adduser $USER kvm
sudo chown $USER /dev/kvm
James Hooper
la source
Comment est votre réponse différente de Mehedi de Abdullah réponse ?
maxschlepzig
-1

J'ai eu cette erreur après avoir mis à jour mon Ubuntu vers 18.04.1. Je viens de télécharger une nouvelle image système pour l'émulateur ou vous pouvez dire que télécharger un nouvel émulateur et cela fonctionne pour moi.

Prashant Sharma
la source
1
Cela ne changera rien concernant le problème d'origine avec /dev/kvm-permissions.
Gerd
-1

Tapez dans le terminal:

sudo apt install qemu-kvm -y
sudo chown $USER /dev/kvm
John Deer
la source
-1

Bien que KVM soit un module intégré au noyau Linux lui-même, cela ne signifie pas que tous les packages nécessaires sont inclus par défaut dans votre installation Ubuntu / Linux. Vous en aurez besoin de quelques-uns pour commencer, et ils peuvent être installés avec cette commande dans le terminal:

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

Configurer le pont réseau

Pour que vos machines virtuelles accèdent à votre interface réseau et se voient attribuer leurs propres adresses IP, nous devons configurer la mise en réseau pontée sur notre système.

Tout d'abord, exécutez la commande Linux suivante afin de découvrir le nom attribué à votre interface réseau. Le savoir nous permettra de faire une configuration supplémentaire plus tard.

$ ip a     

Déterminer le nom de l'interface réseau

Dans mon cas, l'interface réseau est appelée enp2s0. Le vôtre portera probablement le même nom.

Afin de dire à Ubuntu que nous voulons que notre connexion soit pontée, nous devrons éditer le fichier de configuration des interfaces réseau. Faire cela n'aura aucun impact négatif sur votre connexion. Il ne vous reste plus qu'à partager cette connexion avec les machines virtuelles.

Utilisez code(Visual Studio Code) ou votre éditeur de texte préféré pour ouvrir le fichier suivant:

$ code /etc/network/interfaces     

Lorsque vous ouvrez ce fichier pour la première fois, il peut être vide ou contenir seulement quelques lignes. Votre interface de pont est appelée br0, alors ajoutez la ligne suivante pour que l'interface apparaisse par défaut:

auto br0    

En dessous de cette ligne, ajoutez la ligne suivante pour votre interface réseau actuelle (celle qui vous a nommée a déterminé plus tôt).

iface enp2s0 inet manual

Ensuite, vous pouvez ajouter les informations sur le pont. Ces lignes indiquent à Ubuntu que votre pont utilisera DHCP pour l'attribution automatique d'adresses IP et que votre pont gérera votre interface actuelle.

iface br0 inet dhcp
      bridge_ports enp2s0

Voici à quoi devrait ressembler votre fichier une fois que toutes les modifications ont été appliquées (si vous avez également quelques lignes qui étaient déjà là, c'est bien de les avoir aussi):

Fichier de configuration des interfaces réseau

Enregistrez vos modifications et quittez le fichier.

Ajoutez votre utilisateur aux groupes

Afin de gérer votre ou vos machines virtuelles sans privilèges root, votre utilisateur devra appartenir à deux groupes d'utilisateurs. Exécutez les commandes suivantes pour ajouter votre utilisateur aux groupes appropriés (en remplaçant user1 par le nom de votre utilisateur):

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

Lorsque vous avez terminé, vous devez redémarrer votre système pour vous assurer que toutes les modifications apportées à votre configuration utilisateur et réseau ont une chance de prendre effet.

snishalaka
la source
Downvote: Ce fil ne concerne pas le fonctionnement de KVM. Il s'agit simplement d'omettre un message "permission refusée" lors du démarrage de l'émulateur fourni avec Andoid Studio. Pas besoin libvirtet pas besoin de configurer les interfaces ...
Gerd
Bien que je sois très nouveau dans le développement Android, je parie qu'il effectue la plupart de ces étapes pour vous. Cependant, il vous demande d' installer plusieurs des mêmes packages . (S'attendre à ce que chaque développeur Android configure correctement un pont est un peu dans le champ gauche, même limité aux développeurs Android Linux .)
jpaugh
-1

Afin de créer un périphérique virtuel sous Linux - je dois suivre cette commande trois et cela m'aide à éviter les problèmes de construction de périphériques avd - le processus est -

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

Donc, maintenant vous êtes prêt à démarrer, redémarrez Android Studio et commencez à créer une application avec un émulateur.

Mehedi Abdullah
la source
-4

L'exécution de la commande ci-dessous dans Ubuntu 18.04 a fonctionné pour moi sudo chown -R / dev / kvm

mtoto_dev
la source
1
Premièrement: ne changez jamais la propriété des fichiers système --- Deuxièmement: /dev/kvmUn fichier -Rn'a aucun effet --- Troisièmement: chownnécessite un new ownerargument --- Quatrièmement: Après le redémarrage, vous devez le faire encore et encore.
Gerd
-9

Si vous ouvrez votre idée avec sudo. Vous n'allez pas avoir ce problème.

Merve Sims
la source
7
pourquoi diable ai-je besoin des autorisations sudo pour développer une application android?
techcraver
1
Soulignant encore: il ne faut jamais faire cela. Regardez également dans gksu et gksudo pour exécuter des applications GUI en tant que root.
Manish Raj