解决Linux切换用户之后无法打开X11应用

注意,这个帖子不是介绍怎么配置ssh,X11,怎么用xshell远程打开需要图形界面的程序。而是在可以xshell远程打开图形界面的情况下,需要切换用户执行一些程序时发现X11无法正常工作的情况。

这个问题在中文搜索中很难搜到一个有用的解决办法,所以google之后搬运一下解决办法。

问题:

  • ssh连接服务器
  • 运行GUI程序MyGuiApp
  • 一切正常
ssh user@my.remote.server
user@myserver$ MyGuiApp
  • 切换到root
  • 运行GUI程序MyGuiApp
user@myserver$ su
root@myserver# MyGuiApp
Error: Can't open display: localhost:10.0

报错:Error: Can’t open display: localhost:10.0

这是因为切换用户之后,X的认证变了

user@myserver$ xauth info
Authority file:       /home/user/.Xauthority
File new:             no
File locked:          no
Number of entries:    82
Changes honored:      yes
Changes made:         no
Current input:        (argv):1

root@myserver# xauth info
Authority file:       /root/.Xauthority
File new:             no
File locked:          no
Number of entries:    3
Changes honored:      yes
Changes made:         no
Current input:        (argv):1

所以一个临时的解决办法是把user用户的xauth的cookie添加到root用户(或者其他要切换的用户)
先查看user的xauth信息

user@myserver$ xauth list $DISPLAY
remote/unix:10  MIT-MAGIC-COOKIE-1  dacbc5765ec54a1d7115a172147866aa

复制这行信息,切换用户,然后用xauth add <cookie> 添加

user@myserver$ su
root@myserver# xauth add remote/unix:10  MIT-MAGIC-COOKIE-1  dacbc5765ec54a1d7115a172147866aa

这时候应该能正常执行GUI程序了,但是这个方法是临时的,断开连接之后,重新连接就失效了。
下面介绍一种长效的方法:
修改文件/etc/pam.d/su,在文件中添加session optional pam_xauth.so systemuser=1

# vim /etc/pam.d/su

在这里插入图片描述
然后保存,退出。
退出root用户,重新登陆root用户,这时候GUI应该已经正常了。

当然,如果你要切换的用户也能ssh,那你另外开一个那个用户的连接也是能解决问题的,或者在当前用户下执行

$ ssh user2@localhost

曲线救国,但是我的场景是必须要root执行一些程序,并且出于安全考虑ssh禁止了root用户登录。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值