在systemd服务文件中设置DISPLAY


9

我试图通过尝试将xclock作为服务来学习systemd服务;服务文件在下面

[Unit]
Description=clock

[Service]
Environment=DISPLAY=:0
ExecStart=/usr/bin/xclock

[Install]
WantedBy=graphical.target

有什么主意吗?我收到一条错误消息:“无法连接到显示器”。

Answers:


18

应用程序需要两件事才能在X显示器上打开一个窗口。它需要知道X显示器的位置;这是由DISPLAY环境变量传达的。它还需要使用X服务器进行身份验证。这是通过cookie传递的,它是X服务器启动时由X服务器生成的秘密值,并存储在只有启动X服务器的用户才能访问的文件中。默认的cookie文件是~/.Xauthority

如果您的X服务器使用默认的cookie文件位置,则添加Environment=XAUTHORITY=/home/dogs/.Xauthority将起作用(假设/home/dogs是在X下登录的用户的主目录)。如果需要查找位置,请参阅可以以root用户身份在另一个用户的桌面上启动图形程序吗?在远程X显示器上打开一个窗口(为什么“无法打开显示器”)?

另外,只要cookie文件位于默认位置,就可以以运行X服务器的用户身份运行该程序(如果不是,则必须像在root情况下那样定位cookie文件)。添加User指令(例如User=dogs)。

当然,如果您指定的用户所拥有的那个数字没有X显示,则该服务将不会运行。

从Systemd启动GUI程序是很奇怪的。它不是为此设计的。GUI程序存在于X会话中,由用户启动。Systemd用于系统进程。您应该改为尝试使用守护程序。


1
使用没问题systemctl --user。同样的DISPLAY变量不是一个问题呢。在这里看看。
Suuuehgi

-2

您可以添加.xinitrc

xhost si:localuser:$USER

这个对我有用!


1
这是systemd服务文件,而不是.xinitrc中
俚语
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.