当我尝试在模拟器上运行我的Android应用程序时,我得到这个错误:
/dev/kvm权限被拒绝。
我检查了权限,并将我当前登录的用户添加到kvm组。怎么了?
当我尝试在模拟器上运行我的Android应用程序时,我得到这个错误:
/dev/kvm权限被拒绝。
我检查了权限,并将我当前登录的用户添加到kvm组。怎么了?
当前回答
正如评论中提到的,从Ubuntu 18.04和Linux Mint Tara开始,你需要首先安装qemu-kvm。
检查/dev/kvm使用的所有权
ls -al /dev/kvm
用户为root,组为kvm。要查看哪些用户属于kvm组,请使用
grep kvm /etc/group
这返回
kvm:x:some_number:
在我的系统上:由于没有向右的final:,所以在KVM组中没有用户。
要将用户添加到kvm组,可以使用
sudo adduser $USER kvm
这将用户添加到组,并再次检查grep KVM /etc/group.
正如@marcolz提到的,命令newgrp kvm应该为您实时更改组成员。如果这不起作用,@Knossos提到您可能需要注销并重新登录(或重新启动),以便权限生效。或者像@nmirceac提到的那样,在同一个shell中通过su - $USER重新登录。
其他回答
如果你用sudo打开你的ide。你不会遇到这个问题。
如果你只想运行Android Studio模拟器,完全没有必要安装qemu-kvm(及其所有依赖项)。
您需要做的唯一一件事就是赋予您的用户(即您登录的用户)访问/dev/kvm-设备的权限。
这需要三个简单的步骤。
第一:
创建kvm-group
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-group很重要。否则,您将覆盖组设置为您的用户只属于“kvm”…
就是这样。
为了使新的udev规则和组设置生效,重新启动并再次登录是最容易的。
你也可以执行
Udevadm控件—reload-rules && Udevadm触发器
用于重新加载规则,但您仍然必须注销,并再次登录关于新组。
以下是我所做的:
user@user:~$ whoami
安东尼奥
sudo apt install qemu-kvm
sudo adduser antonio kvm
sudo chown antonio /dev/kvm
最后但同样重要的
Android工作室 select File ->重启IDE
要应用更改
然后创建模拟器
打开终端,以管理员身份登录
sudo su
进入dev文件夹
cd /dev/
切换kvm模式
chmod 777 -R kvm
虽然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
完成后,您应该重新启动系统,以确保对用户和网络配置所做的所有更改都有机会生效。