今systemdに答えがあります。

今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 ;  $  

質問:私は何が間違っていて、どのように解決するのですか?

答え1

今systemdに答えがあります。

systemdを使ってこれを行う方法を尋ねられたからです。 ☺

これがシステム化された人々が人々にそうするように言う方法です。

サービス単位ファイルを正確に間違ったディレクトリに入れました。入ってはいけません/etc/systemd。入ってはいけません/etc/systemd/system。それは入るべきです~marton/.config/systemd/user

アカウントのサポートの下で実行したいグラフィックプログラムユーザーごとサービスではありませんシステム提供する。 (現在スーパーユーザーとしてWWWブラウザを呼び出しています。これは非常に悪い考えです。この練習を中止してください。! ) あなたできる次のように設定してください。みんなディレクトリ内のユーザー/etc/systemd/userですが、システム内のすべてのユーザーがChromiumをサービスとして起動する必要はありません。したがって、ユーザーアカウントに合わせて特別に設定してください。

ユーザー固有のサービスなので、sans--userオプションを使用して運営する必要があります。たとえば、systemctlsudo

systemctl -- ユーザー状態 chrome.service

これは有効化と無効化にも当てはまります。

ユーザー固有のサービス単位にはユーザー固有のサービスがWantedBy=default.targetないためです。multi-user.target(そうすべきだと思いますが、実際に使用しているデスクトップによって異なります。この点についてシステム化された人々が何を言っているのかは不明です。 )WantedBy=your-desktop-session.targetgnome-session.target

ユーザーがユーザーごとのサービスをログインセッションごとのサービスのように見せたいと思うsystemdの一部は、graphical-sessionサービスユニットが設定とマージされる必要がある完全なメカニズムです。

[単位]
PartOf=グラフィック session.target

その他のことは、graphical-sessionOpenSuSEが2016年から推進し始めたOpenSuSEの発展の方向によって異なります。 UbuntuとDebianは、GUIログインセッションを開始および終了するための複雑なビハインドシェルスクリプトセットを提供し、起動/停止および環境変数のgraphical-session.target注入を可能にします。DISPLAYOpenSuSEにまだこのエントリがない場合は、このセクションを作成する必要があります。

追加読書

答え2

簡単に言うと(除くジェイドBP):

  1. root必ず必要な場合以外は使用しないでください。これはブラウザの場合に特にそうです。これは、ブラウザのほとんどのバグが攻撃者が直接rootアクセス権を取得できるためです。

  2. システムファイル~/.config/systemd/user

  3. 有効: 例: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(以前のバージョンまたは安定システム)に以下を追加するだけです~/.xsessionrc

systemctl --no-block --user start graphical-session.target

答え3

私が自分で試した結果、あなたが見つけたように、systemdグラフィックデスクトップアプリケーションを起動するときに使用するのは間違ったツールです。これを行う簡単な方法は、お気に入りのデスクトップ環境の「アプリケーションの自動実行」機能を使用することです。

違いは、環境変数にsystemd簡単にアクセスできないDISPLAYのに対し、「アプリケーションの自動起動」方法はアクセスできることです。

答え4

これは私にとって効果的です。キーは、Userに追加してServiceからDISPLAY始めることですEnvironment

[Unit]
Description=launch chromium

[Service]
User=<user>
Environment=DISPLAY=:0
ExecStart=/usr/bin/chromium-browser

[Install]
[email protected]

関連情報