1
如何设置由非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: 阅读完这里和此处的手册页后,我了解systemd的工作原理要好一些。特别是,使用User=和WorkingDirectory=选项允许在用户会话中启动服务。然而,问题仍然是用户本身不能start,stop,enable,或disable服务。一个访问被拒绝错误由下式给出systemctl。 UPDATE#2: 首先,为了简化和更好地使用systemd的用户会话(仍然有些不完整)功能,我使用了sofa的user-session-units,并遵循了他的配置建议。 在当前版本的DBus(1.6.4-1)中似乎存在一个错误,该错误中没有设置环境变量,DBUS_SESSION_BUS_ADDRESS这意味着使用systemctl --user命令error时会出现以下错误: 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。