Answers:
当成为另一个用户时,通常要使用su - user2
。破折号将强制user2的.bash_profile
来源。
此外,您需要授予用户访问您的显示器的权限。这受X约束。您可以使用该命令xhost +
来允许其他用户权限在user1的桌面上显示GUI。
注意:运行时,xhost +
您仍要在属于user1的外壳中运行此程序。
成为user2后,您可能需要设置环境变量$DISPLAY
。
$ export DISPLAY=:0.0
xhost +user2
仍然给我这个错误- xhost: bad hostname "user2"
。我在Google上搜索了一下,看来我需要做xhost +user2@laptop
或xhost +user2@localhost
,不确定是哪一个。然后说xhost +user2@localhost being added to access control list
。
xhost
并指定export DISPLAY=:0.0
,运行leafpad
仍然给我No protocol specified leafpad: Cannot open display:
,并且无法运行。我在linuxquestions.org/questions/linux-newbie-8/…上找到了此链接,其中说有一些神奇的cookie和xauth
。您是否测试过这些东西是否可以在计算机上正常工作?也许我的配置有所不同?我在使用Debian + LXDE。
xhost +
工作正常,似乎不需要其他任何东西(无需设置$DISPLAY
)。您可以更新您的答案,我会接受吗?
xhost
会以格式提供列表SI:localuser:USERNAME
,因此xhost SI:localuser:user2
应该可以使用。哦,可以使用找到用户的显示w
。
xhost +
将允许可以连接到X服务器的任何主机上的任何用户访问您的屏幕。xhost +SI:localuser:user2
在Debian上为我工作。
您可以使用X11转发:
ssh -XY otheruser@localhost your-gui-program-name-here
您可以从其他用户启动应用。我将从user2启动gimp应用程序,同时以用户1登录(GUI):
$ xhost +
$ sudo su user2
(进入通行证)
$ gimp
请享用 :)
export DISPLAY
首先接受公认的答案))
$ xhost -
您可以尝试sux命令:
sux user2
sux将为您处理$ DISPLAY的内容。您可能需要使用以下命令进行安装:
sudo apt-get install sux
在Debian / Ubuntu下。
sux
由Debian或Ubuntu不再提供。我能找到的最佳替代方法是添加xhost SI:localuser:root
(或任何用户)以~/.xprofile
使其永久使用或使用runuser
gksu
/ gksudo
很好地工作。仍在Sid中时,由于安全性问题,已在Buster中将其删除。
作为的替代方法sux
,可以安全地运行图形命令(firefox-esr
在以下示例中),如下所示$AUTHUSER
(guest
在以下示例中):
AUTHUSER=guest
AUTHSTRING=SI:localuser:${AUTHUSER}
xhost +${AUTHSTRING} > /dev/null
SUDO_ASKPASS=/usr/bin/ssh-askpass
export SUDO_ASKPASS
sudo -k --askpass -u ${AUTHUSER} /usr/bin/firefox-esr
xhost -${AUTHSTRING} > /dev/null
sudo -K
该代码可以:
guest
用户访问到您的当前用户$DISPLAY
通过xhost +SI:localuser:guest
ssh-askpass
以图形方式向您询问密码(当然,sudoers(5)
NOPASSWD:
如果您的安全策略认为还可以,可以使用它来避免这种情况。或者您可以使用其他askpass
程序,或者在配置文件中指定它们(请参见参考资料sudo(8)
中的详细信息--askpass
)sudoers(5)
),它将/usr/bin/firefox-esr
以另一个用户(guest
)的身份运行该命令guest
)的访问权限$DISPLAY
xhost -SI:localuser:guest
最后,sudo -K
删除缓存的密码,因此下一次调用ssh-askpass
将再次要求您输入密码(而不是使用缓存的密码)
而它比什么小更多的工作gksu(8)
还是sux(8)
一样,它可以编写脚本,而且比更安全:
xhost +
(只要有效,任何用户都可以访问您的图形显示)gksu
/ sux
做(临时副本~/.Xauthority
,允许指定用户复制您MIT-MAGIC-COOKIE-1
使用您的显示,并继续即使gksu / SUX完成(只要你没有关闭机器或注销显示的-屏保,休眠等并没有改变魔术曲奇饼)。 因为它将仅允许一个本地用户访问您的显示器,然后仅在命令运行时(命令完成后,$AUTHUSER
将不再能够以任何方式访问您的显示器)。
另一个安全的选择是 ssh -X
(没有-Y
它实际上会使您不安全!请参阅ForwardX11Trusted
中ssh_config(5)
的详细信息),如果您不编写脚本,则更易于使用,但是会导致额外的开销(例如,速度较慢),并且某些程序可能无法正常工作没有不安全感 -Y
。
您需要将安装UI加载为user2。
尝试遵循以下步骤:
以root身份登录:
sudo su
测试x服务器:
xclock
如果您看到时钟正在运行,那就很好了,现在尝试运行以下命令:
xhost
结果应如下所示:
xhost SI:localuser:tri
# tri is my user name
现在让user2访问xhost
xhost +SI:localuser:user2
现在尝试再次登录到user2并尝试打开任何GUI程序。
$XAUTHORITY
它仍然设置为user1~/.Xauthority
,我想程序会尝试读取它,并且失败是因为该文件通常具有模式0600(-rw-------
),这意味着它不可用供“其他”组(包括user2)中的任何人阅读。这意味着,如果您chmod o+r ~/.Xauthority
(以user1身份),将可以解决此问题。我写了一个脚本来演示这一点。