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 allerauch zukünftigbeteiligten 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 umgekehrtvom Lehrer zu den Schülernangewandt 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

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