Cambio de la resolución de una sesión de VNC en Linux [cerrado]

153

Yo uso 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 funcione a 1440x900, pierdo mucho espacio en mi monitor, mientras que si configurarlo para que funcione a 1600x1200, no cabe en la pantalla de la computadora portátil, y tengo que desplazarlo todo el tiempo.

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

Mi servidor VNC es RealVNC E4.x (no recuerdo la versión exacta) ejecutándose en SuSE64.

Nathan Fellman
fuente
Me gustaría mencionar algo que encontré recientemente, pero aún no he podido probarlo. Hay un nuevo programa llamado FreeNX que se ha propuesto reemplazar a VNC. Aquí está el enlace: freenx.berlios.de
andho
@andho: ese enlace parece estar roto.
ArtOfWarfare
@ArtOfWarfare espero que esto ayude a help.ubuntu.com/community/FreeNX . Debería ser bastante estable por ahora. Creo que lo intentaré pronto, si el tiempo lo permite.
andho

Respuestas:

159

El servidor real VNC 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 redimensionar con:

xrandr -s 1600x1200
xrandr -s 1440x900
xrandr -s 1024x768
Nathan Fellman
fuente
1
Gracias Nathan, incluso la gente realvnc no parece enfatizar la función xrandr ... Vea también mi función bash a continuación para permitir el ciclo a través de las resoluciones randr.
nhed
77
Puede que le resulte conveniente poner todas estas opciones en un .vnc/configarchivo. Por ejemplo, la primera línea de mi configuración es:-randr 800x600,1024x768,1280x800,1280x960,1280x1024,1680x1050,1920x1080,3360x1050,1024x700,1200x740,1600x1000,3200x1000
bfroehle
@Nathan Intenté usar la solución que diste, pero sin éxito. ¿puedes por favor intentar responder a esta pregunta mía?
Geek
3
Me pregunto si esto funciona con tightvncserver?
Dimitry K
44
@DimitryK Tuve tightvncserver y no funciona. Lo purgué e instalé VNC real. Lo recomiendo. Todas las resoluciones del paisaje: 320x240,480x320,482x320,560x360,576x360,640x480,640x482,648x486,720x480,720x486,720x540,720x576,768x576,800x480,800x600,1024x600,1024x768,1280x720,1280x800,1280x1024,1366x768,1400x1050,1440x900, 1600x900,1600x1024,1600x1200,1680x1050,1920x1080,1920x1200,2048x1024,2048x1152,2048x1536,2560x1080,2560x1440,2560x1600,2560x2048,3072x1536,3072x1728,3840x2160,4096x2048,4096x24082x2160,4096x2048,4096x2402192x2160,4096x2048,4096x2402
barwnikk
68

Descubrí que el vnc4server (4.1.1) incluido con Ubuntu (10.04) está parcheado para permitir también cambiar la 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 un terminal en un vncviewer (con: 'permitir el cambio de tamaño del escritorio dinámico' habilitado) use xrandr para ver los modos disponibles:

xrandr

para cambiar el resultado, por ejemplo use:

xrandr -s 800x600

Eso es.

Tijs
fuente
Traté de usar su enfoque también junto con el sugerido por Nathan, pero sin éxito. ¿Puedes ver lo que falta aquí?
Geek
Funcionó perfectamente. ¡Gracias!
Roney Michael
27

Estoy ejecutando TigerVNC en mi servidor Linux, que tiene soporte básico de randr . Acabo de iniciar vncserver sin ninguna opción -randr o multiple -geometry.

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

Entonces puedo cambiar fácilmente a otra resolución (cambiar a 1360x768):

bash> xrandr -s 5

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

Peter
fuente
para que la gente no vaya en busca de gansos salvajes, ¿puede enumerar tanto la versión de TigerVnc como la versión + distribución de su servidor Linux? Gracias
nhed
Puedo confirmar que funciona bastante bien con TiverVnc 1.1.0 (servidor Linux, cliente Linux)
Benedikt Waldvogel
1
Estoy usando vncviewer y cada vez que trato de cambiar la resolución, la ventana se cierra.
AWE
¿Puedo preguntarle qué versión de xrandr es esta? Mina: la versión 1.3.5 del programa xrandr informa que el servidor RandR versión 1.3 parece completamente diferente, por ejemplo, no tengo primera columna
Wakan Tanka
Solo para agregar que también funciona con Real VNC como cliente. Probado para la versión 6.0.3
Vivek VK
25

Creo que lo mejor es ejecutar el servidor VNC con una geometría diferente en un puerto diferente. Lo intentaría según la página del manual

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

Luego puede conectarse desde el trabajo a un puerto y desde su hogar a otro.

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

Palmadita
fuente
3
@Pat, el problema con su solución es que no puedo mover fácilmente una ventana de una sesión de VNC a otra. Si estoy en medio de alguna depuración cuando tengo que irme, quiero poder continuar donde lo dejé (tal vez con las ventanas movidas un poco debido al cambio de tamaño). Si tengo dos sesiones separadas, no podré continuar igual que antes, porque tendré que cerrar ventanas de una sesión y volver a abrirlas en otra. Por otro lado, si hay una manera de mover una ventana existente de un servidor X a otro, eso podría resolver el problema.
Nathan Fellman el
1
xmove no está en el repositorio actual de Ubuntu; xpra es, lo que hará lo mismo (actuar como un proxy X).
Sam Hartsfield
20

Como esta pregunta aparece primero en Google, pensé que compartiría una solución usando TigerVNC, que es el valor predeterminado en estos días.

xrandrpermite seleccionar los modos de visualización (también conocido como resoluciones), sin embargo, debido a que las modelinas están codificadas, cualquier línea de modo adicional como "2560x1600" o "1600x900" necesitaría agregarse 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 lo man xrandrconfirma.

Con ese trasfondo, 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 "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 conéctese a la sesión remota de VNC:

    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 de 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 línea de modelo (consulte el artículo de xrandr en la wiki de ArchLinux) 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 viejo, obtenga los tiempos de 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 modo 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 la xrandrsalida anterior , busque el nombre para mostrar en la segunda línea:

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

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

    $ xrandr -s "2560x1600_60.00"
    
el viernes
fuente
lo usó para crear un espacio de trabajo más grande con tigervnc y mwm, funcionó para aumentar el tamaño de la pantalla, pero el espacio de trabajo está limitado al tamaño inicial utilizado por vnc.
user2019716
Se debe a mwm, el espacio completo se explota una vez que se reinicia mwm
user2019716
Brillante, muchas gracias por la receta, realmente ayudó.
Adrian Rosoga el
Esto me ahorró mucho tiempo, ¡gracias!
Ben Davis
17

Curiosamente, nadie respondió esto. En TigerVNC, cuando está conectado a la sesión. Vaya System > Preference > Displaydesde 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, incluyendo 1080p. Selecciona el que más te guste. Cambiará sobre la marcha.

ingrese la descripción de la imagen aquí

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 al igual que en Windows

Hammad Khan
fuente
1
¿Es esta una configuración de TigerVNC, de CentOS o del administrador de ventanas?
Nathan Fellman
Esta es una configuración en CentOS. Puede acceder desde 'TigerVNC Viewer' cuando haya iniciado sesión.
Hammad Khan
2
esta caja fuerte mi vida
Yu Jiaao
9

Chicos, esto es muy simple.

iniciar sesión a través de sshsu pi

ejecutar

vncserver -geometry 1200x1600

Esto generará una nueva sesión :1

conéctese con su cliente vnc en ipaddress:1

Eso es.

Will Berger
fuente
77
Esa es una respuesta incorrecta, porque no cambiará la resolución de una sesión existente, sino que simplemente creará una nueva.
Nathan Fellman el
6

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 coincidir con una versión posterior de xrandr ("*" está al final de la línea y no tiene un identificador de resolución principal).

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

La solución de @omiday funcionó para mí en Xvnc TigerVNC 1.1.0, por lo que la condensé en una sola función bash vncsize xy . Úselo así: vncsize 1400 1000 . Funciona para cualquier nombre de salida VNC, "predeterminado" o "VNC-0".

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_]/ } )
            local screen=$(xrandr -q|grep connected|cut -d' ' -f1)
            xrandr --newmode $newMode
            xrandr --addmode "$sscreen" "$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
}
Nicholas Sushkin
fuente
2

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

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

Mi configuración:

  • Tiger VNC Server que se ejecuta en CentOS 6. Hosting de escritorio GNOME. (Funciona también con RHEL 6.6)
  • Windows alguna versión con Tiger VNC Client.

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

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

Versiones con las que funciona para mí en este momento (aunque no he tenido problemas con CUALQUIER versión en el pasado, solo instalo el último uso yum install gnome-* tigervnc-servery 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.
Kashyap
fuente
¿Qué versiones de TigerVNC está utilizando para su cliente / servidor? Intenté esto hoy y no me cambia el tamaño automáticamente. Estoy en RHEL 6.2 ejecutando Xvnc TigerVNC 1.1.0 para el servidor y el cliente vncviewer-1.4.3.exe
cdwilson
@cdwilson Espero que hayas probado con el cliente en modo de pantalla completa. Versiones agregadas. HTH
Kashyap
Resulta que 1.1.0 no estaba jugando bien con lo que sea que estén ejecutando en nuestras máquinas de trabajo. Ejecutar el último 1.4.3 de mi $HOMEdirectorio funciona como se esperaba github.com/TigerVNC/tigervnc/issues/155
cdwilson el
Confirmado: openSuse 15.1, GDM, KDE Plasma, cliente TigerVNC 1.9.0. La resolución de mi escritorio remoto sigue el tamaño de la ventana del cliente, cualquier resolución ad-hoc loca, cualquier relación de aspecto; en GDM o KDE. Funciona de maravilla, fuera de la caja, no es necesario configurar nada en ningún lugar del cliente o servidor.
Espinosa
1

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 VNC en la estación de trabajo, hacer el equivalente de hacer clic con el botón derecho en el escritorio, propiedades, establecer la resolución a lo que sea, y hacer que la ventana de vnc de su cliente se redimensione en consecuencia.

Blorgbeard está fuera
fuente
1

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 puede usar xmove para mover ventanas entre dos servidores x separados. Entonces, si funciona, esto al menos debería darle una forma de hacer lo que desea, aunque no tan fácilmente como cambiar la resolución.

Palmadita
fuente
¿sabe si xmove tiene otro nombre en SuSE Linux?
Nathan Fellman el
@NathanFellman has mirado xpra? Es una aplicación más reciente pero herramienta similar en.wikipedia.org/wiki/Xpra y software.opensuse.org/package/xpra .
DDay
No tengo mucho control sobre esto, ya que trabajo en una gran corporación donde TI elige las herramientas de acceso remoto
Nathan Fellman
0

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

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

BlaM
fuente
la pregunta es estrictamente una pregunta de Linux, esta respuesta de Windows no se aplica aquí. En Windows, VNC es solo un monitor, pero en Linux fue PRIMERO un escritorio virtual y solo más tarde algunas versiones agregaron soporte 'display 0' (es decir, monitor). VNC Scaling es una experiencia de usuario bastante pobre.
nhed
0

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 Similars SO

inukaze
fuente
-3

Creo que eso depende de su administrador de ventanas.

Soy un usuario de Windows, por lo que esto podría ser una suposición equivocada, pero: ¿No hay algo llamado X-Server que se ejecuta en máquinas Linux, al menos en las que podrían ser objetivos interesantes para VNC, con el que puede conectarse " Clientes X "?

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

Prueba X-Server en Wikipedia, que podría darte una visión general aproximada.

BlaM
fuente
la idea es buena y se puede hacer usando un túnel ssh y un servidor x local. Tiene el servidor x en su máquina y le da acceso a los clientes remotos a su servidor x, que representará la interfaz gráfica de usuario de las aplicaciones remotas en su pantalla.
andho
@andho no, esto no es lo que el cartel solicitó en absoluto: el problema aquí es que perderías los widnows cuando perdieras la conectividad. La apertura de ventanas sobre el túnel solo es útil para aplicaciones a corto plazo, no si desea llevar su escritorio (y todas las aplicaciones abiertas dentro) de un cliente a otro ...
nhed
@nhed, no sé si esto es práctico en absoluto, pero es una idea. En cuanto a las aplicaciones a largo plazo, ¿tal vez se pueda usar el programa 'pantalla'?
andho
@andho screen es increíble, para aplicaciones de solo texto ... el OP estaba preguntando acerca de las aplicaciones X ... y llegué a este rincón de la web porque estaba buscando lo mismo y parece que algo como xranr o xmove en las cosas del armario (xrandr es una opción más limpia)
nhed
@nhed, sí, este es un problema que tengo también. Simplemente lanzando esa idea para que alguien más experimentado pueda ponerla en práctica, sin que tenga que probar si fue posible.
andho