web-dev-qa-db-ja.com

root以外のユーザーがユーザーデーモンとして開始するsystemdサービスを設定するにはどうすればよいですか?

Arch-linuxシステム(2012.09.07)でsystemdのインストールとセットアッププロセスを終了しました。 initscriptsをアンインストールしました(構成ファイルを削除しました)。

私がやりたいのは、非rootユーザーが開始および停止できるサービスを作成することです。サービスは、rtorrentを実行している切り離された画面セッションを開始することです。ただし、このサービスを開始(有効)に設定したシステム上のすべてのユーザーに、特定のインスタンスを具体的に開始してもらいたいです。これを行うにはどうすればよいですか?

Systemdがサービスのユーザーインスタンスをサポートすることを読んだことを覚えていますが、これを設定する方法、またはそれが私が探しているものに関連しているかどうかに関する情報を見つけることができませんでした。

私がシステムに使用したサービスファイル:

[Unit]
Description=rTorrent

[Service]
Type=forking
ExecStart=/usr/bin/screen -d -m -S rtorrent /usr/bin/rtorrent
ExecStop=/usr/bin/killall -w -s 2 /usr/bin/rtorrent

UPDATE#1

Manページ here および here を読んだ後、systemdの動作が少し良くなることを理解しました。具体的には、User=およびWorkingDirectory=オプションを使用すると、ユーザーのセッションでサービスを開始できます。ただし、ユーザー自身がサービスをstartstopenable、またはdisableできないという問題は依然として残っています。 Access is deniedエラーはsystemctlによって与えられます。

UPDATE#2

最初に、systemdのユーザーセッション(まだ少し不完全です)機能を簡素化し、より適切に使用するために、私は sofar's user-session-units を使用し、彼の構成アドバイスに従いました。

現在のバージョンのDBus(1.6.4-1)には、DBUS_SESSION_BUS_ADDRESSコマンドを使用して環境変数systemctl --userの意味を設定しないというバグがあるようです。

Failed to get D-Bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

変数は次のようになります。

DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/USERUID/dbus/user_bus_socket"

ここで、[〜#〜] useruid [〜#〜]は、指定されたユーザーのUIDである必要があります。

20
Hans

systemdは通常、一般ユーザーがシステムサービスを開始することを許可しません。 polkitを介してアクセス権を付与することはサポートしていますが、その部分はまだいくらか不足しており、特定のサービスを1つだけ許可することはできません。

Rtorrentは実際にはシステムサービスではなく、すべてのユーザーに独自のrtorrentのインスタンスを持たせたいので、systemdの「ユーザー」モードを試してください。

ログインすると、システムはuser@<uid>.serviceシステムユニットを起動し、systemdの別の「--user」インスタンスを起動します。新しいユーザーsystemdは、default.target~/.config/systemd/user/および/etc/systemd/user/からユニットファイル(/usr/lib/systemd/user/で始まる)を読み取ります。

19
user1686