如何使用systemd自动登录到桌面?


20

如何配置systemd自动将我登录到桌面环境,最好不使用登录管理器?我正在使用Arch。


您正在使用哪个登录管理器?有些(GDM,KDM,iirc,也许更多)已经支持自动登录,因此您只需要为它们启用服务即可。
维兰德

我目前正在使用SLiM,可以将其配置为自动登录,但是如果没有显示管理器,启动过程将更快,更
流畅

哦,我看错了你的问题。
维兰德

Answers:


22

Arch Wiki中对此进行了描述:

创建新的服务文件,类似于getty@.service将其复制到/etc/systemd/system/

cp /usr/lib/systemd/system/getty@.service /etc/systemd/system/autologin@.service

这基本上将已经存在getty@.service的文件复制到autologin@.service可以自由修改的新文件中。之所以将其复制到,是/etc/systemd/system因为存储了特定于站点的单位文件。/usr/lib/systemd/system包含软件包提供的单位文件,因此您不应在其中进行任何更改。

然后,您必须将其符号链接autologin@.service到要自动登录的tty的getty服务,例如tty1:

ln -s /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service

到目前为止,这仍然与通常的getty@.service文件相同,但是最重要的部分是修改,autologin@.service以自动实际登录您。为此,您只需将ExecStart行更改为

ExecStart=-/sbin/agetty -a USERNAME %I 38400

ExecStartgetty@.service和之间的区别autologin@.service仅在于-a USERNAME,它告诉agetty自动使用用户名USERNAME登录用户。

现在,您只需要告诉systemd重新加载其守护程序文件并启动服务即可:

systemctl daemon-reload
systemctl start getty@tty1.service

(如果您已经登录tty1,我不确定该服务是否能够正常启动,最安全的方法可能只是重启而不是启动该服务)。

如果您随后要自动启动X,请将以下代码段插入您的代码中~/.bash_profile(再次从Wiki中获取):

if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
    exec startx
fi

您将必须进行修改~/.xinitrc才能启动桌面环境,该操作取决于DE,并且可能也在Arch Wiki中进行了描述。


什么是arg%I?
爱德华·安德森

最后的`字符是什么?那需要吗?这是什么意思?
rien333 '18

@ rien333不必要,我已将其从答案中删除。
Wieland

2
File exists进行符号链接时出现错误
发布自我

用于ln -sf /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service覆盖它。
Manuel Schmitzberger

5

直接修改文件/etc/systemd/system/getty.target.wants/getty@tty1.service(是的符号链接/lib/systemd/system/getty@service):

追加-a/--autologin USERNAME到该行:

ExecStart=-/sbin/agetty --noclear %I $TERM

因此:

ExecStart=-/sbin/agetty -a USERNAME %I $TERM

您可能还会删除-o '-p -- \\u'(当前Arch安装中存在),因为这将启动登录名,USERNAME但仍要求输入密码。

重新启动后,您将自动登录。

PS更改文件名getty@tty1.servicetty你想登录。


为了清楚起见,请注意:如果是符号链接,则用新文件替换符号链接,然后编辑该新文件。
爱德华·安德森

1

IMO,拱形维基当前建议一种更简单的解决方案:

运行助手(systemctl edit getty@tty1)或手动执行以下操作:

mkdir -p /etc/systemd/system/getty@tty1.service.d/
touch /etc/systemd/system/getty@tty1.service.d/override.conf

您想要输入的文本(通过任何一种方法)是(请确保适当地更改用户名):

[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin username --noclear %I $TERM

注意:空行很重要!(当然,我不确定为什么...)

现在,重新启动(shutdown -r 0),然后... login: username (automatic login)会在先前阻止其等待用户名/密码输入的地方发生影响


重新启动并自动登录后,如果您像我一样,现在想通过SSH进入该系统,则可能需要运行:

systemctl enable sshd.service

这将创建符号链接(例如ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service'


空行将首先清除ExecStart条目,而下一行将引入新的exec命令。同样值得注意的是,在某些系统(Ubuntu)上,agetty可执行文件可能位于/sbin/agetty,因此值得首先检查原始/etc/systemd/system/getty.target.wants/getty@tty1.service文件。
platforma
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.