Mehrere Meta-Screens auf einem Bildschirm

Die bisher vorgestellten Konfigurationen faßten meist mehrere Screens zu einem zusammenhängenden Meta-Screen zusammen. Der XmetaX-Proxy kann jedoch auch umgekehrt mehrere Meta-Screens auf einem Bildschirm darstellen.

In diesem Beispiel wird nicht nur eine Konfigurationsdatei eingesetzt, sondern jedem Meta-Screen und jedem Screen ist jeweils eine Konfigurationsdatei zugeordnet. Dieselbe Screen-Konfigurationsdatei kann so drei Funktionen erfüllen:

Definition eines Screens beim Starten des XmetaX-Proxys;

spätere Definition eines zusätzlichen Screens zur Laufzeit des XmetaX-Proxys;

Veränderung der Konfiguration des Screens.

Es sollen also mehrere, vier, Meta-Screens auf einem Bildschirm dargestellt werden. Die Meta-Screens sind genauso groß wie der Bildschirm und in einer 2×2-Matrix angeordnet:

# /etc/opt/XSOXmetaX/meta0
metaScreen meta0
width 1278 height 1022

# /etc/opt/XSOXmetaX/meta1
metaScreen meta1
width 1278 height 1022
eastOf meta0

# /etc/opt/XSOXmetaX/meta2
metaScreen meta2
width 1278 height 1022
southOf meta0

# /etc/opt/XSOXmetaX/meta3
metaScreen meta3
width 1278 height 1022
southOf meta1

Ein Meta-Screen kann einen von drei Zuständen annehmen, der durch die Konfiguration des zugehörigen Screens definiert ist.

Fullscreen bedeutet, das der Meta-Screen formatfüllend dargestellt wird:

# /etc/opt/XSOXmetaX/fullscreen0
/etc/opt/XSOXmetaX/meta0
window fullscreenPanning0 display :1.0
ofMetaScreen meta0
clipX 0 clipY 0
tags notManaged onTop displayWidth 1278 displayHeight 1022
displayX 0 displayY 0
borderWidth 0

# /etc/opt/XSOXmetaX/fullscreen1
/etc/opt/XSOXmetaX/meta1
window fullscreenPanning1 display :1.0
ofMetaScreen meta1
clipX 0 clipY 0
tags notManaged onTop displayWidth 1278 displayHeight 1022
displayX 0 displayY 0
borderWidth 0

# /etc/opt/XSOXmetaX/fullscreen2
/etc/opt/XSOXmetaX/meta2
window fullscreenPanning2 display :1.0
ofMetaScreen meta2
clipX 0 clipY 0
tags notManaged onTop displayWidth 1278 displayHeight 1022
displayX 0 displayY 0
borderWidth 0

# /etc/opt/XSOXmetaX/fullscreen3
/etc/opt/XSOXmetaX/meta3
window fullscreenPanning3 display :1.0
ofMetaScreen meta3
clipX 0 clipY 0
tags notManaged onTop displayWidth 1278 displayHeight 1022
displayX 0 displayY 0
borderWidth 0

Jede Konfigurationsdatei zieht die Definition des entsprechenden Meta-Screens ein (Konfigurationsdatei).

Bei einem panning Meta-Screen wird ein Ausschnitt des Meta-Screens im entsprechenden Quadranten des Bildschirms angezeigt:

# /etc/opt/XSOXmetaX/panning0
/etc/opt/XSOXmetaX/meta0
window fullscreenPanning0 display :1.0
ofMetaScreen meta0
clipX 0 clipY 0
tags notManaged onTop displayWidth 632 displayHeight 504
displayX 4 displayY 4
borderWidth 4
followPointerX 16 followPointerRestrict control

# /etc/opt/XSOXmetaX/panning1
/etc/opt/XSOXmetaX/meta1
window fullscreenPanning1 display :1.0
ofMetaScreen meta1
clipX 0 clipY 0
tags notManaged onTop displayWidth 632 displayHeight 504
displayX 644 displayY 4
borderWidth 4
followPointerX 16 followPointerRestrict control

# /etc/opt/XSOXmetaX/panning2
/etc/opt/XSOXmetaX/meta2
window fullscreenPanning2 display :1.0
ofMetaScreen meta2
clipX 0 clipY 0
tags notManaged onTop displayWidth 632 displayHeight 504
displayX 4 displayY 516
borderWidth 4
followPointerX 16 followPointerRestrict control

# /etc/opt/XSOXmetaX/panning3
/etc/opt/XSOXmetaX/meta3
window fullscreenPanning3 display :1.0
ofMetaScreen meta3
clipX 0 clipY 0
tags notManaged onTop displayWidth 632 displayHeight 504
displayX 644 displayY 516
borderWidth 4
followPointerX 16 followPointerRestrict control

Die Konfiguration dieser Screens unterscheidet sich von der des fullscreen-Screens durch den Rand (Breite des Rahmens eines Screens), die Größe und die Positionierung des Screens im jeweiligen Quadranten des Bildschirms (Größe eines Screens) sowie die dynamische Positionierung des dargestellten Ausschnitts des Meta-Screens (Variable Position eines Screens). Derselbe window-Screen wird für die fullscreen- wie für die panning-Darstellung verwendet.

Ein zoomed Meta-Screen wird zwar ganz, aber verkleinert (Vergrößerung oder Verkleinerung eines Screens) im entsprechenden Quadranten des Bildschirms dargestellt:

# /etc/opt/XSOXmetaX/zoomed0
/etc/opt/XSOXmetaX/meta0
window zoomed0 display :1.0
ofMetaScreen meta0
clipX 0 clipY 0
tags notManaged onTop displayWidth 632 displayHeight 504
clipWidth 1278 clipHeight 1022
minimumTextSize 9
displayX 4 displayY 4
borderWidth 4

# /etc/opt/XSOXmetaX/zoomed1
/etc/opt/XSOXmetaX/meta1
window zoomed1 display :1.0
ofMetaScreen meta1
clipX 0 clipY 0
tags notManaged onTop displayWidth 632 displayHeight 504
clipWidth 1278 clipHeight 1022
minimumTextSize 9
displayX 644 displayY 4
borderWidth 4

# /etc/opt/XSOXmetaX/zoomed2
/etc/opt/XSOXmetaX/meta2
window zoomed2 display :1.0
ofMetaScreen meta2
clipX 0 clipY 0
tags notManaged onTop displayWidth 632 displayHeight 504
clipWidth 1278 clipHeight 1022
minimumTextSize 9
displayX 4 displayY 516
borderWidth 4

# /etc/opt/XSOXmetaX/zoomed3
/etc/opt/XSOXmetaX/meta3
window zoomed3 display :1.0
ofMetaScreen meta3
clipX 0 clipY 0
tags notManaged onTop displayWidth 632 displayHeight 504
clipWidth 1278 clipHeight 1022
minimumTextSize 9
displayX 644 displayY 516
borderWidth 4

Für zoomed Meta-Screens müssen eigene window-Screens eingesetzt werden, da die Skalierungsfaktoren eines Screens nicht dynamisch verändert werden können. Sobald der Zustand eines Meta-Screens von fullScreen oder panning zu zoomed oder umgekehrt wechselt, sind zwei Screens konfiguriert. Nur der Screen eines Meta-Screens, der zuletzt mit Hilfe des Screen-Merkmals onTop (Screen-Merkmale) nach oben gebracht wurde, ist tatsächlich sichtbar.

Die Konfigurationsdateien für die einzelnen Screens werden beim Starten des XmetaX-Proxys verwendet. Jede der folgenden Dateien konfigurieren jeweils alle Meta-Screens im selben Zustand:

# /etc/opt/XSOXmetaX/fullscreen.conf
options +DynamicServer +InWindow +Vario
maximumNumberOfScreens 8
/etc/opt/XSOXmetaX/fullscreen0
/etc/opt/XSOXmetaX/fullscreen1
/etc/opt/XSOXmetaX/fullscreen2
/etc/opt/XSOXmetaX/fullscreen3
serverCommand /usr/bin/X11/X :1

# /etc/opt/XSOXmetaX/panning.conf
options +DynamicServer +InWindow +Vario
maximumNumberOfScreens 8
/etc/opt/XSOXmetaX/panning0
/etc/opt/XSOXmetaX/panning1
/etc/opt/XSOXmetaX/panning2
/etc/opt/XSOXmetaX/panning3
serverCommand /usr/bin/X11/X :1

# /etc/opt/XSOXmetaX/zoomed.conf
options +DynamicServer +InWindow +Vario
maximumNumberOfScreens 8
/etc/opt/XSOXmetaX/zoomed0
/etc/opt/XSOXmetaX/zoomed1
/etc/opt/XSOXmetaX/zoomed2
/etc/opt/XSOXmetaX/zoomed3
serverCommand /usr/bin/X11/X :1

Das folgende Shell-Skript ändert den Zustand eines Meta-Screens:

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

usage="Usage: $0 fullscreen|panning|zoomed"
if [ $# != 1 ]
then
echo $usage 1>&2; exit 1
fi
state=$1
number=`echo $DISPLAY | sed s/.*\.\([0-9][0-9]*\)/\1/``
if [ $number = "" ]
then
number=0
fi
if [ $state = zoomed ]
then
/opt/XSOXmetaX/bin/xmetaxtool -nogui \
/etc/opt/XSOXmetaX/panning$number
fi
/opt/XSOXmetaX/bin/xmetaxtool -nogui /etc/opt/XSOXmetaX/$state$number

Der Übergang vom fullscreen- zum zoomed-Zustand muß über den panning-Zustand erfolgen, da sonst der entsprechende fullscreen Meta-Screen die Meta-Screens der anderen Quadranten verdecken würde. Das Shell-Skript kann natürlich an Aktionen des Windowmanagers, etwa Hotkeys, gebunden werden:

Ctrl<Key>F10 root|icon|window f.exec \
"/etc/opt/XSOXmetaX/shiftState fullscreen&"
Ctrl<Key>F11 root|icon|window f.exec \
"/etc/opt/XSOXmetaX/shiftState panning&"
Ctrl<Key>F12 root|icon|window f.exec \
"/etc/opt/XSOXmetaX/shiftState zoomed&"

Die regelmäßige Struktur der oben gezeigten Konfigurationsdateien legt es nahe, sie mit Hilfe eines Shell-Skripts automatisch zu erzeugen:

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

usage="Usage: $0 width height borderWidth serverCommand"
if [ $# != 4 ]
then
echo $usage 1>&2; exit 1
fi
width=$1
height=$2
borderWidth=$3
serverCommand="$4"
width2=`expr $width / 2`
offsetX=`expr $width2 + $borderWidth`
width2=`expr $width2 - 2 \* $borderWidth`
width=`expr $width - 2`
height2=`expr $height / 2`
offsetY=`expr $height2 + $borderWidth`
height2=`expr $height2 - 2 \* $borderWidth`
height=`expr $height - 2`

for number in 0 1 2 3
do
echo \# \/etc/opt/XSOXmetaX/meta$number > meta$number
echo metaScreen meta$number >> meta$number
echo width $width height $height >> meta$number
case $number
in 0)
positionX=$borderWidth
positionY=$borderWidth
;; 1)
positionX=$offsetX
positionY=$borderWidth
echo eastOf meta0 \
>> meta$number
;; 2)
positionX=$borderWidth
positionY=$offsetY
echo southOf meta0 \
>> meta$number
;; 3)
positionX=$offsetX
positionY=$offsetY
echo southOf meta1 \
>> meta$number
;; esac
for state in fullscreen panning zoomed
do (
echo \# \/etc/opt/XSOXmetaX/$state$number
echo \/etc/opt/XSOXmetaX/meta$number
case $state
in fullscreen | panning)
window=fullscreenPanning$number
;; zoomed)
window=zoomed$number
;; esac
echo window $window display :1.0
echo ofMetaScreen meta$number
echo clipX 0 clipY 0
echo tags notManaged onTop
case $state
in fullscreen)
echo displayWidth $width displayHeight $height
echo displayX 0 displayY 0
echo borderWidth 0
;; panning)
echo displayWidth $width2 displayHeight $height2
echo displayX $positionX \
displayY $positionY
echo borderWidth $borderWidth
echo followPointerX 16 \
followPointerRestrict control
;; zoomed)
echo displayWidth $width2 displayHeight $height2
echo clipWidth $width clipHeight $height
echo minimumTextSize 9
echo displayX $positionX \
displayY $positionY
echo borderWidth $borderWidth
;; esac
) > $state$number
done
done

for state in fullscreen panning zoomed
do (
echo \# \/etc/opt/XSOXmetaX/$state.conf
echo options +DynamicServer +InWindow +Vario
echo maximumNumberOfScreens 8
for number in 0 1 2 3
do
echo \/etc/opt/XSOXmetaX/${state}$number
done
echo serverCommand "$serverCommand"
) > $state.conf
done

Die obigen Konfigurationsdateien wurden mit den Kommandos

cd /etc/opt/XSOXmetaX
./createConfigurations 1280 1024 4 "/usr/X11/bin/X :1"

erzeugt.

Copyright © 2018 X-Software GmbH
info@x-software.com
2009-07-30 14:44:05 +0200