virt-manager 无法连接到 libvirt

Tha*_*Guy 74 kvm virtualization qemu

在此处输入图片说明

我正在运行 Ubuntu 12.04.2 32 位。

如果我开始,错误不会出现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`
Run Code Online (Sandbox Code Playgroud)

的输出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
Run Code Online (Sandbox Code Playgroud)

详细的错误信息

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
Run Code Online (Sandbox Code Playgroud)

Tha*_*Guy 75

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

  • 不是典型的 Linux 解决方案! (47认同)
  • 在这种情况下,通常只需注销/登录就足以使组成员身份更改传播到当前会话中,但就我个人而言,重新登录和重新启动之间没有太大区别(导致非常相似的中断,重新启动只需要大约 7 秒的时间),所以我宁愿使用重启“以防万一”。 (3认同)
  • “你有没有试过把它关掉然后再打开?” (2认同)

小智 57

安装 KVM 后,运行此命令,就不会再出现该错误。

sudo virt-manager
Run Code Online (Sandbox Code Playgroud)

  • 正如@andrew-grasso 所说,您需要注销/登录才能应用组成员身份更改。不推荐使用 `sudo`。 (10认同)
  • 它有效,但需要root才能使用。我想从普通用户那里使用它。我能为它做什么? (2认同)

alk*_*isg 18

重新启动/注销的替代方法是从终端运行以下命令:

newgrp libvirt
virt-manager
Run Code Online (Sandbox Code Playgroud)

newgrp命令允许用户在libvirt不注销的情况下加入组,对于在newgrp. 当然,这仅在 libvirt 安装程序将您放入 libvirt 组时才有效,您可以通过以下方式进行检查:

getent group libvirt
Run Code Online (Sandbox Code Playgroud)


小智 16

对我来说,错误是因为组成员身份更改在没有注销(或重新启动)的情况下不适用。我刚刚安装了 KVM 和 libvirt-bin。安装程序自动将我的用户添加到 libvirtd 组,我已经重新启动了 libvirt-bin 服务,但仍然出现错误。

不要将文件权限更改为 777。不要只是以 root 或 sudo 身份运行所有内容以避免理解错误。

通过应用我的新组成员身份,只需注销并重新登录即可解决问题。

假设您刚刚安装了 libvirt-bin 并且已经确认您的当前用户是 libvirtd 组的成员,如错误消息所示,您将需要注销并重新登录才能应用新的组成员身份。

我希望这可以帮助别人。


小智 6

登录用户必须添加到libvirt用户组

sudo usermod -a -G libvirt $USER
Run Code Online (Sandbox Code Playgroud)


Val*_*tor 5

我在 Ubuntu 14.02 机器上同时管理 Qemu 和 Virtualbox,安装 Virtualbox 后 libvirt-bin 无法自动启动。所以检查 libvirt-bin 是否正在运行:

ps faux | grep libvirt-bin

如果在 ps 输出中没有看到它 - 手动启动,然后运行 ​​virt-manager:

sudo service libvirt-bin start


小智 5

在 Ubuntu 16.04.3 LTS 上

systemctl start virtlogd.socket
Run Code Online (Sandbox Code Playgroud)

是唯一的答案。套接字有自己的守护进程。这是不寻常的。