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 人员一直在告诉人们这样做的方式。
您将服务单元文件放在完全错误的目录中。它不应该进去/etc/systemd
。它甚至不应该进去/etc/systemd/system
。它应该进去~marton/.config/systemd/user
。
这是因为您希望在您自己帐户的支持下运行的图形程序是每用户服务而不是系统服务。(您当前正在以超级用户身份调用 WWW 浏览器。这是一个非常糟糕的主意。现在停止!)您可以为目录中的所有用户配置它/etc/systemd/user
,但可能并非您机器上的所有用户都需要启动 Chromium作为服务。因此,专门为您的用户帐户配置它。
由于它是针对每个用户的服务,因此您应该使用, sans--user
选项来操作它。例如:systemctl
sudo
systemctl --user 状态 chrome.service
这也适用于启用和禁用它。
作为每用户服务单位,应该是WantedBy=default.target
,因为没有multi-user.target
为每用户服务。(虽然我怀疑它实际上应该是,这将取决于您使用的桌面。systemd 的人一直在说的在这一点上并不是很清楚。)WantedBy=your-desktop-session.target
gnome-session.target
systemd 的一部分让每个用户的服务看起来像每个登录会话的服务的一部分是整个graphical-session
机制,您的服务单元必须将其与设置合并:
[单元] PartOf=graphical-session.target
您还需要做什么取决于 OpenSuSE 对整个系统的支持graphical-session
程度,systemd 人员在 2016 年开始推动。Ubuntu 和 Debian 在 GUI 登录会话启动和关闭中提供了大量的幕后 shell 脚本,这阻碍了启动/停止graphical-session.target
和注入DISPLAY
环境变量。如果您的 OpenSuSE 还没有这个,您可能需要填写该部分。
归档时间: |
|
查看次数: |
11322 次 |
最近记录: |