Skip to content

virt-manager无法连接到libvirt

问题描述

错误提示如下:

Unable to connect to libvirt qemu:///system.

请验证 'libvirtd' 守护进程是否正在运行。

Libvirt URI is: qemu:///system

Traceback (most recent call last):
  File "/usr/share/virt-manager/virtManager/connection.py", line 922, in _do_open
    self._backend.open(cb, data)
  File "/usr/share/virt-manager/virtinst/connection.py", line 153, in open
    conn = libvirt.openAuth(self._open_uri,
  File "/usr/lib/python3/dist-packages/libvirt.py", line 148, in openAuth
    raise libvirtError('virConnectOpenAuth() failed')
libvirt.libvirtError: Failed to connect socket to '/var/run/libvirt/libvirt-sock': 权限不够 

解决办法

  1. 编辑/lib/system/system/libvirtd.socket文件,将SocketMode修改为0666

    $ cat /lib/systemd/system/libvirtd.socket 
    [Unit]
    Description=Libvirt local socket
    Before=libvirtd.service
    
    [Socket]
    # The directory must match the /etc/libvirt/libvirtd.conf unix_sock_dir setting
    # when using systemd version < 227
    ListenStream=/run/libvirt/libvirt-sock
    Service=libvirtd.service
    SocketMode=0660
    SocketUser=root
    SocketGroup=libvirt
    
    [Install]
    WantedBy=sockets.target
    
  2. 重启libvirtd服务:sudo systemctl restart libvirtd

备注:将对应user加入到libvirt组也可以解决问题。

原因分析

是因为virt-manager没有/var/run/libvirt/libvirt-sock的访问权限导致,具体如下:

$ ls -l /var/run/libvirt/libvirt-sock
srw-rw---- 1 root libvirt 0  1月 19 09:09 /var/run/libvirt/libvirt-sock
$ ps aux | grep virt-manager
flynn       6559  0.6  0.5 1022356 97028 ?       Ssl  09:25   0:00 /usr/bin/python3 /usr/bin/virt-manager
flynn       6669  0.0  0.0  12380  2428 pts/0    S+   09:27   0:00 grep --color=auto virt-manager

virt-manager的身份不是root,无法访问libvirt-sock


Last update: 2022-12-14