这个问题在中文搜索中很难搜到一个有用的解决办法,所以google之后搬运一下解决办法。
问题:
ssh user@my.remote.server
user@myserver$ 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用户登录。
本文章使用limfx的vscode插件快速发布