使用 Systemd 登录时启动 X Server

Nat*_*hal 8 systemd startx xinit x

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

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

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

/usr/lib/xorg/Xorg.wrap: Only console users are allowed to run the X server
Run Code Online (Sandbox Code Playgroud)

一定办法做到这一点。任何帮助将不胜感激。

use*_*188 5

使用startx直接启动到 X11 ,可以自由选择活动用户,请参阅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
Run Code Online (Sandbox Code Playgroud)

请记住激活图形目标

sudo systemctl set-default graphical.target
Run Code Online (Sandbox Code Playgroud)

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


小智 -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,它应该可以工作。

  • OP 特别希望由 systemd 处理... (8认同)