openrcシステムで特定のdbusシステムサービスを無効にする方法

openrcシステムで特定のdbusシステムサービスを無効にする方法

dbusをオーバーライドすることが可能であることを知っています。会議サービス~/.local/share/dbus-1/services

しかし、これは間違いなく動作しませんシステム提供する。

openrcからだから、私はsystemdのsystemctlコマンドを取得しません。

高速で汚れた(次回の更新時にサービスが復元されるため)アプローチは、関連するサービスファイルの名前を変更することです。/usr/share/dbus-1/system-servicesこれが続く唯一の方法ですか?

答え1

私はちょうど同じ問題が発生し、dbusコードを調べた後に解決策があると思います。

/usr/local/share/dbus-1/system-servicesにあるファイルを上のファイルを上書きします/usr/share/dbus-1/system-services。したがって、サービスが自動的に開始されないように空のファイルを作成できます。たとえば、dbusがlogin1を自動的に起動しないようにするには、次のようにします。

mkdir -p /usr/local/share/dbus-1/system-services
touch /usr/local/share/dbus-1/system-services/org.freedesktop.login1.service

これにより、ユーザーサービスをグローバルに無効にすることもできます/usr/local/share/dbus-1/services

自分でサービスを開始するのを防ぐもう1つの効果的な方法はを使用することです-Dtraditional_activation=false

答え2

D-BusサービスSystemdService=にSystemdデバイスファイルを指す行はありますかSystemdService=systemd_unit_name.service

/etc/systemd/system/systemd_unit_name.serviceその場合は、からのシンボリックリンクを追加できます/dev/null。これがsystemctl mask systemd_unit_name.serviceうまくいく方法です。

これにより、接続されたSystemdサービスがブロックされ、D-Busサービスを有効にしようとするすべての試行が失敗します。ただし、サービスがブロックされているため、ログにアクティブ化失敗の迷惑なログが表示されることがあります。

行がない場合は、from to(テストされていない)にSystemdService=シンボリックリンクを追加してみてください。 Systemdユニットファイル名というD-Busユニットファイルにエイリアスマッピングがない場合、D-BusアクティベーションはD-Busユニットファイルと同じ名前のSystemdユニットファイルのみを検索します。/etc/systemd/system/dbus_unit_name.service/dev/nulldbus_unit_name.servicesystemd_unit_name.servicedbus_unit_name.service

私はD-Busシステムサービスを無視することができると信じています/etc/dbus-1/system-services/(再び、テストされていません)。

関連情報