Hi Michal,
Thanks a lot for your long and detailed response!
On 26/01/2020 16.11, Michal Prívozník wrote:
Virt-viewer accepts -c URI argument. In your case you can do:
virt-viewer -c qemu:///session $domain
and it will show the domain's GUI. >
I've tried doing exactly that, but it fails when using SSH as the
transport with:
"Connecting to session instance without socket path is not supported by
the ssh transport"
According to this reply from this very mailing list, this means using
SSH with the session bus is not supported:
https://www.redhat.com/archives/libvirt-users/2014-June/msg00089.html
The error message is not exactly clear, but looking at the source
(remote/remote_driver.c), it seems to mean that only unix sockets are
supported as transport when using the session bus. I could be wrong of
course.
Domains running under the system connection doesn't necessarily
run as
root:root. You can configure the UID:GID pair in /etc/libvirt/qemu.conf
(search user/group). Alternatively, each domain can be fine tuned to run
under different user. See
https://libvirt.org/formatdomain.html#seclabel
for more info.
Thanks a lot. That's very useful to know.
First of all, you need to verify that the host is KVM capable. Try
running "virt-host-validate qemu" under root. It should do some basic
diagnostic and suggest resolution to possible errors.
Well, that's what really puzzles me since I can run the VM perfectly
fine on the session bus and running the validation command gives me the
exact same output both as a normal user and as root:
QEMU: Checking for hardware virtualization : PASS
QEMU: Checking if device /dev/kvm exists : PASS
QEMU: Checking if device /dev/kvm is accessible : PASS
QEMU: Checking if device /dev/vhost-net exists : PASS
QEMU: Checking if device /dev/net/tun exists : PASS
QEMU: Checking for cgroup 'cpu' controller support : PASS
QEMU: Checking for cgroup 'cpuacct' controller support : PASS
QEMU: Checking for cgroup 'cpuset' controller support : PASS
QEMU: Checking for cgroup 'memory' controller support : PASS
QEMU: Checking for cgroup 'devices' controller support : PASS
QEMU: Checking for cgroup 'blkio' controller support : PASS
QEMU: Checking for device assignment IOMMU support : PASS
QEMU: Checking if IOMMU is enabled by kernel : PASS
Doesn't look like there's a problem with hardware support or the kernel
driver and again, it works just fine as a normal user.
Secondly, you want to make sure that /dev/kvm is accessible to the
user
that you want to start your domain under. I'm using consolekit on my
desktop so whenever I log in it appends an ACL entry to the file so that
my user can run domains:
Now we're getting to something very interesting, since my knowledge of
ACLs on Linux and consolekit is extremely limited, so that could very
well explain it. I'm not sure if that could limit the root user from
accessing something root would normally have access to?
Anyway, the output from getacl on my system as my normal user (klau)
that can run the VM with KVM acceleration:
# file: dev/kvm
# owner: root
# group: plugdev
user::rw-
user:klau:rw-
group::rw-
mask::rw-
other::---
The same command run as root:
# file: dev/kvm
# owner: root
# group: plugdev
user::rw-
user:klau:rw-
group::rw-
mask::rw-
other::---
So it does indeed seem like my normal user has some ACLs associated that
the root user doesn't. That's something I can look into, but any further
input from you would be much appreciated as well.
Thanks a lot once again.
Kind regards,
Kasper Laudrup