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
更新#1:
こちらとこちらの manページを読んだ後、systemdの動作が少し良くなったことがわかりました。特に、User=およびWorkingDirectory=オプションを使用すると、ユーザーのセッションでサービスを開始できます。しかし、問題はまだユーザー自身ができないことに変わりはないstart、stop、enable、またはdisableサービス。アンのアクセスが拒否され、エラーがで与えられますsystemctl。
更新#2:
まず、簡素化とsystemdのユーザーセッション(まだやや不完全)の機能を使用するために、sofarの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である必要があります。
sudoです。上記のコメントで述べたように、ユーザー用に簡単なセットアップを行い、ユーザーに独自のサービスファイルを制御させることができます。ただし、このソリューションにより、ユーザーは他のほとんどのサービスも制御できるようになります
sudoのドキュメントを読んでいれば、そうはなりません。sudoers(5)には、コマンドの引数を制限する多くの例があります。