我试图通过尝试将 xclock 作为服务启动来学习 systemd 服务;服务文件在下面
[Unit]
Description=clock
[Service]
Environment=DISPLAY=:0
ExecStart=/usr/bin/xclock
[Install]
WantedBy=graphical.target
Run Code Online (Sandbox Code Playgroud)
任何想法这里有什么问题?我收到一条错误消息,提示“无法连接到显示器”。
Gil*_*il' 21
应用程序需要两件事才能在 X 显示器上打开窗口。它需要知道X显示的位置;这是由DISPLAY
环境变量传达的。它还需要与 X 服务器进行身份验证。这是通过 cookie 传达的,cookie 是 X 服务器在启动时生成的秘密值,并存储在只有启动 X 服务器的用户才能访问的文件中。默认的 cookie 文件是~/.Xauthority
.
如果您的 X 服务器使用默认 cookie 文件位置,则添加Environment=XAUTHORITY=/home/dogs/.Xauthority
将起作用(假设/home/dogs
是在 X 下登录的用户的主目录)。如果您需要查找位置,请参阅我能否以 root 身份在其他用户的桌面上启动图形程序?和远程X显示器上打开一个窗口(为什么“无法打开显示”)?
或者,以运行 X 服务器的用户身份运行程序也可以,前提是 cookie 文件位于默认位置(如果没有,您必须找到 cookie 文件,就像在根情况下一样)。添加User
指令(例如User=dogs
)。
当然,如果您指定的用户拥有的那个号码没有 X 显示,该服务将不会运行。
从 Systemd 启动 GUI 程序相当奇怪。它不是为此而设计的。GUI 程序存在于由用户启动的 X 会话中。Systemd 用于系统进程。您应该尝试使用守护进程。
归档时间: |
|
查看次数: |
22462 次 |
最近记录: |