使用 Systemd 登录时启动 X Server

使用 Systemd 登录时启动 X Server

我知道这不是人们使用 X 的正常方式。大多数安装说明都会告诉您startx在 shell 的配置文件中添加类似的内容。不过我想让 systemd 来管理事情。

理想情况下,我会systemctl --user enable x.service在我的用户登录时运行类似的东西,并获取我的资源,.xinitrc从而启动我的 WM。

我执行此操作的所有尝试都给了我错误:

/usr/lib/xorg/Xorg.wrap: Only console users are allowed to run the X server

那里必须是做到这一点的一种方法。任何帮助将不胜感激。

答案1

使用以下命令直接引导至 X11启动x,可以自由选择活跃用户,请参阅https://vincent.bernat.ch/en/blog/2021-startx-systemd

与Archlinux指南相比,不再需要自动登录TTYx,这是直接图形目标启动。

对于嵌入式/信息亭/机顶盒系统,我将服务更改为自动重新启动,延迟很小

[Unit]
Description=X11 session for bernat
After=graphical.target systemd-user-sessions.service

[Service]
User=bernat
WorkingDirectory=~

PAMName=login
Environment=XDG_SESSION_TYPE=x11
TTYPath=/dev/tty8
StandardInput=tty
UnsetEnvironment=TERM

UtmpIdentifier=tty8
UtmpMode=user

StandardOutput=journal
ExecStartPre=/usr/bin/chvt 8
ExecStart=/usr/bin/startx -- vt8 -keeptty -verbose 3 -logfile /dev/null
#Restart=no
Restart=always
RestartSec=3

[Install]
WantedBy=graphical.target

请记住激活图形目标

sudo systemctl set-default graphical.target

我发现这是创建嵌入式 Linux 时最好的解决方案,例如使用 Debian 的信息亭或机顶盒系统。快速启动,直接进入图形应用程序。

答案2

这是 XOrg 默认强制执行的安全限制。您可以通过编辑/etc/X11/Xwrapper.config并将其更改allowed_usersconsole来禁用它anybody

我已经通过startx从 systemd 单元文件执行来对此进行了测试,并且它工作正常。

资料来源:同一份文件提到的莱尔

答案3

作为一个在启动时启动 X 的 systemd 用户(没有登录管理器),我遵循以下步骤:https://wiki.archlinux.org/index.php/Systemd/User#Automatic_login_into_Xorg_without_display_manager

答案4

https://wiki.archlinux.org/index.php/Xinit#Autostart_X_at_login

一点点搜索就会有很长的路要走。

if [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then exec startx fi

将其放入 shell 启动中,在控制台中它将自动启动。

我想如果 startx 有问题,你会回到 tty,它应该可以工作。

相关内容