我已安装virt-manager
但无法使其运行。
我尝试了一些之前发布的答案,但没有成功。我已经验证了:
- 软件包
libvirt-bin
已安装 - 守护
libvirtd
进程已启动 libvirtd
我是该团体的成员libvirt
URI 为:qemu:///system
这是我尝试运行时遇到的错误virt-manager
:
Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/connection.py", line 1027, in _open_thread
self.vmm = self._try_open()
File "/usr/share/virt-manager/virtManager/connection.py", line 1009, in _try_open
flags)
File "/usr/lib/python2.7/dist-packages/libvirt.py", line 102, in openAuth
if ret is None:raise libvirtError('virConnectOpenAuth() failed')
libvirtError: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied
答案1
您可能必须注销并重新登录。
假设/etc/libvirt/libvirtd.conf
有:
# Set the UNIX domain socket group ownership. This can be used to
# allow a 'trusted' set of users access to management capabilities
# without becoming root.
#
# This is restricted to 'root' by default.
unix_sock_group = "libvirtd"
# Set the UNIX socket permissions for the R/O socket. This is used
# for monitoring VM status only
#
# Default allows any user. If setting group ownership, you may want to
# restrict this too.
unix_sock_ro_perms = "0777"
# Set the UNIX socket permissions for the R/W socket. This is used
# for full management of VMs
#
# Default allows only root. If PolicyKit is enabled on the socket,
# the default will change to allow everyone (eg, 0777)
#
# If not using PolicyKit and setting group ownership for access
# control, then you may want to relax this too.
unix_sock_rw_perms = "0770"
libvirtd
如果您的用户是该组的成员,它应该可以工作。
检查您的用户是否应该在该组中,例如用户vagrant
:
$ cat /etc/group|grep $USER
vagrant:x:1000:
libvirtd:x:116:ubuntu,vagrant
如果您的用户不在该组中,您需要添加它:
$ sudo usermod -a -G libvirtd $USER
如果您的用户已经在组中/etc/group
,请检查输出groups
:
$ groups
vagrant libvirtd
如果您没有看到libvirtd
,则需要注销并重新登录。
答案2
我也遇到了同样的问题。尝试本指南对我来说很管用。将用户添加到组“libvirtd”后,不要忘记重新登录
答案3
在 Ubuntu 22.04 上,你可以轻松地将用户添加到特定组,例如虚拟机和虚拟器使用以下命令:
sudo usermod -aG kvm $USER
sudo usermod -aG libvirt $USER
执行这些命令后,需要重新登录或重新启动系统才能使更改生效。
为了进行健全性检查以确保更改已成功应用,您可以打开终端并输入以下命令:群组。这将显示您的用户所属组的列表,允许您验证您是否已被添加到虚拟机和虚拟器组。
答案4
我遇到这个问题是因为我有两个libvirtd
组。
当我安装 qemu-kvm 时,组libvirtd
不存在,因此使用任意组 ID 121 创建了它:
ls -n /var/run/libvirt/libvirt-sock
srwxrwx--- 1 0 121 0 Oct 1 18:49 /var/run/libvirt/libvirt-sock
后来,我的主机加入了 NIS。我是 的成员libvirtd
,但组 ID 是 1046:
id
uid=177(jmcgeheeiv) ...,1046(libvirtd),...
我不是 201 组的成员,所以我无法写入套接字/var/run/libvirt/libvirt-sock
。
将组所有权更新/var/run/libvirt/libvirt-sock
为正确的组号解决了我的问题:
sudo chgrp 1019 /var/run/libvirt/libvirt-sock
ls -n /var/run/libvirt/libvirt-sock
srwxrwx--- 1 0 1019 0 Oct 1 18:49 /var/run/libvirt/libvirt-sock
这种情况下就不需要退出再登录了。
虽然上述方法解决了眼前的问题,但它违反了基础设施即代码的原则。真正的解决方案是重建主机,首先创建libvirtd
与 NIS 一致的组 ID 为 1046 的组,然后安装 qemu-kvm。