- Mehrere Meta-Screens auf einem Bildschirm

Problemlösung und Support
Virtueller Windowmanager

Versionsänderungen verstecken

# 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.

Nach oben
Problemlösung und Support
Virtueller Windowmanager

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