我正在尝试以另一个用户身份打开 xterm :
$ su - michel
$ xterm
No protocol specified
xterm: Xt error: Can't open display: :0
$ exit
$ sudo su - michel
$ xterm
No protocol specified
xterm: Xt error: Can't open display: :0
答案1
当您执行以下操作时su
,它会丢弃DISPLAY
环境变量(用于告诉终端在哪里显示其窗口)。如果你设置DISPLAY
,你会遇到一个不同的问题(本质上权限)已被多次询问,例如,。X 当 DISPLAY 变量正确时“无法打开显示::0”(请注意,其中一个被错误地标记为另一个相关问题的重复项)。
答案2
如果您可以使用它本身,那么使用sudo
后跟是没有意义的。su
su
问题是其他使用者不允许使用$DISPLAY
.您不希望任意用户连接到您的显示器。如果您确实希望允许其他用户连接到您的显示器,您还必须授予他们访问您的$XAUTHORITY
文件的权限。通常,您的$XAUTHORITY
文件不包含多个显示器的信息,因此您只需使目标用户可以访问文件内容或复制文件即可。
您还可以提取信息并将其合并到目标用户的$XAUTHORITY
文件中。 @mosvy 的评论表明ssh
,但su
也有效。
xauth extract - $DISPLAY | su sebastien -c 'xauth merge - <&7' 7<&0 </dev/tty
答案3
我终于遇到了这个命令,现在它可以工作了:
$ xhost local:$USER
non-network local connections being added to access control list
$ sudo su - michel -c "xterm -e 'sleep 1'"
$