为什么在Ubuntu 16.04的锁定/切换账户选项中会出现一个名为"libvirt qemu"的账户?

"libvirt qemu"是由Ubuntu 16.04官方提供的,还是我做错/正确了什么?
$ grep -E 'libvirt|qemu' /etc/passwd"
libvirt-qemu:x:64055:134:Libvirt Qemu,,,:/var/lib/libvirt:/bin/false
libvirt-dnsmasq:x:124:137:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/bin/false

1请问您能[编辑]您的问题并展示grep -E 'libvirt|qemu' /etc/passwd的输出吗? - Byte Commander
1你使用的是哪个显示管理器(GDM、SDDM等)?这可能是一个轻微的配置错误。如果显示libvirt-qemu但没有显示libvirt-dnsmasq,那么显示管理器没有过滤掉/bin/false的shell,但却过滤了系统账户。libvirt-qemu具有高但普通用户UID。 - quixotic
为了回答@quixotic的问题,请将/etc/X11/default-display-manager文件的内容编辑到您的帖子中。谢谢您帮助我们帮助您! - Elder Geek
即使问题被“正确”回答了,我也无法测试并真诚地接受答案,因为我重新安装了Ubuntu。@ElderGeek - naughtyPenguin
对应的报告在Ubuntu的错误跟踪器上:https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1674765 - user13975
5个回答

accountsservice软件包似乎存在一个错误,因为它显示了无登录shell的账户。
作为一种解决方法,只需使用以下两个命令:
printf "[User]\nSystemAccount=true\n" | sudo tee /var/lib/AccountsService/users/libvirt-qemu
sudo systemctl restart accounts-daemon.service 

3这个方法适用于Ubuntu 17.04,而且更简单。按照Elder Geek提供的设置步骤已经完成,但问题仍然存在。 - Zachary Scott
这在Debian 9(Stretch)上对我不起作用。目录和守护进程都存在,但是按照描述创建文件并重新启动后,libvirt-qemu条目仍然存在。 - Daniel Böhmer
这给了我一个错误信息:/var/lib/AccountsService/users/libvirt-qemu: Permission denied,即使使用sudo也是如此。 - darksoulsong
@darksoulsong:看起来你试图执行一个不允许的文件。请仔细检查你是否正确复制了命令行,或者使用交互式编辑器(如nano /var/lib/AccountsService/users/libvirt-qemu)编辑该文件。 - Daniel Böhmer
1在Ubuntu 18.04中,libvirt-qemu用户仍然显示在Lightdm的登录屏幕上,并可以使用上述说明隐藏。 - mark
我建议在上面的tee命令中添加标志-a,以确保不会覆盖该文件中的任何现有配置。除此之外,解决方法很好。 - Mikko Rantalainen
在Elementary OS 5上对我来说运行得相当不错。 - Rajat Pandita

警告: 如果您使用libvirt,请不要这样做,因为它会删除帐户并停止libvirt的工作。我曾经意外按下 CtrlAltF10 试着用一些我在网站上看到的快捷键,这把我带到了一个黑色全屏的tty会话,在那里我输入了chvt Nstartx试图回到Ubuntu的GUI界面,但是失败了,并在重启后在我的现有用户名上方创建了一个名为“Libvirt qemu”的额外帐户。如果有人想弄清如何删除Libvirt qemu用户,可以按照以下步骤进行:1. 进入系统设置->用户帐户;2. 解锁UA控制;3. 单击Libvirt qemu帐户;4. 点击左下角的小“-”号删除Libvirt qemu。

1谢谢,这非常有帮助而且简单明了。当我尝试为我的安卓模拟器启用硬件加速时,我得到了qemu账户。 - Harsha
2如果您使用libvirt,这显然不是很有帮助。这将完全从系统中删除该帐户,并使libvirt停止工作。 - Sprinterfreak
@Sprinterfreak,这就是为什么我详细描述了我遇到错误的方式,以免其他人冒险使用我的方法来摆脱额外的账户。我会在顶部添加一个警告。 - himanshuxd

你可能在文件/etc/lightdm/users.conf中有配置问题,因为具有shell /bin/false的用户(例如libvirt-qemu)不应该出现在登录或切换账户列表中。这由上述/etc/lightdm/users.conf文件中的行hidden-shells=/bin/false /usr/sbin/nologin控制。
然而,如果你安装了accountsservice软件包,则会覆盖/etc/lightdm/users.conf中的任何设置。如果accountsservice没有隐藏带有nologin/false shell的账户,则可能是一个错误,如this answer中所提到的。
来源: 如何隐藏特定用户从登录界面? 在Ubuntu 14.04.5 LTS和16.04.2 LTS上的/etc/lightdm/users.conf文件。

无论出于什么原因,系统用户"libvirt-gemu"在Ubuntu 16.04.2中被创建时的uid为64055。
这是16.04.2的创建方式:
libvirt-qemu:x:64055:130:Libvirt Qemu,,,:/var/lib/libvirt:/bin/false
libvirt-dnsmasq:x:121:129:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/bin/false

这就是应有的样子。
libvirt-qemu:x:125:130:Libvirt Qemu,,,:/var/lib/libvirt:/bin/false
libvirt-dnsmasq:x:121:129:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/bin/false

要纠正这个问题,只需更改"libvirt-qemu"的uid及其相关文件。然后,"Libvirt Qemu"将从登录界面消失!
阅读例如nixCraft - 如何在Linux上更改所有拥有的文件的用户和组ID以了解如何操作。

1无论出于何种原因,系统用户"libvirt-gemu"的UID被设置为64055...据我所知,在Debian(以及其衍生发行版)中,将64055用于libvirt-qemu的UID和GID是通过对libvirt-daemon-system的补丁引入的,该补丁于2016年11月14日在Debian bug跟踪器上提交,编号为#844339。更详细的解释可以在Debian bug报告#843881Ubuntu bug报告#1637601中找到。 - user13975
进一步研究这些错误报告,我发现相关的Debian维护者在稍早之前已经预分配了UID/GID 64055给libvirt-qemu2016年11月11日 - user13975
UID 必须低于1000以不在用户管理器中显示。在我的情况下(Ubuntu),125仍然被gdm占用,因此请找到下一个可用的数字。 - Sprinterfreak
和Ubuntu 18.04一样,即使执行了apt purge libvirt*命令,用户仍然存在。因此,我不得不手动删除它们。 - tejas
我报告了一个关于accountsservice和libvirt-daemon-system包组合的错误行为的bug https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1903509。解决方法是创建文件`/var/lib/AccountsService/users/libvirt-qemu`。详细信息请参见bug报告。 - Mikko Rantalainen

在某个时候,你或者另一个作为先决条件安装的应用程序,qemu

1我因安装了“gnome-boxes”而遇到了这个问题。 - orschiro