编写用于X-11转发的bash脚本

时间:2012-01-18 20:19:10

标签: bash unix

我使用sudo时遇到SSH X-11转发问题。我找到了解决方案。

$hostname
server4.a.b.edu

首先我做:

$ echo $DISPLAY
localhost:10.0

然后

$ xauth list
server1.a.b.edu/unix:12  MIT-MAGIC-COOKIE-1  6026864294a0e081ac452e8740bcd0fe
server4.a.b.edu/unix:10  MIT-MAGIC-COOKIE-1  f01fbfe0c0d68e30b45afe3829b27e58

然后我需要做

$ sudo xauth add server4.a.b.edu/unix:10  MIT-MAGIC-COOKIE-1  f01fbfe0c0d68e30b45afe3829b27e58

让sudo工作,使用我的服务器名称和显示的cookie。

如何编写bash脚本来自动执行此操作?

4 个答案:

答案 0 :(得分:4)

对RHEL6有用的一件事是在sudoing之前导出XAUTHORITY变量,例如:

export XAUTHORITY=~/.Xauthority
sudo xclock

答案 1 :(得分:3)

根本不需要脚本;这只是一个命令。

sudo xauth add `xauth list $DISPLAY`

答案 2 :(得分:1)

我做

sudo su otheruser -c "xauth add $(xauth list :${DISPLAY##*:}); xterm"

将xterm替换为您要运行的GUI命令

答案 3 :(得分:0)

我使用ssh登录后使用此功能:

echo -n "xauth add `xauth list :${DISPLAY#*:}`" | sudo su - otheruser
sudo su - otheruser
echo -n "xauth remove :${DISPLAY#*:}" | sudo su - otheruser

基本上它会删除显示的主机名部分。 xauth在使用时仍会找到它。

即使您没有“su - otheruser”之外的任何其他命令的sudo权限,它也能正常工作。它还会在之后删除添加的cookie,以提高安全性和清洁度。 :)

您可以使用您喜欢的任何sudo命令变体替换中间的sudo su - otheruser命令。