agetty、LightDM (ディスプレイ マネージャー)、またはその他の方法でユーザーがログインした後に、OpenRC の特定のサービスが実行されるようにしたいです。
これは、特定のユーザー用に OpenRC サービスとして実行されている emacs デーモンがあり、このサービスを dbus セッションの作成後にのみ開始する必要があるためです。これを実現する 1 つの方法は、dbus-launch の後に emacs デーモンを実行することです。(関連履歴)メインセッション (現在は XFCE セッション) を実行します。これは、たとえば LightDM ディスプレイ マネージャーを介してログインした後に発生します。
回避策として私が行っているのは、自分のユーザーでログインした後に emacs を再起動して、emacs との dbus 統合を正しく初期化することです。しかし、これは面倒です。もっと良い方法があるはずです。
答え1
Gentoo wikiにはユーザーサービスを開始するさまざまな方法を説明したページOpenRC を使用するシステムでは、Gentoo を使用していない場合でも、これらの方法のいずれかをシステムに適応させることができます。必要なものに応じて、いくつかの異なるオプションがあります。
デスクトップ環境の自動起動機能が利用できる場合は、それを使用します。(私は XFCE を使用していないので、この機能があるかどうかはわかりません。) これは、機能するのであれば、おそらく最も簡単に設定できるオプションです。特に、サービスが DBUS デーモンに接続する必要がある場合は、XFCE から DBUS にアクセスする方法を示す環境変数が自動的に継承されるためです。ただし、これは agetty ではなくグラフィカルでログインした場合にのみ機能するため、必要なものではないようです。
デーモンを通常の OpenRC サービスとして追加し (つまり、 でデーモン用のスクリプトを作成します
/etc/init.d/
)、ログインまたはログアウト時にサービスを開始および停止するように PAM を設定します。これにより、agetty や SSH などの非グラフィカルな方法でログインした場合でもサービスが開始されます。ただし、これを行うと、サービスは DBUS 関連の環境変数にアクセスできなくなります。DBUS 関連のパラメータを動的に検出できるかもしれません (その方法を示すスクリプトが wiki ページにあります) が、これは最も堅牢な方法ではありません。そしてもちろん、これは接続する DBUS デーモンが実行中であることに依存しますが、これはデスクトップ環境によって起動されている場合に限ります。起動されていない場合は、サービスが何をすべきか (たとえば、失敗するか、独自の DBUS デーモンを起動するか) を判断し、それを実装する必要があります。
カスタム ディレクトリからサービスを実行できる別のサービス マネージャーを使用します。(Wiki ページでは
runsvdir
これを例として使用していますが、同じことを実行する他のプログラムでもかまいません。) サービス マネージャーは、前述のいずれかの方法 (PAM によって制御される OpenRC サービス、またはデスクトップ環境の自動起動) で起動するか、シェルの init ファイルの 1 つから実行するか、PAM によって制御されず、他のすべてと同様にシステムの起動時に起動する OpenRC サービスとして持つか、などが可能です。次に、このカスタム ディレクトリで emacs デーモンのサービスを定義し、適切な初期化ファイル (シェルの起動、PAM、などxsession
) にコマンドを配置して、必要に応じてそのサービスを開始および停止するように別のサービス マネージャーに指示します。この方法は、emacs デーモンの実行を制御する方法に関して最も柔軟性が高いと思われますが、前述の DBUS と同じ問題があります。つまり、デスクトップ環境の自動起動から起動しない限り、別のサービス マネージャーは DBUS 関連の環境変数にアクセスできません。そのため、必要な場合は、何らかの方法で DBUS 接続パラメーターを動的に検出する必要があるでしょう。
正確に何が必要かによって、これらのアプローチのいずれかが適している可能性があります。どれを選択する場合でも、実装方法の詳細については、リンク先の wiki ページを参照してください。
答え2
はい、可能です。sudo rc-service yourservice start
ユーザーの に追加するだけです.bashrc
。
答え3
rc-update add <service> <runlevel>