Han*_*ans 22 user arch-linux rtorrent 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
Run Code Online (Sandbox Code Playgroud)
更新#1:
阅读此处和此处的手册页后,我了解 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
Run Code Online (Sandbox Code Playgroud)
该变量应如下所示:
DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/USERUID/dbus/user_bus_socket"
Run Code Online (Sandbox Code Playgroud)
其中USERUID需要是给定用户的 UID。
use*_*686 21
systemd 通常不允许普通用户启动系统服务。虽然它确实支持通过 polkit 授予访问权限,但这部分仍然有些缺乏,而且您还不能只允许一项特定服务。
(编辑:后来的 systemd 版本确实支持它,但仅适用于 polkit v106 或更高版本。)
由于 rtorrent 实际上不是系统服务,并且因为您希望每个用户都有自己的 rtorrent 实例,所以尝试使用 systemd 的“用户”模式。
当您登录时,系统会user@<uid>.service
为您启动一个系统单元,它会启动一个单独的“--user”systemd 实例。新的 user-systemddefault.target
将从~/.config/systemd/user/
,/etc/systemd/user/
和读取单元文件(以 开头)/usr/lib/systemd/user/
。
归档时间: |
|
查看次数: |
48697 次 |
最近记录: |