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/null
dbus_unit_name.service
systemd_unit_name.service
dbus_unit_name.service
私はD-Busシステムサービスを無視することができると信じています/etc/dbus-1/system-services/
(再び、テストされていません)。