File u_Add-ssh-support-to-xon.patch of Package xorg-scripts
From: Egbert Eich <eich@suse.de>
Date: Tue Feb 11 19:10:37 2014 +0100
Subject: [PATCH]Add ssh support to 'xon'
Patch-Mainline: to be upstreamed
Git-commit: e967f71f0432cdd9b4ffb25bca5ad8dff7295c22
Git-repo:
References:
Signed-off-by: Egbert Eich <eich@suse.com>
'xon' has been around for ages, it's a small script that can be used
to start any xclient remotely.
It did so by opening a shell connection using 'rsh' or 'rcmd' to
connect to the remote system. Today (hopefully) nobody has rsh
installed any more for security reasons.
'ssh' has become the remote login tool of chioce which also allows
to tunnel the X protocol over a secure channel.
This patch adds ssh support to xon to make it useful again.
Signed-off-by: Egbert Eich <eich@suse.de>
---
xon | 61 ++++++++++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 48 insertions(+), 13 deletions(-)
diff --git a/xon b/xon
index 772b357..959e0e7 100644
--- a/xon
+++ b/xon
@@ -32,20 +32,27 @@ target=$1
shift
label=$target
resource=xterm-$label
-if [ -f /usr/bin/remsh ]; then
+if [ -x /usr/bin/ssh ]; then
+ rsh=/usr/bin/ssh
+elif [ -f /usr/bin/remsh ]; then
rsh=/usr/bin/remsh
elif [ -f /usr/bin/rcmd ]; then
rsh=/usr/bin/rcmd
else
rsh=rsh
fi
-rcmd="$rsh $target -n"
-case $DISPLAY in
+case $rsh in
+ *ssh) rcmd_args="-Y $target" ;;
+ *) rcmd_args="$target -n" ;;
+esac
+
+display=$DISPLAY
+case $display in
unix:*)
- DISPLAY=`echo $DISPLAY | sed 's/unix//'`
+ display=`echo $display | sed 's/unix//'`
;;
esac
-case $DISPLAY in
+case $display in
:*)
case `uname` in
Linux*)
@@ -61,10 +68,10 @@ case $DISPLAY in
esac
hostname=`echo $fullname | sed 's/\..*$//'`
if [ $hostname = $target ] || [ $fullname = $target ]; then
- DISPLAY=$DISPLAY
+ display=$display
rcmd="sh -c"
else
- DISPLAY=$fullname$DISPLAY
+ display=$fullname$display
fi
;;
esac
@@ -79,17 +86,23 @@ x)
xpath='HOME=${HOME-`pwd`} XUSERFILESEARCHPATH=${XUSERFILESEARCHPATH-"'"$XUSERFILESEARCHPATH"'"} '
;;
esac
-redirect=" < /dev/null > /dev/null 2>&1 &"
+debug=n
command=
ls=-ls
continue=:
+remote_background=
+rcmd_background_arg=
+
while $continue; do
case $1 in
-remote)
shift
if [ $rsh != "sh" ]; then
rsh="$1"
- rcmd="$rsh $target -n"
+ case $rsh in
+ *ssh) rcmd_args="-fY $target" ;;
+ *) rcmd_args="$target -n" ;;
+ esac
fi
shift;;
-user)
@@ -102,7 +115,10 @@ while $continue; do
username="-l $1"
label="$target $1"
- rcmd="$rsh $target $username -n"
+ case $rsh in
+ *ssh) rcmd_args="-Y ${username}@${target}" ;;
+ *) rcmd_args="$rsh $target $username -n" ;;
+ esac
shift
case x$XAUTHORITY in
x)
@@ -139,7 +155,7 @@ while $continue; do
;;
-debug)
shift
- redirect=
+ debug=y
;;
-screen)
shift
@@ -149,7 +165,7 @@ while $continue; do
usage "-screen option requires an argument"
fi
- DISPLAY=`echo $DISPLAY | sed 's/:\\([0-9][0-9]*\\)\\.[0-9]/:\1/'`.$1
+ display=`echo $display | sed 's/:\\([0-9][0-9]*\\)\\.[0-9]/:\1/'`.$1
shift
;;
*)
@@ -171,7 +187,26 @@ x*)
sess_mangr="SESSION_MANAGER=$SESSION_MANAGER "
;;
esac
-vars='PATH=${PATH:+$PATH:}/usr/X11R6/bin '"$xpath$xauth$sess_mangr"DISPLAY="$DISPLAY"
+vars='PATH=${PATH:+$PATH:}/usr/X11R6/bin '"$xpath$xauth$sess_mangr"
+case $rsh in
+ *ssh)
+ rcmd_background_arg="-f "
+ ;;
+ *)
+ remote_background="&";
+ DISPLAY=$display
+ vars=${vars}DISPLAY="$DISPLAY"
+ ;;
+esac
+
+if [ "$debug" = "n" ]
+then
+ rcmd_args=$rcmd_background_arg$rcmd_args
+ redirect=" < /dev/null > /dev/null 2>&1 $remote_background"
+fi
+
+[ "z" = "z$rcmd" ] && rcmd="$rsh $rcmd_args"
+
case $# in
0)
$rcmd 'sh -c '"'$vars"' xterm '$ls' -name "'"$resource"'" -T "'"$label"'" -n "'"$label"'" '"$redirect'"