Add ssh support to xon OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xorg-scripts?expand=0&rev=3
158 lines
3.7 KiB
Diff
158 lines
3.7 KiB
Diff
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'"
|