Lehrer-Schüler-Situation | Kontrollraum-Situation Ausfallsicherer X Window Server, automatische Umschaltung

# Lehrer-Schüler-Situation

Mit der Option InWindow können die vom XmetaX-Proxy kontrollierten Screens in Fenstern dargestellt und damit in eine bestehende X11-Sitzung integriert werden (Screen vom Typ window). Diese Fähigkeit wird zum Beispiel in der Ausbildung genutzt, wo der Lehrer Abbilder der Bildschirme seiner Schüler in seiner X11-Sitzung sehen will und unter Umständen mit Tastatur und Maus eingreifen will.

Ein Spezialfall des Lehrer-Schüler-Szenarios ist die Helpdesk-Situation, in der ein Spezialist einem Anwender über das Netzwerk bei der Bedienung einer Anwendung hilft.

Im folgenden werden ähnliche X Window Server vorausgesetzt. Ist dies nicht der Fall, ist das Screen-Merkmal probeOnly (Screen-Merkmale) zu verwenden, oder die gemeinsamen Fähigkeiten aller — auch zukünftig — beteiligten X Window Server müssen konfiguriert werden (Gemeinsame Ressourcen und Eigenschaften). Außerdem wird hier die Konfiguration der Autorisierung (Autorisierung) vernachlässigt.

## Statische Konfiguration

Soll der Bildschirminhalt eines Schülers in der X11-Sitzung des Lehrers dargestellt werden, wird auf der Workstation des Schülers neben dem lokalen Screen ein Screen vom window-Typ (Screen) auf dem X Window Server des Lehrers (teacher) konfiguriert, der sofort nach dem Start minimiert wird (Screen-Merkmale):

    options +InWindow
    screen local display :1.0
    window "$USER" display teacher:0.0
     sameAs local
     displayWidth 1278 displayHeight 1022
     pointer allowEnter off
     tags iconify
    serverCommand /usr/bin/X11/X :1

Dazu muß auf der Maschine des Lehrers kein XmetaX-Proxy laufen. Will der Lehrer den Bildschirm eines Schülers sehen, aktiviert er einfach das Icon mit dem Namen des Schülers. Selbstverständlich funktioniert dies mit beliebig vielen Schülern gleichzeitig.

Natürlich kann das Fenster kleiner als der Bildschirm des Schülers sein (Größe eines Screens):

    options +InWindow
    screen local display :1.0
    window "$USER" display teacher:0.0
     sameAs local
     pointer allowEnter off
     tags iconify
     displayWidth 640 displayHeight 480
     followPointerX 64
    serverCommand /usr/bin/X11/X :1

## Dynamische Konfiguration

Soll der Screen des Schülers erst nachträglich beim Lehrer angezeigt werden, wird zusätzlich die Option DynamicServer benötigt (Dynamische Konfiguration):

    options +InWindow +DynamicServer
    screen local display :1.0
        tags static
    serverCommand /usr/bin/X11/X :1

Mit dem folgenden Shell-Skript kann der Lehrer die XmetaX-Konfiguration des Schülers so ändern, daß dessen Screen in einem lokalen Fenster dargestellt wird:

    #!/bin/sh
    # /etc/opt/XSOXmetaX/shadowStudent

    usage="Usage: $0 displayName"
    if [ $# != 1 ]
    then
        echo $usage 1>&2; exit 1
    fi
    /opt/XSOXmetaX/bin/xmetaxtool -nogui -display "$1" \
        window "student@$1" display `hostname`:0.0 \
    	sameAs local \
    	displayWidth 1022 displayHeight 766 \
    	followPointerX 64 \
    	pointer allowEnter off

Das Shell-Skript kann an eine Aktion, etwa einen Menü-Eintrag, des Windowmanagers gebunden werden:

    "Student@one" f.exec "/etc/opt/XSOXmetaX/shadowStudent one:0.0 &"

Durch einfaches Schließen des Fensters wird der Screen aus der Konfiguration entfernt. Alternativ könnte auch das folgende Shell-Skript ausgeführt werden:

    #!/bin/sh
    # /etc/opt/XSOXmetaX/unshadowStudent

    usage="Usage: $0 displayName"
    if [ $# != 1 ]
    then
        echo $usage 1>&2; exit 1
    fi
    /opt/XSOXmetaX/bin/xmetaxtool -nogui -display "$1" \
        window "student@$1" delete

Wenn der Screen des Schülers auch beim Lehrer dargestellt wird, kann zu jedem Zeitpunkt entweder der Schüler oder der Lehrer Eingaben tätigen. Mit dem folgenden Shell-Skript ändert der Lehrer die XmetaX-Konfiguration des Schülers so, daß Eingaben nur noch von seinem beziehungsweise des Schülers X Window Server möglich sind (Screen-Merkmale):

    #!/bin/sh
    # /etc/opt/XSOXmetaX/shiftInput

    usage="Usage: $0 grab|release displayName"
    if [ $# != 2 ]
    then
        echo $usage 1>&2; exit 1
    fi
    case "$1"
    in grab)
        teachersSub="input on"
        studentsSub="input off"
    ;; release)
        teachersSub="input off"
        studentsSub="input on"
    ;; *)
        echo $usage 1>&2; exit 1
    ;; esac
    /opt/XSOXmetaX/bin/xmetaxtool -nogui -display "$2" \
        screen local $studentsSub \
        window "student@$2" $teachersSub

## Lehrer-Schüler-Verhältnis umgekehrt

Natürlich können die obigen Konfigurationen gleichzeitig auch umgekehrt — vom Lehrer zu den Schülern — angewandt werden. Um zyklische Situationen zu vermeiden und auch damit die Schüler nicht den gesamten Bildschirminhalt des Lehrers sehen, empfiehlt es sich, den XmetaX-Proxy auf der Maschine des Lehrers mit einem lokalen window-Screen (Screen) zu konfigurieren, der in der bereits laufenden X11-Sitzung des Lehrers dargestellt wird (die Environment-Variable $HOSTNAME muß richtig gesetzt sein):

    options +InWindow +DynamicServer
    connection :2.0
    window teacher@$HOSTNAME display :0.0
        displayWidth 1024 displayHeight 768

X Window Clients, die sich an :2.0 anschließen (X Window Client-Verbindung), werden in dem Fenster dargestellt, also etwa:

    mwm -display :2.0 & xterm -display :2.0 &

Das folgende Shell-Skript stellt das Fenster in der X11-Sitzung eines oder mehrerer Schüler dar oder entfernt die Schüler-Screens aus der Konfiguration:

    #!/bin/sh
    # /etc/opt/XSOXmetaX/shadowTeacher

    usage="Usage: $0 [off] displayName..."
    if [ $# = 0 ]
    then
        echo $usage 1>&2; exit 1
    fi
    if [ "$1" = "off" ]
    then
        sub=delete
        shift
    else
        hostname=`hostname`
        sub="sameAs teacher@$hostname
    	displayWidth 1024 displayHeight 768
    	pointer allowEnter off"
    fi
    screens=
    for display in $*
    do
        hostname=`echo $display | sed 's/\([^:]*\).*/\1/'`
        screens="$screens window student@$hostname
    	display $display $sub"
    done
    /opt/XSOXmetaX/bin/xmetaxtool -nogui -display :2.0 $screens

Will einer der Beteiligten Eingaben tätigen, kann er mit dem folgenden Shell-Skript den XmetaX-Proxy veranlassen, Eingabe-Ereignisse nur von seinem X Window Server zu verarbeiten:

    #!/bin/sh
    # /etc/opt/XSOXmetaX/grabInput

    usage="Usage: $0 displayName"
    if [ $# != 1 ]
    then
        echo $usage 1>&2; exit 1
    fi
    teacher=$1
    hostname=`hostname`
    /opt/XSOXmetaX/bin/xmetaxtool -display $teacher \
            -print screens \
        | while read screenWindow screen
    do
        case $screen
        in *@$hostname)
            tags="input on"
        ;; *)
            tags="input off"
        ;; esac
        /opt/XSOXmetaX/bin/xmetaxtool -nogui \
            -display $teacher $screenWindow $screen $tags
    done

Nach oben
Kontrollraum-Situation
Ausfallsicherer X Window Server, automatische Umschaltung

Copyright © 2021 X-Software GmbH
info@x-software.com