fhu*_*cho 23 boot arch-linux systemd
如何配置 systemd 以自动登录我的桌面环境,最好不使用登录管理器?我正在使用 Arch。
Wie*_*and 28
这在Arch Wiki 中有描述:
创建一个类似于
getty@.service通过将其复制到的新服务文件/etc/systemd/system/Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)
到现在为止,这仍然和通常的getty@.service文件一样,但最重要的部分是修改autologin@.service以实际自动登录。为此,您只需要更改ExecStart要读取的行
ExecStart=-/sbin/agetty -a USERNAME %I 38400
Run Code Online (Sandbox Code Playgroud)
ExecStartingetty@.service和in 行之间的区别autologin@.service仅在于-a USERNAME它告诉 agetty 使用用户名 USERNAME 自动登录用户。
现在你只需要告诉 systemd 重新加载它的守护进程文件并启动服务:
systemctl daemon-reload
systemctl start getty@tty1.service
Run Code Online (Sandbox Code Playgroud)
(如果您已经在 tty1 上登录,我不确定该服务是否会正常启动,最安全的方法可能是重新启动而不是启动该服务)。
如果您想自动启动 X,请将以下代码段插入您的~/.bash_profile(再次从wiki 中获取):
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
exec startx
fi
Run Code Online (Sandbox Code Playgroud)
您必须修改您~/.xinitrc的桌面环境才能启动桌面环境,具体操作取决于 DE,并且可能在 Arch wiki 中也有描述。
小智 6
直接修改文件/etc/systemd/system/getty.target.wants/getty@tty1.service(它是到 的符号链接/lib/systemd/system/getty@service):
附加-a/--autologin USERNAME到行:
ExecStart=-/sbin/agetty --noclear %I $TERM
Run Code Online (Sandbox Code Playgroud)
因此:
ExecStart=-/sbin/agetty -a USERNAME %I $TERM
Run Code Online (Sandbox Code Playgroud)
您也可以删除-o '-p -- \\u'(如当前 Arch 安装中的那样),因为这将启动登录USERNAME但仍要求输入密码。
重新启动后,您将自动登录。
PS更改文件名getty@tty1.service到tty你想登录。
IMO,Arch Wiki目前推荐了一个更简单的解决方案:
要么运行助手 ( systemctl edit getty@tty1) 要么执行我手动执行的操作:
mkdir -p /etc/systemd/system/getty@tty1.service.d/
touch /etc/systemd/system/getty@tty1.service.d/override.conf
Run Code Online (Sandbox Code Playgroud)
您要输入的文本(通过任一方法)是(确保适当更改用户名):
[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin username --noclear %I $TERM
Run Code Online (Sandbox Code Playgroud)
注意:空行很重要!(诚然,我不知道为什么......)
现在,重新启动 ( shutdown -r 0) 并且... login: username (automatic login)会在先前阻止等待用户名/密码输入的地方发生一些影响
重新启动并自动登录后,如果您像我一样现在想通过 SSH 进入这个系统,您可能需要运行:
systemctl enable sshd.service
Run Code Online (Sandbox Code Playgroud)
这将创建符号链接(例如ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service')