Answers:
应用程序需要两件事才能在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用于系统进程。您应该改为尝试使用守护程序。
systemctl --user
。同样的DISPLAY
变量不是一个问题呢。在这里看看。