如果我在终端切换用户。
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