当我尝试在模拟器上运行我的Android应用程序时,我得到这个错误:

/dev/kvm权限被拒绝。

我检查了权限,并将我当前登录的用户添加到kvm组。怎么了?


当前回答

我正在使用linux debian,我正面对同样的方式。在我的AVD显示我的消息“/dev/kvm权限被拒绝”,我试图找到解决方案,然后我做什么来解决它,在终端类型:

sudo chmod -R 777 /dev/kvm

它将授予文件夹/dev/kvm的访问权限,然后在AVD上再次检查,错误消息将消失,希望它会有所帮助。

其他回答

以下是我所做的:

user@user:~$ whoami

安东尼奥

sudo apt install qemu-kvm

sudo adduser antonio kvm

sudo chown antonio /dev/kvm

最后但同样重要的

Android工作室 select File ->重启IDE

要应用更改

然后创建模拟器

虽然KVM是内置在Linux内核本身的模块,但这并不意味着默认情况下Ubuntu/Linux安装中包含了所有必要的包。你将需要一些来开始,它们可以在终端中使用以下命令安装:

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

配置网桥

为了让虚拟机访问网络接口并分配它们自己的IP地址,我们需要在系统上配置桥接网络。

首先,运行以下Linux命令,以找出分配给您的网络接口的名称。知道这一点之后,我们就可以进行额外的配置。

$ ip a     

在我的示例中,网络接口称为enp2s0。你的名字可能会非常相似。

为了告诉Ubuntu我们想要桥接连接,我们需要编辑网络接口配置文件。这样做完全不会对你们的联系产生负面影响。它只允许该连接与vm共享。

使用代码(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

完成后,您应该重新启动系统,以确保对用户和网络配置所做的所有更改都有机会生效。

试试这个,对我很管用:

Sudo apt安装qemu-kvm sudo chown -R <username>:<username> /dev/kvm

在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(juser),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

最大的优势:您不需要注销并再次登录才能使此更改生效。

没有办法的办法

calling chmod and chown directly on /dev/kvm - 1) these changes aren't persistent over reboots and 2) since /dev/kvm permissions are controlled by the udev daemon, it can 'fix' its permissions at any time, e.g. after each emulator run adding executable permissions to /dev/kvm - your emulator just requires read and write permissions changing permissions recursively on /dev/kvm - I don't know what's up with that - looks like cargo cult installing extra packages like qemu - you already have your emulator installed - you just need to get access to the /dev/kvm device

终端类型:

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