タスク: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の人々がこれを行うように人々に伝えてきた方法です。
サービスユニットファイルを完全に間違ったディレクトリに配置しています。 /etc/systemd
に入らないでください。 /etc/systemd/system
に入れるべきではありません。 ~marton/.config/systemd/user
で入力してください。
これは、自分のアカウントのAegisで実行したいグラフィカルプログラムがper-userサービスではなくsystemサービス。 (現在、スーパーユーザーとしてWWWブラウザを起動しています。これは非常に悪い考えです。それを停止してください今!)あなたcould/etc/systemd/user
ディレクトリ内のallユーザー用に設定しますが、そうではない可能性がありますマシン上のすべてのユーザーがサービスとしてChromiumを開始する必要があります。そのため、具体的には、ユーザーアカウント用にのみ構成してください。
これはユーザーごとのサービスなので、systemctl
、sans Sudo
の--user
オプションを使用して操作する必要があります。例えば:
systemctl --user status chrome.service
それは有効化と無効化にも当てはまります。
ユーザーごとのサービスにはWantedBy=default.target
がないため、ユーザーごとのサービスユニットとしてはmulti-user.target
である必要があります。 (私はそれが実際にであるべきだと思いますがWantedBy=your-desktop-session.target
は、使用しているデスクトップによってはgnome-session.target
のようなものになります。 systemdの人々が言っていることは、この点については驚くほど明確ではありません。)
そして、ユーザーごとのサービスをログインセッションごとのサービスのように見せるためのsystemdの人々の束の一部は、サービスユニットが設定に組み込む必要があるgraphical-session
メカニズム全体です。
[Unit] PartOf = graphical-session.target
他に何をしなければならないかは、OpenSuSEがgraphical-session
bodge全体にどれだけ到達したかによって異なります。これらは2016年にシステム化された人々がプッシュし始めました。 graphical-session.target
の開始/停止とDISPLAY
環境変数の注入の両方を回避するシャットダウン。 OpenSuSEにまだこれがない場合は、その部分を記入する必要があるかもしれません。
私はこれを自分で試してみましたが、あなたがsystemd
は、グラフィカルデスクトップアプリの起動に関しては、その仕事には不適切なツールであることがわかりました。簡単なアプローチは、好みのデスクトップ環境の「自動起動アプリ」機能を使用することです。
違いは、systemd
はDISPLAY
環境変数に簡単にアクセスできないのに対し、「アプリの自動起動」アプローチはそうすることです。
要するに(さらに JdeBP に加えて):
絶対に必要でない限り、決してroot
を使用しないでください。それらの無数のバグのほとんどが直接発生するため、ブラウザにとっては最低限攻撃者へのrootアクセス。
Systemdファイルを~/.config/systemd/user
に配置します
有効化:例systemctl --user enable firefox
~/.config/systemd/user/firefox.service
:
[Unit]
Description=Start Firefox
PartOf=graphical-session.target
[Service]
ExecStart=/usr/bin/firefox
Type=oneshot
[Install]
WantedBy=graphical-session.target
これにより、起動時にFirefoxが起動します。
graphical-session.target
が適切でない場合(ログインマネージャーによって管理されているものが他にあるため、ディスプレイマネージャーまたはGoogleが何を知っているか)、systemctl --user status *.target
を調べて、他にどのようなものがあるかを確認してください。
グラフィカルログイン後にgraphical-session.target
がアクティブでない場合(古いシステムまたはstableシステムがある可能性があります)、~/.xsessionrc
に以下を追加して手動で開始できます。
systemctl --no-block --user start graphical-session.target
これでうまくいきます。重要なのは、User
にService
を追加することと、DISPLAY
にEnvironment
を開始することです。
[Unit]
Description=launch chromium
[Service]
User=<user>
Environment=DISPLAY=:0
ExecStart=/usr/bin/chromium-browser
[Install]
[email protected]