Martin Schmitt <[EMAIL PROTECTED]> writes:

> Zum einen kannst Du in Deiner .bashrc einfach global
>
> export DISPLAY=rechner:0
>
> machen, dann kannst Du Dir die Option "-display", die nicht überall
> implementiert ist, sparen.

Was dann lästig ist, wenn man immer wieder an anderen Rechnern sitzt.
Und so.  Folgendes Skript hatte ich mir mal gebastelt, aber seit ssh
liegt es hier nur noch brach herum.

Jochen

#!/bin/sh
#
# Starten eines X-Programmes auf einem anderen Rechner
#
# Portabilitätswarnungen:
# - cut-Optionen ohne Leerstellen
# - host-/domainname
# - sh kann keine Funktionen
# - test kann keine leeren Strings
#
IFS=""

# init_xauth
    xauth="j"
    if [ `uname -s` = "ULTRIX" ]; then
        xauth="n"
    fi

# get_domainname:
    if [ `uname -s` = "Linux" ]; then
        domainname=`dnsdomainname`
    else if  [ `uname -s` = "ULTRIX" ]; then
        domainname=`awk ' /domain/ { print $2} ' /etc/resolv.conf`
    else
        domainname=`domainname` 
    fi
    fi
# use_ssh
    use_ssh="j"

while [ $# -ne 0 ]; do
    case $1 in 
        -d)
            display=$2
            shift; shift
            ;;
        -l)
            user=$2
            shift; shift
            ;;
        -a)
            xauth="j"
            shift 1
            ;;
        -x)
            xauth="n"
            shift 1
            ;;
        -r)
            use_ssh="n"
            shift 1
            ;;
        -h)
                cat <<+
`basename $0`:  Starten von X-Programmen auf anderen Rechnern

                -d Display
                -l Username
                -a xauth
                -x xhost
                -r rsh statt ssh
                -h Hilfe

+
            ;;
        *)
            if [ $# -lt 2 ]; then
                echo "Zu wenige Parameter, -h fuer Hilfe"
                exit 1
            fi
            host=$1; shift 1
            # echo $*
            program=$*
            while [ "-$1" != "-" ]; do
                shift
            done
            ;;
    esac
done

if [ "$user" = "" ]; then
    user=$USER
fi

if [ "$display" = "" ]; then
    display=$DISPLAY
fi

if [ "$use_ssh" = "j" ]; then
        remote_shell="ssh"
else
        remote_shell="rsh"
fi

# create_display
    if [ ":" = `echo $display | cut -c1` ] ; then
        # Dieser kram ist _sehr_ Host-spezifisch!
        display=`hostname`"."$domainname""$display
    else
        displayhost=`echo $display | cut -f1 -d:`
        displayscreen=`echo $display | cut -f2 -d:`
        if [ `echo $displayhost"." | cut -f2 -d.`"" = "" ]; then
            displayhost=$displayhost"."`domainname`
        else
            displayhost=$displayhost
        fi
        display=$displayhost":"$displayscreen
    fi


# Starten des Programmes
if [ "$use_ssh" = "j" ]; then
        env DISPLAY=$display ssh $host -f -l $user $program 
else
if [ $xauth = "j" ]; then
    # Übertragen der xauth-Daten
    xauth extract - $DISPLAY | $remote_shell $host -l $user xauth merge -
    if [ $? -ne 0 ]; then
        echo "Returncode ungleich null bei xauth"
        exit 1
    fi
else
    xhost +$host 2 >/dev/null > /dev/null
    if [ $? -ne 0 ]; then
        echo "Returncode ungleich null bei xhost"
        exit 1
    fi
fi
        rsh $host -l $user env DISPLAY=$display $program < /dev/null
fi
# env DISPLAY=$display $remote_shell $host -l $user $program < /dev/null
if [ $? -ne 0 ]; then
    echo "Returncode ungleich null bei $remote_shell"
        exit 1
fi

# Und fertig

-- 
#include <~/.signature>: permission denied
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an