gpt4 book ai didi

linux - 我可以在 sudo su - myuser 之后使用 'systemctl --user' 控制用户 systemd 吗?

转载 作者:IT王子 更新时间:2023-10-29 00:19:47 33 4
gpt4 key购买 nike

我有一个服务,我想在系统启动时启动。我已经为它构建了一个 ap@.service 定义作为模板,因为可能有很多实例。

在root systemd中定义,这很好用,并随系统启动和停止服务。服务实例安装有 systemctl enable ap@inst1正如预期的那样。 Root 还可以毫无问题地启动和停止服务。该服务在其自己的帐户 (myuser) 中运行,而不是 root,由 ap@.service 模板中的 User=myuser 控制。

但我希望用户“myuser”能够启动和停止他们自己的服务,而不会危及系统安全。

我切换到使用用户 systemd,并启用了与 loginctl enable-linger myuser 的逗留.然后我启用 ~myuser/.config/systemd/user 目录中定义的服务。该服务现在按照设计与系统一起干净地启动和停止。如果我以“myuser”身份登录终端,systemctl --user start ap@inst1 , 和 systemctl --user stop ap@inst1两者都很完美。

但是,如果我以不同的用户 (user2) 身份登录并执行 sudo su - myuser在终端中,然后 systemctl --user命令现在失败并显示错误消息“无法获得 D-Bus 连接:没有这样的文件或目录”。

如何启用 systemctl --usersudo su - myuser之后工作命令切换用户?

最佳答案

我在另一个网站上使用不同的术语进一步搜索找到了答案。

所需的解决方案是为 shell 提供信息,以便为用户找到正确的 DBUS。

在运行systemctl --user之前,在shell中添加如下环境变量,DBUS问题消除,systemctl运行正常。

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

为确保 DBUS_SESSION_BUS_ADDRESS 在 sudo shell 中可用,我将环境变量添加到目标用户标识的 ~/.bash_profile 中。这需要创建登录 shell(sudo su - myusersudo -l myuser)以创建正确的环境。

或者,将环境变量的创建添加到 ~/.bashrc(或其他 shell 的等价物)。然后将为所有 shell 创建重新建立环境。

关于linux - 我可以在 sudo su - myuser 之后使用 'systemctl --user' 控制用户 systemd 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34167257/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com