Boot

使用 systemd 在啟動時啟動 Chromium

  • May 17, 2019

任務:在 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 ;  $  

問題:我做錯了什麼以及如何解決問題

現在,systemd 的答案。

既然您確實問過如何使用 systemd 來做到這一點。☺

這就是 systemd 的人一直在告訴人們這樣做的方式。

您將服務單元文件放在完全錯誤的目錄中。它不應該進去/etc/systemd。它甚至不應該進去/etc/systemd/system。它應該進去~marton/.config/systemd/user

這是因為您希望在您自己的帳戶的支持下執行的圖形程序是每使用者服務而不是系統服務。(您目前正在以超級使用者身份呼叫 WWW 瀏覽器。這是一個非常糟糕的主意。現在停止!)您可以為目錄中的**所有使用者配置它/etc/systemd/user,但很可能並非您機器上的所有使用者都需要啟動 Chromium作為一項服務。因此,專門為您的使用者帳戶配置它。

由於它是按使用者提供的服務,因此您應該使用sans--user選項來操作它。例如:systemctl``sudo

systemctl --user status chrome.service

這也適用於啟用和禁用它。

作為 per-user 服務單元,它應該是WantedBy=default.target,因為沒有multi-user.target針對 per-user 的服務。(雖然我懷疑它實際上應該是,這取決於您使用的桌面。systemd 的人一直在說什麼在這一點上並不清楚。)WantedBy=*your-desktop*-session.target``gnome-session.target

systemd 的一部分讓每個使用者的服務看起來像每個登錄會話的服務是整個graphical-session機制,你的服務單元必須與設置結合:

[單元]
PartOf=graphical-session.target

你還需要做什麼取決於 OpenSuSE 在整個graphical-sessionbodge 方面的進展情況,systemd 人們在 2016 年開始推動這一點。Ubuntu 和 Debian 在 GUI 登錄會話啟動和關閉中提供了一大堆幕後 shell 腳本,這對兩者都有好處。啟動/停止graphical-session.target和注入DISPLAY環境變數。如果你的 OpenSuSE 還沒有這個,你可能需要填寫那個部分。

進一步閱讀

引用自:https://unix.stackexchange.com/questions/385964