web-dev-qa-db-ja.com

起動時にアプリケーションを起動する

タスク:

起動時にxfce4-clipmanを起動します

試してみました:

適切な権限で適切な場所にshスクリプトを作成しました。

martin@martin:/etc/init.d$ ls -l start_clipman.sh 
-rwxrwxr-x 1 root root 26 мар 12 09:05 start_clipman.sh

Shファイルの内容:

martin@martin:/etc/init.d$ cat start_clipman.sh 
#!/bin/bash
xfce4-clipman
martin@martin:/etc/init.d$ 

私は走った

martin@martin:/etc/init.d$ Sudo update-rc.d start_clipman.sh 
defaultsinsserv: warning: script 'K01mount_disk.sh' missing LSB tags and overrides
insserv: warning: script 'K01start_clipman.sh' missing LSB tags and overrides
insserv: warning: script 'start_clipman.sh' missing LSB tags and overrides
insserv: warning: script 'mount_disk.sh' missing LSB tags and overrides

潜在的な問題:

私がこれをするとき:

martin@martin:~$ xfce4-clipman

アプリケーションは実行中ですが、xfce-clipmanが端末を占有し、実行され、機能していますが、端末を使用して他の何かを入力する場合は、キャンセルする必要があります。

martin@martin:~$ xfce4-clipman
^C
martin@martin:~$ 

私は何をしますか

1
Harton

xfce4-clipmanは、Xorgディスプレイ(X11グラフィックシステム)にアクセスする必要があります。これは、実際にグラフィカルアプリであるだけでなく、クリップボードマネージャーであり、X11もそれをカバーしているためです。

(主な)問題:Xorgディスプレイは起動時に実際にはまだ利用できません。起動されますログイン時、長いシステムの起動が終了した後。したがって、「起動時に」xfce4-clipmanを起動することは不可能です。実際に必要なのは、ログイン時にもアプリを起動することです。

(Linuxは、いつでもログインおよびログアウトできる複数のユーザーをサポートするように構築されています。各ユーザーはXorgの新しいコピーを実行し、ログイン画面自体も1つ取得します。したがって、サービスはXorgが利用可能であることを期待できません- まったく。

ログイン時にアプリを起動する

Xfceを含むほとんどのデスクトップ環境は、*.desktopファイルを介して「ログイン」タスクを起動できます(これは実際、さまざまなXfceコンポーネントが起動される方法です)。

グローバルサービスの場合は/etc/xdg/autostart/に、パーソナルサービスの場合は~/.config/autostart/にあります。作成すると、デフォルトで「有効」になりますが、xfce4-session-settingsを使用して無効にすることもできます。

実際、xfce4-clipmanでさえ独自の自動開始ファイルを/ etc/xdg/autostartにインストールします-それはxfce4-clipman-plugin-autostart.desktopという名前です。 Xfce4を使用している限り、自動的に機能するはずです(OnlyShowIn=XFCE行のため)。

ただし、システムにそのファイルがない場合、またはXfce以外のデスクトップ環境でxfce4-clipmanを使用する場合は、新しいファイルを作成できます。自動起動.desktopファイルは一般的に次のようになります。

 [デスクトップエントリ] 
タイプ=アプリケーション
名前=クリップボードマネージャー
 Exec = xfce4-clipman 
 Terminal = false 

CLI以外のプログラムを手動で起動する

多くのデスクトップ環境には、「実行」ダイアログがあります。 AltF2、端末を占有せずにプログラムを実行できます。

同じことを行うさまざまな方法from端末は次のとおりです。

  • (setsid xfce4-clipman 2>/dev/null &)
  • (xfce4-clipman &)
  • Nohup xfce4-clipman &
  • xfce4-clipman & disown
  • 等々。

Init.dスクリプトに関するその他の問題

システムサービスが適切な状況では、/ etc/init.d内のファイルは、シャットダウン時にも実行される単純なスクリプトではなく、「stop」や「restart」などのサブコマンドを受け入れる必要があることに注意してください。システムが/etc/init.d/your_service stopを呼び出すとき、initscriptは実際にstopサービスを開始する必要があります–サービスを再開しないでください!

質問に systemd のタグを付けたので、多くの手間を省いて、代わりにネイティブのsystemd *.serviceファイルを作成してみませんか? 「適切な」init.dスクリプトは複数の画面を埋めることができますが、systemd.servicesは多くの場合12行未満です。

さらに重要なのは、さまざまな時点で数十のサービスが開始されていることです。後の段階では、前の段階にはないいくつかの施設が利用可能です。 (たとえば、ネットワーキング。)

Initscriptがその順序要件を明示的に述べていない場合(「Yの前に実行する必要がありますが、Zの後に実行する必要があります」)、OSは他のすべてと並行して予測できない段階で実行します。 very運が良ければ、適切なタイミングで実行されますが、ほとんどの場合、実行が早すぎて何も機能しません。

ネイティブsystemdユニットファイルでは、順序はBefore=およびAfter=パラメーターを使用して指定されます。 (Requires=またはWants=を使用して依存関係を指定することをお勧めします。)一方、init.dスクリプト(SysVinitとsystemdの両方)は、### BEGIN INIT INFOとマークされた特別なコメントブロックを使用します。 Required-Start:Should-Start:などのパラメーターを使用します。

2
user1686