如何在 shell 中切换用户并使用现有的 gnome 显示会话?

如何在 shell 中切换用户并使用现有的 gnome 显示会话?

如果我在终端切换用户。

su bob

我无法打开,gedit因为bob我没有该显示器。

如果我执行

xhost +

在切换到之前,bob我可以打开某些应用程序的显示,但不是全部。尝试执行时,我得到以下输出gedit

(崩溃报告:4415):GnomeUI-警告 *:连接到会话管理器时:不支持任何指定的身份验证协议。
*
GLib-GIO:错误:/build/buildd/glib2.0-2.28.6/./gio/gdbusconnection.c:2279:initable_init:断言失败:(connection->initialization_error == NULL)

答案1

如果您想允许用户bob从命令行访问您现有的 X 会话,您可以在终端提示符下输入以下命令:

xauth nextract - $DISPLAY | sudo -u bob xauth nmerge -

Thius 使用验证命令提取当前用户的身份验证信息(命令的第一部分,在 之前|),然后将其合并到 user bob$HOME/.Xauthority文件中。请注意,它需要 /etc/sudoers进行配置,以便允许您以用户身份运行命令bob(如果您是 Ubuntu 机器上的管理员用户,则这是默认设置)。

然后您可以切换到bob具有 的用户su -l

或者,您可以发出以下单独的命令:

xauth nextract - $DISPLAY > /tmp/xauth.temporary.file
su -l bob -c 'xauth nmerge - < /tmp/xauth.temporary.file'
rm /tmp/xauth.temporary.file

注意:

1)临时文件必须具有用户bob可以读取的权限(这通常意味着任何系统上的用户可以阅读它);

2)有一个时间窗口,在此期间,任何可以读取临时文件的用户都可以访问您的 X 显示器。

因此,最好使用该sudo方法,因为它没有这些缺点。

答案2

另一种方法是,在xhost +执行之后:

dbus-launch gedit --sm-client-disable

相关内容