'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 <[email protected]>
---

I could be talked into nuking the rsh, rcmd support completely which
would greatly simlify things.


 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'"
-- 
1.8.1.4

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to