使用 systemd 在启动时启动 Chromium

Har*_*tun 8 boot opensuse systemd

任务:在 openSUSE 机器上启动时启动 Chromium

问题:我认为问题是我想启动一个 GUI 程序

到目前为止

Mon Aug 14; 06:45:00; marton;/etc/systemd ;  $  
Mon Aug 14; 06:45:00; marton;/etc/systemd ;  $  ls -l
total 24
-rw-r--r-- 1 root root  529 Mar 15 07:20 bootchart.conf
-rw-rw-r-- 1 root root  138 Aug 14 06:34 chorm_start.service
-rw-r--r-- 1 root root  768 Mar 15 07:20 journald.conf
-rw-r--r-- 1 root root  709 Mar 15 07:20 logind.conf
drwxr-xr-x 1 root root  772 Aug 14 05:16 system
-rw-r--r-- 1 root root 1196 Mar 15 07:20 system.conf
drwxr-xr-x 1 root root    0 Mar 15 07:20 user
-rw-r--r-- 1 root root  992 Mar 15 07:20 user.conf
Mon Aug 14; 06:45:00; marton;/etc/systemd ;  $  sudo chmod 664 chorm_start.service 
root's password:
Mon Aug 14; 06:45:19; marton;/etc/systemd ;  $  ls -l
total 24
-rw-r--r-- 1 root root  529 Mar 15 07:20 bootchart.conf
-rw-rw-r-- 1 root root  138 Aug 14 06:34 chorm_start.service
-rw-r--r-- 1 root root  768 Mar 15 07:20 journald.conf
-rw-r--r-- 1 root root  709 Mar 15 07:20 logind.conf
drwxr-xr-x 1 root root  772 Aug 14 05:16 system
-rw-r--r-- 1 root root 1196 Mar 15 07:20 system.conf
drwxr-xr-x 1 root root    0 Mar 15 07:20 user
-rw-r--r-- 1 root root  992 Mar 15 07:20 user.conf
Mon Aug 14; 06:45:20; marton;/etc/systemd ;  $  cat chorm_start.service                      
[Unit]                                                                                       
Description="Starting chromium on startup"                                                   

[Service]                                                                                    
ExecStart=/usr/lib64/chromium/chromium                                                       

[Install]                                                                                    
WantedBy=multi-user.target                                                                   
Mon Aug 14; 06:45:38; marton;/etc/systemd ;  $  sudo systemctl status chorm_start
chorm_start.service - "Starting chromium on startup"                                         
   Loaded: loaded (/etc/systemd/chorm_start.service; enabled)                                
   Active: failed (Result: exit-code) since Mon 2017-08-14 06:38:44 EEST; 7min ago           
  Process: 853 ExecStart=/usr/lib64/chromium/chromium (code=exited, status=1/FAILURE)
 Main PID: 853 (code=exited, status=1/FAILURE)

Aug 14 06:38:47 date chromium[853]: Unable to init server: Could not connect: Connection refused
Aug 14 06:38:47 date chromium[853]: [853:853:0814/063844.727638:ERROR:browser_main_loop.cc(279)] Gtk: cannot open display:
Mon Aug 14; 06:46:35; marton;/etc/systemd ;  $  
Run Code Online (Sandbox Code Playgroud)

问题:我做错了什么以及如何解决问题

Jde*_*eBP 10

现在,systemd 给出了答案。

因为你确实问过如何用 systemd 做到这一点。☺

这就是 systemd 人员一直在告诉人们这样做的方式。

您将服务单元文件放在完全错误的目录中。它不应该进去/etc/systemd。它甚至不应该进去/etc/systemd/system。它应该进去~marton/.config/systemd/user

这是因为您希望在您自己帐户的支持下运行的图形程序是每用户服务而不是系统服务。(您当前正在以超级用户身份调用 WWW 浏览器。这是一个非常糟糕的主意。现在停止!)您可以为目录中的所有用户配置它/etc/systemd/user,但可能并非您机器上的所有用户都需要启动 Chromium作为服务。因此,专门为您的用户帐户配置它。

由于它是针对每个用户的服务,因此您应该使用, sans--user选项来操作它。例如:systemctlsudo

systemctl --user 状态 chrome.service

这也适用于启用和禁用它。

作为每用户服务单位,应该是WantedBy=default.target,因为没有multi-user.target为每用户服务。(虽然我怀疑它实际上应该是,这将取决于您使用的桌面。systemd 的人一直在说的在这一点上并不是很清楚。)WantedBy=your-desktop-session.targetgnome-session.target

systemd 的一部分让每个用户的服务看起来像每个登录会话的服务的一部分是整个graphical-session机制,您的服务单元必须将其与设置合并:

[单元]
PartOf=graphical-session.target

您还需要做什么取决于 OpenSuSE 对整个系统的支持graphical-session程度,systemd 人员在 2016 年开始推动。Ubuntu 和 Debian 在 GUI 登录会话启动和关闭中提供了大量的幕后 shell 脚本,这阻碍了启动/停止graphical-session.target和注入DISPLAY环境变量。如果您的 OpenSuSE 还没有这个,您可能需要填写该部分。

进一步阅读

  • 在 Debian 推出“graphical-session.target”之前,请查看[此处](https://superuser.com/a/1128905/383800)。 (2认同)