Pregunta

Utilizo VNC para conectarme a una estación de trabajo Linux en el trabajo.En el trabajo tengo un monitor de 20" que funciona a 1600x1200, mientras que en casa uso mi computadora portátil con una resolución de 1440x900.Si configuro el vncserver para que se ejecute a 1440x900, pierdo mucho espacio en mi monitor, mientras que si lo configuro para que se ejecute a 1600x1200, no cabe en la pantalla de la computadora portátil y tengo que desplazarme por él todo el tiempo.

¿Existe alguna buena manera de cambiar el tamaño de una sesión VNC sobre la marcha?

Mi servidor VNC es RealVNC E4.x (no recuerdo la versión exacta) que se ejecuta en SuSE64.

¿Fue útil?

Solución

Real VNC server 4.4 incluye soporte para Xrandr, que permite cambiar el tamaño del VNC.Inicie el servidor con:

vncserver -geometry 1600x1200 -randr 1600x1200,1440x900,1024x768

Luego cambie el tamaño con:

xrandr -s 1600x1200
xrandr -s 1440x900
xrandr -s 1024x768

Otros consejos

Descubrí que el vnc4server (4.1.1) incluido con Ubuntu (10.04) está parcheado para admitir también el cambio de resolución sobre la marcha a través de xrandr.Lamentablemente, la función fue difícil de encontrar porque no está documentada.Asi que aqui esta...

Inicie el servidor con múltiples instancias de 'geometría', como:

vnc4server -geometry 1280x1024 -geometry 800x600

Desde una terminal en un vncviewer (con:'permitir cambio de tamaño dinámico del escritorio' habilitado) use xrandr para ver los modos disponibles:

xrandr

para cambiar la resolución, por ejemplo use:

xrandr -s 800x600

Eso es todo.

Estoy corriendo TigreVNC en mi servidor Linux, que tiene funciones básicas randr apoyo.Simplemente inicio vncserver sin ninguna opción -randr o múltiples -geometría.

Cuando ejecuto xrandr en una terminal, muestra todas las resoluciones de pantalla disponibles:

bash> xrandr
 SZ:    Pixels          Physical       Refresh
 0   1920 x 1200   ( 271mm x 203mm )   60
 1   1920 x 1080   ( 271mm x 203mm )   60
 2   1600 x 1200   ( 271mm x 203mm )   60
 3   1680 x 1050   ( 271mm x 203mm )   60
 4   1400 x 1050   ( 271mm x 203mm )   60
 5   1360 x 768    ( 271mm x 203mm )   60
 6   1280 x 1024   ( 271mm x 203mm )   60
 7   1280 x 960    ( 271mm x 203mm )   60
 8   1280 x 800    ( 271mm x 203mm )   60
 9   1280 x 720    ( 271mm x 203mm )   60
*10  1024 x 768    ( 271mm x 203mm )  *60
 11   800 x 600    ( 271mm x 203mm )   60
 12   640 x 480    ( 271mm x 203mm )   60
Current rotation - normal
Current reflection - none
Rotations possible - normal
Reflections possible - none

Luego puedo cambiar fácilmente a otra resolución (p.e.cambiar a 1360x768):

bash> xrandr -s 5

Estoy usando el visor TightVnc como cliente y se adapta automáticamente a la nueva resolución.

Creo que lo mejor es ejecutar el servidor VNC con una geometría diferente en un puerto diferente.Lo intentaría basándome en página de manual

$vncserver :0 -geometry 1600x1200
$vncserver :1 -geometry 1440x900

Luego podrás conectarte del trabajo a un puerto y de casa a otro.

Editar:Luego use xmove para mover ventanas entre los dos servidores x.

Curiosamente nadie respondió a esto.En TigerVNC, cuando inicia sesión.Ir a System > Preference > Display desde la barra de menú superior (estaba usando Cent OS como mi servidor remoto).Haga clic en el menú desplegable de resolución; hay varias configuraciones disponibles, incluido 1080p.Selecciona el que más te guste.Cambiará sobre la marcha.

enter image description here

Asegúrese de aplicar la nueva configuración cuando se le solicite un cuadro de diálogo.De lo contrario, volverá a la configuración anterior como en Windows.

Como esta pregunta aparece primero en Google, pensé en compartir una solución usando TigerVNC, que es la opción predeterminada en estos días.

xrandr Permite seleccionar los modos de visualización (AKA Resoluciones), sin embargo, debido a que los modelos son codificadoCualquier modelina adicional, como "2560x1600" o "1600x900" agregado al código.Creo que los desarrolladores que escribieron el código son mucho más inteligentes y la lista codificada es solo una muestra de valores.Lleva a la conclusión de que debe haber una manera de agregar modelos personalizados y man xrandr lo confirma.

Con ese fondo si el objetivo es compartir una sesión VNC entre dos computadoras con las resoluciones anteriores y suponiendo que el servidor VNC es la computadora con la resolución de "1600x900":

  1. Inicie una sesión de VNC con una geometría que coincida con la pantalla física:

    $ vncserver -geometry 1600x900 :1
    
  2. En la computadora "2560x1600", inicie el visor VNC (prefiero Remmina) y me conecto a la sesión VNC remota:

    host:5901
    
  3. Una vez dentro de la sesión de VNC, inicie una ventana de terminal.

  4. Confirme que la nueva geometría esté disponible en la sesión VNC:

    $ xrandr
    Screen 0: minimum 32 x 32, current 1600 x 900, maximum 32768 x 32768
    VNC-0 connected 1600x900+0+0 0mm x 0mm
       1600x900      60.00 +
       1920x1200     60.00  
       1920x1080     60.00  
       1600x1200     60.00  
       1680x1050     60.00  
       1400x1050     60.00  
       1360x768      60.00  
       1280x1024     60.00  
       1280x960      60.00  
       1280x800      60.00  
       1280x720      60.00  
       1024x768      60.00  
       800x600       60.00  
       640x480       60.00  
    

    y notarás que la pantalla es bastante pequeña.

  5. Enumere la modelina (ver artículo de XRandr en Archlinux Wiki) para la resolución "2560x1600":

    $ cvt 2560 1600
    # 2560x1600 59.99 Hz (CVT 4.10MA) hsync: 99.46 kHz; pclk: 348.50 MHz
    Modeline "2560x1600_60.00"  348.50  2560 2760 3032 3504  1600 1603 1609 1658 -hsync +vsync
    

    o si el monitor es antiguo obtenga los tiempos GTF:

    $ gtf 2560 1600 60
    # 2560x1600 @ 60.00 Hz (GTF) hsync: 99.36 kHz; pclk: 348.16 MHz
    Modeline "2560x1600_60.00"  348.16  2560 2752 3032 3504  1600 1601 1604 1656 -HSync +Vsync
    
  6. Agregue la nueva línea de modelo a la sesión VNC actual:

    $ xrandr --newmode "2560x1600_60.00"  348.16  2560 2752 3032 3504  1600 1601 1604 1656 -HSync +Vsync
    
  7. en lo anterior xrandr Salida Busque el nombre de la pantalla en la segunda línea:

    VNC-0 connected 1600x900+0+0 0mm x 0mm
    
  8. Vincule la nueva línea de modelo al monitor virtual VNC actual:

    $ xrandr --addmode VNC-0 "2560x1600_60.00"
    
  9. Úsalo:

    $ xrandr -s "2560x1600_60.00"
    

Chicos, esto es realmente simple.

iniciar sesión a través de ssh en tu pi

ejecutar

vncserver -geometry 1200x1600

Esto generará una nueva sesión. :1

conéctese con su cliente vnc en ipaddress:1

Eso es todo.

Agregando a la respuesta de Nathan (aceptada):

Quería recorrer la lista de resoluciones pero no vi nada:

function vncNextRes()
{
   xrandr -s $(($(xrandr | grep '^*'|sed 's@^\*\([0-9]*\).*$@\1@')+1)) > /dev/null 2>&1 || \
   xrandr -s 0
}

Obtiene el índice actual, pasa al siguiente y vuelve a 0 en caso de error (es decir,fin)


EDITAR

Modificado para que coincida con una versión posterior de xrandr ("*" está al final de la línea y no tiene un identificador de resolución inicial).

function vncNextRes()
{
   xrandr -s $(($(xrandr 2>/dev/null | grep -n '\* *$'| sed 's@:.*@@')-2))  || \
   xrandr -s 0
}

No estoy seguro acerca de Linux, pero en Windows, Tightvnc detectará y se adaptará a los cambios de resolución en el servidor.

Por lo tanto, debería poder ingresar VNC a la estación de trabajo, hacer el equivalente a hacer clic con el botón derecho en el escritorio, propiedades, establecer la resolución en cualquier valor y hacer que la ventana vnc de su cliente cambie el tamaño en consecuencia.

Por otro lado, si hay una manera de mover una ventana existente de un servidor X a otro, eso podría resolver el problema.

creo que puedes usar xmove para mover ventanas entre dos servidores x separados.Entonces, si funciona, al menos debería brindarte una manera de hacer lo que quieras, aunque no tan fácilmente como cambiar la resolución.

Quizás la respuesta más ignorante que he publicado, pero aquí va:Utilice el cliente/visor TigerVNC y verifique 'Resize remote session to local window' en la pestaña Pantalla de opciones.

No sé qué le dice el cliente $%#@ TigerVNC al vncserver remoto o xrandr o Xvnc o gnome o...pero cambia de tamaño cuando cambio la ventana del cliente TigerVNC.

Mi configuración:

  • Servidor Tiger VNC ejecutándose en CentOS 6.Alojamiento de escritorio GNOME.(También funciona con RHEL 6.6)
  • Windows alguna versión con Tiger VNC Client.

Con esto la resolución cambia para ajustarse al tamaño de la ventana del cliente sin importar cuál sea, y no es zooming, es un cambio de resolución real (puedo ver la nueva resolución en la salida xrandr).

Intenté todo lo que pude para agregar una nueva resolución al xrandr, pero fue en vano, siempre termino con 'xrandr: Failed to get size of gamma for output default' error.

Versiones con las que me funciona en este momento (aunque no he tenido problemas con NINGUNA versión en el pasado, solo instalo la última usando yum install gnome-* tigervnc-server y funciona bien):

OS: RHEL 6.6 (Santiago)
VNC Server:
Name        : tigervnc-server
Arch        : x86_64
Version     : 1.1.0
Release     : 16.el6

# May be this is relevant..
$ xrandr --version
xrandr program version       1.4.0
Server reports RandR version 1.4
$ 

# I start the server using vncserver -geometry 800x600
# Xvnc is started by vncserver with following args:
/usr/bin/Xvnc :1 -desktop plabb13.sgdcelab.sabre.com:1 (sg219898) -auth /login/sg219898/.Xauthority 
-geometry 800x600 -rfbwait 30000 -rfbauth /login/sg219898/.vnc/passwd -rfbport 5901 -fp catalogue:/e
tc/X11/fontpath.d -pn


# I'm running GNOME (installed using sudo yum install gnome-*)
Name        : gnome-desktop
Arch        : x86_64
Version     : 2.28.2
Release     : 11.el6

Name        : gnome-session
Arch        : x86_64
Version     : 2.28.0
Release     : 22.el6

Connect using Tiger 32-bit VNC Client v1.3.1 on Windows 7.

La solución de @omiday funcionó para mí en Xvnc TigerVNC 1.1.0, así que la condensé en una única función bash tamaño vnc x y.Úselo así: tamaño vnc 1400 1000.Se supone que xrandr informa el nombre de salida VNC como por defecto.

function vncsize {
    local x=$1 y=$2
    local mode
    if mode=$(cvt "$x" "$y" 2>/dev/null)
    then
        if [[ $mode =~ "Modeline (.*)$" ]]
        then
            local newMode=${BASH_REMATCH[1]//\"/}
            local modeName=${newMode%% *}
            local newSize=( ${modeName//[\"x_]/ } )
            xrandr --newmode $newMode
            xrandr --addmode default "$modeName"
            xrandr --size "${newSize[0]}x${newSize[1]}" &&
                return 0
        else
            echo "Unable to parse modeline for ($x $y) from $mode"
            return 2
        fi
    else
        echo "\`$x $y' is not a valid X Y pair"
        return 1
    fi
}

Hasta donde yo sé, no hay forma de cambiar la resolución del cliente simplemente usando VNC, ya que es solo una aplicación de "espejo de monitor".

apretadovnc sin embargo (que es una aplicación de servidor y cliente VNC) puede cambiar el tamaño de la pantalla en el lado del cliente, es decir.haciendo todo un poco más pequeño (similar a las técnicas de cambio de tamaño de imágenes en programas de gráficos).Eso debería funcionar si no utiliza tamaños de fuente demasiado pequeños.En teoría, VNC debería ser compatible entre diferentes aplicaciones VNC.

Tengo una idea simple, algo como esto:

#!/bin/sh

echo `xrandr --current | grep current | awk '{print $8}'` >> RES1
echo `xrandr --current | grep current | awk '{print $10}'` >> RES2
cat RES2 | sed -i 's/,//g' RES2

P1RES=$(cat RES1)
P2RES=$(cat RES2)
rm RES1 RES2
echo "$P1RES"'x'"$P2RES" >> RES
RES=$(cat RES)

# Play The Game

# Finish The Game with Lower Resolution

xrandr -s $RES

Bueno, necesito una mejor solución para todos los dispositivos de visualización en Linux y similares S.O.

Creo que eso depende de tu administrador de ventanas.

Soy un usuario de Windows, por lo que podría ser una suposición errónea, pero:¿No hay algo llamado Servidor X ¿Se ejecuta en máquinas Linux, al menos en aquellas que podrían ser objetivos interesantes para VNC, a las que puede conectarse con "X-Clients"?

VNC simplemente toma todo lo que está en la pantalla y lo "canaliza a través de su red".Si no estoy totalmente equivocado, entonces el protocolo "X" debería darle la oportunidad de utilizar la resolución de escritorio de su cliente.

Dar Servidor X Pruébelo en Wikipedia, eso podría brindarle una descripción general.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top