これを行うには2つの方法が考えられます。
1つは、サービスをシステムサービスではなくユーザーサービスにすることです。
システムユニットを作成する代わりに、systemdユニットは、サービスユーザーのホームディレクトリの下に配置され$HOME/.config/systemd/user/daemon-name.service
ます。その後、同じユーザーが以下を使用してサービスを管理できます。systemctl --user <action> daemon-name.service
ます。
ユーザーユニットがブート時に起動できるようにするには、アカウントのlingerを有効にする必要がありますsudo loginctl enable-linger username
。単位もでなければなりませんWantedBy=default.target
。
もう1つの方法は、ユーザーがPolicyKitを介してシステムユニットを管理できるようにすることです。これには、systemd 226以降が必要です(JavaScript rules.dファイルの場合、PolicyKit> = 0.106 –で確認してくださいpkaction --version
)。
新しいPolicyKit設定ファイルを作成します。たとえば/etc/polkit-1/rules.d/57-manage-daemon-name.rules
、許可する属性をチェックします。以下の場合の例:
// Allow alice to manage example.service;
// fall back to implicit authorization otherwise.
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
action.lookup("unit") == "example.service" &&
subject.user == "alice") {
return polkit.Result.YES;
}
});
指定されたユーザーはsystemctl
、を使用して、または使用せずに、指定されたサービスを管理できsudo
ます。