「ログイン」レベルで実行するようにOpenRCサービスをどのように設定しますか?

「ログイン」レベルで実行するようにOpenRCサービスをどのように設定しますか?

私のユーザーがagetty、LightDM(ディスプレイマネージャ)、またはその他の手段でログインした後、OpenRCの特定のサービスを実行したいと思います。

これは、特定のユーザーのOpenRCサービスとして実行されるemacsデーモンがあり、dbusセッションが作成された後にのみそのサービスを開始する必要があるためです。これを達成する1つの方法は、dbus-launchの後にemacsデーモンを実行することです。(関連履歴)たとえば、LightDMディスプレイマネージャを介してログインすると、デフォルトセッション(現在のXFCEセッション)が実行されます。

私が行った解決策は、ユーザーとしてログインした後にemacsを再起動して、emacsとのdbus統合を正しく初期化することでした。しかし、痛いだけです。これを行うより良い方法が必要です。

ベストアンサー1

Gentoo Wikiにはユーザーサービスを開始するさまざまな方法を説明するページOpenRCを使用するシステムでは、Gentooを使用しなくても、これらの方法の1つをシステムに適用できます。必要に応じていくつかの異なるオプションがあります。

  • 可能であれば、デスクトップ環境の自動起動機能を使用します。 (私はXFCEを使用していないので、この機能があるかどうかわかりません。)うまくいけば、これは最も簡単な設定です。特に、サービスがDBUSデーモンに接続する必要がある場合は、さらにそうです。 XFCEからDBUS環境変数にアクセスする方法を自動的に継承します。しかし、agettyを使用せずにグラフィカルにログインする場合にのみ機能するので、望むものではないようです。

  • デーモンを通常のOpenRCサービスとして追加し(つまり、そのスクリプトの生成を意味します/etc/init.d/)、ログインまたはログアウトするときにサービスを開始および停止するようにPAMを設定します。 agetty や SSH などの非グラフィック方式を使用してログインしてもサービスが開始されます。ただし、これにより、サービスはDBUS固有の環境変数にアクセスできなくなります。

    DBUS固有のパラメーターを動的に検出できます。 Wikiページにこれを行う方法を示すスクリプトがあります。しかし、これが最も強力ではありません。もちろん、これは接続可能な実行中のDBUSデーモンを持っている必要があり、これはデスクトップ環境で起動している場合にのみ当てはまります。そうでない場合は、サービスが実行する必要がある操作(失敗するのか、独自のDBUSデーモンを起動するのかなど)を特定して実装する必要があります。

  • カスタムディレクトリでサービスを実行できる別のサービスマネージャを使用してください。 (Wikiページはrunsvdirこれの例として使用されますが、同じタスクを実行する他のプログラムは許可する必要があります。)サービスマネージャ(PAMによって制御されたOpenRCサービスまたはデスクトップ環境の自動起動)を起動するか、次を実行できます。シェル初期化ファイルの1つからインポートするか、PAMによって制御されず、他のシステムと同様にシステム起動時に開始されるOpenRCサービスにします。その後、このカスタムディレクトリでemacsデーモンのサービスを定義し、コマンドを適切な初期化ファイル(シェル起動、PAMxsessionなど)に入れて、別のサービスマネージャにサービスを開始および停止するように指示できます。

    このアプローチは、おそらくemacsデーモンが実行される時期を制御するための最大の柔軟性を提供しますが、前述のDBUSと同じ問題を抱えています。スタンドアロンサービス管理者は、ユーザーが直接起動しない限り、DBUS固有の環境変数にアクセスすることはできません。 Emacsデーモン。デスクトップ環境の自動起動。したがって、必要に応じてDBUS接続パラメータの動的検出を使用できます。

特定の要件に応じて、これらの方法のいずれかが適している可能性があります。どちらを選択しても、リンクされたWikiページで実装方法の詳細を確認できます。

おすすめ記事