virt-manager无法连接到libvirt。

enter image description here

我正在运行的是32位Ubuntu 12.04.2。
如果我启动" gksudo virt-manager ",错误就不会出现。
安装了libvirt-bin。
我不知道如何检查守护进程。
我是libvirtd的成员。
输出的" ps ax | grep libvirt ":
9225 ? Sl 0:04 /usr/sbin/libvirtd -d
9302 ? S 0:00 /usr/sbin/dnsmasq -u libvirt-dnsmasq --strict-order --bind-interfaces --pid-file=/var/run/libvirt/network/default.pid --conf-file= --except-interface lo --listen-address 192.168.122.1 --dhcp-range 192.168.122.2,192.168.122.254 --dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases --dhcp-lease-max=253 --dhcp-no-override`

ls -l /var/run/libvirt/libvirt-sock的输出:

srwxrwx--- 1 root libvirtd 0 Set 13 15:04 /var/run/libvirt/libvirt-sock

getent group libvirtd的输出:

 libvirtd:x:130:OTHERUSER,MYUSER

详细错误信息
Unable to connect to libvirt.   
Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied

Verify that:
 - The 'libvirt-bin' package is installed
 - The 'libvirtd' daemon has been started
 - You are member of the 'libvirtd' group

Libvirt URI is: qemu:///system

Traceback (most recent call last):
  File "/usr/share/virt-manager/virtManager/connection.py", line 1185, in _open_thread
    self.vmm = self._try_open()
  File "/usr/share/virt-manager/virtManager/connection.py", line 1167, 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

如果我启动gksudo virt-manager,错误就不会显示出来。 - That Brazilian Guy
你的/etc/libvirt/libvirtd.conf文件中有哪些内容? - Bruno Pereira
1虽然不是完美的地方,但如果你像我一样使用Arch并安装了qemuvirt-manager,尝试运行sudo systemctl start libvirtd,如果你希望它在启动时自动启动,还可以选择运行sudo systemctl enable libvirtd - ave
2将自己添加到libvirt组(并重新启动):sudo usermod -a -G libvirt <loginname> - Milan Kerslager
19个回答

重新启动安装了virt-manager的系统解决了这个问题。

64不是一个典型的Linux解决方案! - Sadegh
1在16.04版本上,如果你想知道的话,它是"libvirt-bin.service"而不是"libvirtd.service"。所以守护进程是存在的。 - anon
4通常情况下,只需注销/登录即可使组成员更改在当前会话中生效。但对我个人而言,重新登录和重启之间没有太大区别(造成的干扰非常相似,重启只比重新登录多花费约7秒),所以我宁愿选择重启“以防万一”。 - Ped7g
3你试过关掉然后再打开吗? - tisaconundrum
1在Ubuntu 20.04上遇到了这个问题(套接字问题仍然存在)。@Flatron的这个答案描述了无需重启的解决方案。 - dess

安装KVM后,运行此命令,然后该错误将不再发生。
sudo virt-manager

哇!这是什么?这是怎么回事? - Kishor Pawar
这有效是因为sudo。在另一个答案中阅读解释https://ask.fedoraproject.org/en/question/45805/how-to-use-virt-manager-as-a-non-root-user/?answer=52968#post-id-52968 - Kishor Pawar
1应该是被接受的答案。 - Magno C
2它能工作,但需要使用root权限。我想以普通用户的身份使用它。我该怎么做? - Puneet Dixit
对我没用。结果是一个损坏的配置文件...可能是因为频繁使用虚拟机和virt-manager...或者在关闭时强制关闭虚拟机而后台正在保存机器状态时没有警告。journalctl -xe _SYSTEMD_UNIT=libvirtd.service - Ray Foss
12正如 @andrew-grasso 所述,您需要注销/登录以应用组成员身份的更改。不推荐使用 sudo - Alex Willison
在没有使用sudo的情况下运行会导致权限错误。在我的系统上,通过sudo virt-manager命令解决了这个问题。 - Fahad Naeem
我需要先安装libvirt-bin,然后才能运行sudo virt-manager - TetraDev
1现在问 Fedora 的链接已经失效了 :( - Denis Trofimov

一个替代重新启动/注销的方法是从终端运行以下命令:
newgrp libvirt
virt-manager
newgrp命令允许用户在不注销的情况下加入libvirt组,适用于在newgrp之后在同一shell中启动的进程。当然,这只有在libvirt安装程序将您放入libvirt组中时才有效,您可以通过以下方式进行检查:
getent group libvirt

1这个有效。为什么这个没有在libvirt/virt-manager的后安装脚本中运行,我无法理解。 - Radu Ursache
这是最好的答案。在下一次重启之前,如果你在群组中,它将自动工作。 - DiDiev

对我来说,错误是由于组成员更改没有应用而导致的(需要注销-登录或重新启动)。我刚刚安装了KVM和libvirt-bin。安装程序自动将我的用户添加到libvirtd组中,我已经重新启动了libvirt-bin服务,但仍然出现错误。 不要将文件权限更改为777。不要仅以root或sudo运行所有内容以避免理解问题所在。 简单地注销并重新登录即可通过应用新的组成员来解决问题。
假设您刚刚安装了libvirt-bin,并已确认您当前的用户是作为错误消息建议的libvirtd组的成员,则需要注销并重新登录以应用新的组成员。
希望这能帮助某些人。

在Ubuntu 16.04.3 LTS上
systemctl start virtlogd.socket

只有一个答案。插座有自己的守护进程。 这很不寻常。


我在我的Ubuntu 14.02机器上同时管理Qemu和Virtualbox,在安装Virtualbox后,libvirt-bin无法自动启动。所以请检查libvirt-bin是否正在运行: ps faux | grep libvirt-bin
如果在ps输出中看不到它-请手动启动,然后运行virt-manager:
sudo service libvirt-bin start

已登录的用户必须添加到libvirt用户组中。
sudo usermod -a -G libvirt $USER

1非常感谢。 - Dan Ortega

对我来说,问题是当我使用service libvirt-bin status命令时,显示一切正常运行,但我无法连接,例如:
    ● libvirt-bin.service - Virtualization daemon
       Loaded: loaded (/lib/systemd/system/libvirt-bin.service; enabled; vendor preset: enabled)
       Active: active (running) since Do 2016-09-22 13:22:16 CEST; 6min ago
[...]

/var/run/libvirt/目录下应该有这两个文件:
srwxrwxrwx  1 root libvirtd    0 Sep 22 13:22 libvirt-sock=
srwxrwxrwx  1 root libvirtd    0 Sep 22 13:22 libvirt-sock-ro=

如果套接字未显示,请使用service libvirt-bin stop; service libvirt-bin start来完全重新启动进程。使用service libvirt-bin restart是不够的,无法重新创建套接字。

libvirt-bin服务可以安全停止,并不会关闭虚拟机客户端


安装完所有op所述的软件包后,您可以注销然后重新登录。任何将您添加到用户组中的操作都需要注销并重新登录以加入新的组。这只是一个小不便,比重新启动要少得多。
尽管此项被标记为不完整,但这是将用户添加到组的一般规则。需要重新登录,这是我在这里没有看到的遗漏部分。

1欢迎来到Ask Ubuntu!以目前的形式来看,你的回答还有改进的空间。你可以参考一下如何撰写好的回答问题与回答的风格指南。你可以明确需要安装哪些软件包。 - J. Starnes
在Ubuntu 19.10上对我有效。 - msb

可以在`libvirt`组中的用户不使用`sudo`命令运行`virt-manager`和`virsh`。
$ sudo gpasswd libvirt -a <username> 
$ cat <<EOF | tee -a ~/.profile
export VIRSH_DEFAULT_CONNECT_URI=qemu:///system 
EOF 
$ sudo reboot

好的回答,只是你能解释一下你的命令行是如何工作的吗?请编辑你的回答。 - damadam
@damadam 首先,他将<username>添加到libvirt组中,以便该用户可以在不需要提升权限的情况下运行virt-manager和virsh。然后,他定义了连接到qemu的默认路径,并将其保存在一个文件中(在这种情况下是.profile),该文件将在启动时被加载。然后,他重新启动系统,以使组的更改生效。 - joshpetit