如何以另一个用户身份运行图形应用程序?

如何以另一个用户身份运行图形应用程序?

假设用户 A ( userA) 希望以用户 B ( userB) 的身份在其图形会话中运行图形应用程序。在现代 GNU/Linux 系统上它是如何完成的?

答案1

简短回答

安装 run-as 脚本并运行:

run-as -X <user> <command>

长答案

编写并运行脚本以授权userB访问userA图形会话。

/home/userA/.local/bin/xhost_userB
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
xhost +si:localuser:userB

选修的:登录时允许访问。

/home/userA/.config/autostart/xhost_userB.desktop
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
[Desktop Entry]
Type=Application
Name=Graphical auth for user B
Comment=Authorize user B to run graphical software in this session
GenericName=userB xauth
Exec=/home/userA/.local/bin/xhost_userB
X-GNOME-Autostart-enabled=true

某些应用程序可能需要额外的服务。

/home/userA/.local/bin/xhost_userB_extra_services
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
systemctl --user restart dbus
systemctl --user import-environment

创建一个脚本以用户 B(例如 Seahorse)身份运行应用程序。

/home/userA/.local/bin/application
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
machinectl shell --uid=userB \
                 --setenv=DISPLAY="${DISPLAY}" \
                 --setenv=NO_AT_BRIDGE=1 \
                 .host \
                 /home/userA/.local/bin/xhost_userB_extra_services

machinectl shell --uid=userB \
                 --setenv=DISPLAY="${DISPLAY}" \
                 --setenv=NO_AT_BRIDGE=1 \
                 .host /usr/bin/application

注意:如果 XWayland 正在运行,它也适用于 Wayland。

相关内容