staging.inyokaproject.org

VNC: Bildschirmfläche auf dem Client optimal ausnutzen

Status: Ungelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

pantomime

Anmeldungsdatum:
20. März 2013

Beiträge: 528

Hallo,

der VNC-Client Ubuntu 22.04 kann bei mir die Auflösung 1920x1080, der VNC-Server läuft auf einem Debian 11.4-System, der auf einem Tablet mit einer maximalen Auflösung 1024x768 ausgeführt wird. Wenn ich den x11vnc mit dem Parameter

-geometry 1920x1080 

starte, dann kann ich zwar den gesamten Bildschirm auf dem Client nutzen, aber es ist einfach die Vergrößerung der Anzeige vom Server. Besteht die Möglichkeit, dass der x11vnc-Server eine virtuelle Sitzung startet, in der eine Auflösung 1920x1080, die auf dem Anzeigegerät auf dem Server physisch nicht darstellbar ist, an den Client übertragen wird?

gruss, pantomime

sh4711

Anmeldungsdatum:
13. Februar 2011

Beiträge: 1201

Ja das sollte funktionieren mit Xephyr. Bitte Xephyr auf deinem Debian Tablet installieren.

Auf GitHub bei Sylvain Leroux gibt es folgendes Skript:

Quelle:https://gist.github.com/s-leroux/d1d2f730467857fa3afe#file-nested-xfce4-session-sh

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/bin/bash

function usage() {
    nroff -mandoc <<-EOF | less
.TH $(basename $0) 1
$(basename $0) - open a nested X terminal
.SH SYNOPSIS
$(basename $0) [displayid] [displaysize | --fullscreen] [userlogin] [homedir]

$(basename $0) \-\-help

.SH OPTIONS

.TP
.BR \fIdisplayid\fR
Virtual display to create
Default is :15
.TP
.BR \fIdisplaysize\fR
Size of the virtual display
Default is 1280x720
.TP
.BR \fIuserlogin\fR
Open a session with the given identity.
Default is the current user. Opening a session as a different user require sudo access.
.TP
.BR \fIhomedir\fR
Set the \fIHOME\fR directory for the nested session.
Useful to run xfce4 in a clean and distinct environment 
from yours.  The nested session owner should have 
read/write access to the directory.

.SH EXAMPLE
  ./nested-xfce4-session.sh 
      Start a new X11 server and run xfce4-session

  ./nested-xfce4-session.sh :12
      Start a new X11 server as DISPLAY :12 and run xfce4-session

  ./nested-xfce4-session.sh :12 640x480
      Start a new X11 server as DISPLAY :12 
      with a screen size of 640x480 and run xfce4-session
      (eventually screen size will be resized according to
      your host xfce4 configuration)

  ./nested-xfce4-session.sh /tmp/temp.dir
      Start a new X11 server and run xfce4-session with the
      home directory set to /tmp/temp.dir.
EOF
}

SCREEN="1280x720"
USER=$(whoami)
GUEST_DISPLAY=":15"
EXTRA=( -dpi 96 )
REMOTE=

shopt -s extglob
declare -A OPTS

while [ ! -z "$1" ]
do
    case "$1" in
        -?(-)help)
                usage
                exit 0
                ;;

        +([0-9])x+([0-9]))
                SCREEN="$1"
                shift
                ;;

        --fullscreen)
                EXTRA+=( -fullscreen )
                shift
                ;;

        :+([0-9]))
                GUEST_DISPLAY="$1"
                shift
                ;;
        
	*@*)	USER="$1"
		REMOTE=true
		shift
		;;

        *)      if id -u "$1" > /dev/null 2>&1 ; then
                    # valid user name on that system
                    USER="$1"
                    shift
                elif [ -d "$1" ] ; then
                    # valid directory
                    OPTS[HOME]="HOME=\"$1\""
                    shift
                else
                    echo Not a known user or directory : "$1" >&2
                    exit 1
                fi
                ;;
    esac
done

# Prepare the client to run when server will be ready
LAUNCHER="/bin/bash"

#if [ "${USER}" != $(whoami) ]
#    LAUNCHER="sudo -u ${USER} -b -i"
#then
#else
#    LAUNCHER="env -i PATH=${PATH} 
#                     DISPLAY=${GUEST_DISPLAY} 
#                     HOME=${HOME} 
#                     LOGNAME=${LOGNAME}
#                     USER=${USER} bash -c"
#fi

TEMPDIR=$(mktemp -d)
FIFO="${TEMPDIR}/fifo"
mkfifo "${FIFO}"
chmod a+r "${FIFO}"
chmod a+x "${TEMPDIR}"
exec 3<>"${FIFO}"

APP=xfce4-session
#APP=xterm
if [ -n "$REMOTE" ]
then
    DISPLAY=${GUEST_DISPLAY} ssh -fCY ${USER} "sleep 5 && echo \$DISPLAY && unset XAUTHORITY && "${OPTS[@]}" ${APP}"
else
    LAUNCHER="sudo -u ${USER} -b -i bash -c"
    DISPLAY=${GUEST_DISPLAY} ${LAUNCHER} "read DISPLAY < '${FIFO}' && \
                    unset XAUTHORITY && \
                    "${OPTS[@]}" DISPLAY=\":\${DISPLAY}\" $APP"
fi

Xephyr -displayfd 3 \
       -sw-cursor -reset -terminate \
       "${GUEST_DISPLAY}" -screen "${SCREEN}" "${EXTRA[@]}"

rm -rf "${TEMPDIR}"

wait

Dieses bitte auf dem Debian speichern und auf ausführbar stellen. Nun das Skript testen mit:

./nested-xfce4-session.sh :12 1920x1080   

Mit testen ist nicht gemeint eine VNC Verbindung aufzubauen sondern lediglich zu sehen ob auf dem Debian ein Xephyr Fenster mit xfce in der gewünschten Auflösung erscheint.

Wenn alles so aussieht wie man sich das vorgestellt hat, dann das Skript ändern so das da ungefähr folgendes steht:

Xephyr -displayfd 3 \
       -sw-cursor -reset -terminate \
       "${GUEST_DISPLAY}" -screen "${SCREEN}" "${EXTRA[@]}" &>/dev/null &
x11vnc ... -display "${GUEST_DISPLAY}"

wo x11vnc steht bitte deinen gewünschten Kommandozeilenaufruf von x11vnc eintragen + -display "${GUEST_DISPLAY}"

Dann das geänderte Skript erneut starten und versuchen vom 22.04 via z.B. Remmina auf das Debian zu zugreifen.

Das Ganze geht wohl auch ohne VNC via ssh siehe hier.

Antworten |