使用 systemd 在啟動時啟動 Chromium
任務:在 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-session
bodge 方面的進展情況,systemd 人們在 2016 年開始推動這一點。Ubuntu 和 Debian 在 GUI 登錄會話啟動和關閉中提供了一大堆幕後 shell 腳本,這對兩者都有好處。啟動/停止graphical-session.target
和注入DISPLAY
環境變數。如果你的 OpenSuSE 還沒有這個,你可能需要填寫那個部分。進一步閱讀
- Lennart Poettering 等人。(2016 年)。 systemd.special。systemd 手冊頁。自由桌面.org。
- 馬丁·皮特 (2016-07-25)。單位:添加圖形會話.目標使用者單位。系統錯誤 #3678。
- 馬丁·皮特 (2016-09-29)。圖形會話目標。systemd.conf。YouTube。
- 伊恩·萊恩 (2017-07-30)。GNOME 使用者會話中的 systemd。GUADEC 2017。YouTube。