Modification de la résolution d’une session VNC sous Linux [fermé]

153

J'utilise VNC pour me connecter à un poste de travail Linux au travail. Au travail, j'ai un moniteur 20 "qui tourne à 1600x1200, tandis qu'à la maison j'utilise mon ordinateur portable avec sa résolution de 1440x900. Si je règle le vncserver pour qu'il fonctionne à 1440x900, je manque beaucoup d'espace sur mon moniteur, alors que si je réglez-le pour qu'il fonctionne à 1600x1200, il ne tient pas sur l'écran de l'ordinateur portable, et je dois le faire défiler tout le temps.

Existe-t-il un bon moyen de redimensionner une session VNC à la volée?

Mon serveur VNC est RealVNC E4.x (je ne me souviens pas de la version exacte) fonctionnant sur SuSE64.

Nathan Fellman
la source
Je voudrais mentionner quelque chose que j'ai découvert récemment mais je n'ai pas encore pu le tester. Il existe un nouveau programme appelé FreeNX qui a été conçu pour remplacer VNC. Voici le lien: freenx.berlios.de
andho
@andho - Ce lien semble être rompu.
ArtOfWarfare
@ArtOfWarfare espère que cela aidera help.ubuntu.com/community/FreeNX . Devrait être assez stable maintenant. Je pense que je vais bientôt essayer, si le temps le permet.
andho

Réponses:

159

Le vrai serveur VNC 4.4 inclut la prise en charge de Xrandr, qui permet de redimensionner le VNC. Démarrez le serveur avec:

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

Puis redimensionnez avec:

xrandr -s 1600x1200
xrandr -s 1440x900
xrandr -s 1024x768
Nathan Fellman
la source
1
Merci Nathan, même les gens de realvnc ne semblent pas mettre l'accent sur la fonction xrandr ... Voir aussi ma fonction bash ci-dessous pour permettre de parcourir les résolutions randr.
nhed le
7
Vous pouvez trouver pratique de mettre toutes ces options dans un .vnc/configfichier. Par exemple, la première ligne de ma configuration est:-randr 800x600,1024x768,1280x800,1280x960,1280x1024,1680x1050,1920x1080,3360x1050,1024x700,1200x740,1600x1000,3200x1000
bfroehle
@Nathan J'ai essayé d'utiliser la solution que vous avez donnée mais sans succès. pouvez-vous essayer de répondre à ma question?
Geek
3
Je me demande si cela fonctionne avec tightvncserver?
Dimitry K
4
@DimitryK J'ai eu tightvncserver et ne fonctionne pas. Je l'ai purgé et installé du vrai VNC. Je le recommande. Toutes les résolutions de paysage: 320x240,480x320,482x320,560x360,576x360,640x480,640x482,648x486,720x480,720x486,720x540,720x576,768x576,800x480,800x600,1024x600,1024x768,1280x766x1024x600,1024x768,1280x766x1080x1400x1268 1600x900,1600x1024,1600x1200,1680x1050,1920x1080,1920x1200,2048x1024,2048x1152,2048x1536,2560x1080,2560x1440,2560x1600,2560x2048,3072x1536,3072x1728,3840x2160,4096x23072x1728,3840x2160,4096x220484,819840x2160,4096x20482804,819840x2160,4096x220482804,8194406
barwnikk
68

Nous avons découvert que le vnc4server (4.1.1) livré avec Ubuntu (10.04) est corrigé pour prendre également en charge la modification de la résolution à la volée via xrandr. Malheureusement, la fonctionnalité était difficile à trouver car elle n'est pas documentée. Alors voilà ...

Démarrez le serveur avec plusieurs instances de «géométrie», comme:

vnc4server -geometry 1280x1024 -geometry 800x600

À partir d'un terminal dans un vncviewer (avec: 'autoriser le redimensionnement du bureau dymanic' activé), utilisez xrandr pour afficher les modes disponibles:

xrandr

pour changer la résolution, par exemple utilisez:

xrandr -s 800x600

C'est tout.

Tijs
la source
J'ai essayé d'utiliser votre approche également avec celle suggérée par Nathan mais sans succès. Pouvez-vous repérer ce qui manque ici?
Geek
A parfaitement fonctionné. Merci!
Roney Michael
27

Je suis en cours d' exécution TigerVNC sur mon serveur Linux, qui a base randr soutien. Je viens de démarrer vncserver sans aucune option -randr ou multiple -geometry.

Lorsque je lance xrandr dans un terminal, il affiche toutes les résolutions d'écran 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

Je peux alors facilement passer à une autre résolution (par exemple passer en 1360x768):

bash> xrandr -s 5

J'utilise la visionneuse TightVnc comme client et elle s'adapte automatiquement à la nouvelle résolution.

Peter
la source
pour que les gens ne se lancent pas dans des poursuites sauvages, pouvez-vous s'il vous plaît énumérer à la fois la version de TigerVnc et votre distribution de serveur Linux + version? Merci
nhed le
Je peux confirmer que cela fonctionne plutôt bien avec TiverVnc 1.1.0 (serveur Linux, client Linux)
Benedikt Waldvogel
1
J'utilise vncviewer et chaque fois que j'essaye de changer la résolution, la fenêtre se ferme.
AWE
puis-je vous demander quelle est la version de xrandr. Mine: programme xrandr version 1.3.5 Le serveur rapporte que la version 1.3 de RandR semble complètement différente, par exemple ne pas avoir de première colonne
Wakan Tanka
Juste pour ajouter que cela fonctionne également avec Real VNC en tant que client. Testé pour la version 6.0.3
Vivek VK
25

Je pense que votre mieux est d'exécuter le serveur VNC avec une géométrie différente sur un port différent. J'essaierais en me basant sur la page de manuel

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

Ensuite, vous pouvez vous connecter du bureau à un port et de la maison à un autre.

Edit: Utilisez ensuite xmove pour déplacer les fenêtres entre les deux serveurs x.

Tapoter
la source
3
@Pat, le problème avec votre solution est que je ne peux pas facilement déplacer une fenêtre d'une session VNC à une autre. Si je suis au milieu d'un débogage lorsque je dois partir, je veux pouvoir reprendre là où je m'étais arrêté (peut-être avec les fenêtres déplacées un peu à cause du redimensionnement). Si j'ai deux sessions distinctes, je ne pourrai pas continuer comme avant, car je devrai fermer les fenêtres d'une session et les rouvrir dans une autre. D'un autre côté, s'il existe un moyen de déplacer une fenêtre existante d'un serveur X à un autre, cela pourrait résoudre le problème.
Nathan Fellman
1
xmove n'est pas dans le référentiel Ubuntu actuel; xpra is, qui fera la même chose (agira comme un proxy X).
Sam Hartsfield
20

Comme cette question se pose en premier sur Google, j'ai pensé partager une solution utilisant TigerVNC, qui est la valeur par défaut de nos jours.

xrandrpermet de sélectionner les modes d'affichage (ou résolutions) cependant en raison des modelines étant codées en dur, toute modeline supplémentaire telle que "2560x1600" ou "1600x900" devrait être ajoutée au code . Je pense que les développeurs qui ont écrit le code sont beaucoup plus intelligents et que la liste codée en dur n'est qu'un échantillon de valeurs. Cela conduit à la conclusion qu'il doit y avoir un moyen d'ajouter des modèles personnalisés et le man xrandrconfirme.

Avec cet arrière-plan si l'objectif est de partager une session VNC entre deux ordinateurs avec les résolutions ci-dessus et en supposant que le serveur VNC est l'ordinateur avec la résolution de "1600x900":

  1. Démarrez une session VNC avec une géométrie correspondant à l'affichage physique:

    $ vncserver -geometry 1600x900 :1
    
  2. Sur l'ordinateur "2560x1600", démarrez le visualiseur VNC (je préfère Remmina) et connectez-vous à la session VNC distante:

    host:5901
    
  3. Une fois dans la session VNC, démarrez une fenêtre de terminal.

  4. Confirmez que la nouvelle géométrie est disponible dans la session 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  
    

    et vous remarquerez que l'écran est assez petit.

  5. Listez la modeline (voir l'article xrandr dans le wiki ArchLinux) pour la résolution "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
    

    ou si le moniteur est vieux, obtenez les horaires 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. Ajoutez la nouvelle modeline à la session VNC actuelle:

    $ xrandr --newmode "2560x1600_60.00"  348.16  2560 2752 3032 3504  1600 1601 1604 1656 -HSync +Vsync
    
  7. Dans la xrandrsortie ci-dessus, recherchez le nom d'affichage sur la deuxième ligne:

    VNC-0 connected 1600x900+0+0 0mm x 0mm
    
  8. Liez la nouvelle modeline au moniteur virtuel VNC actuel:

    $ xrandr --addmode VNC-0 "2560x1600_60.00"
    
  9. Utilise le:

    $ xrandr -s "2560x1600_60.00"
    
dimanche
la source
utilisé pour créer un espace de travail plus grand avec tigervnc et mwm, cela a fonctionné pour augmenter la taille de l'écran, mais l'espace de travail est limité à la taille initiale utilisée par vnc.
user2019716
Cela est dû à mwm, l'espace complet est exploité une fois que mwm est redémarré
user2019716
Génial, merci beaucoup pour la recette, ça a vraiment aidé.
Adrian Rosoga
Cela m'a fait gagner beaucoup de temps, merci!
Ben Davis
17

Fait intéressant, personne n'a répondu à cela. Dans TigerVNC, lorsque vous êtes connecté à la session. Allez dans System > Preference > Displayla barre de menu du haut (j'utilisais Cent OS comme serveur distant). Cliquez sur la liste déroulante de résolution, il existe différents paramètres disponibles, y compris 1080p. Sélectionnez celui que vous aimez. Cela changera à la volée.

entrez la description de l'image ici

Assurez-vous d'appliquer le nouveau paramètre lorsqu'une boîte de dialogue s'affiche. Sinon, il reviendra au paramètre précédent comme dans Windows

Hammad Khan
la source
1
S'agit-il d'un paramètre de TigerVNC, de CentOS ou du gestionnaire de fenêtres?
Nathan Fellman
Ceci est un paramètre dans CentOS. Vous pouvez y accéder à partir de 'TigerVNC Viewer' lorsque vous êtes connecté.
Hammad Khan
2
this safe my life
Yu Jiaao
9

Les gars, c'est vraiment simple.

connectez-vous via sshdans votre pi

exécuter

vncserver -geometry 1200x1600

Cela générera une nouvelle session :1

connectez-vous avec votre client vnc à ipaddress:1

C'est tout.

Will Berger
la source
7
C'est une mauvaise réponse, car cela ne changera pas la résolution d'une session existante, mais en créera simplement une nouvelle.
Nathan Fellman
6

Ajout à la réponse (acceptée) de Nathan:

Je voulais parcourir la liste des résolutions mais je n'ai rien vu à ce sujet:

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

Il obtient l'index actuel, passe au suivant et revient à 0 en cas d'erreur (c'est-à-dire à la fin)


ÉDITER

Modifié pour correspondre à une version ultérieure de xrandr ("*" est en fin de ligne et aucun identificateur de résolution principal).

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

La solution de @omiday a fonctionné pour moi dans Xvnc TigerVNC 1.1.0, je l'ai donc condensée en une seule fonction bash vncsize xy . Utilisez-le comme ceci: vncsize 1400 1000 . Cela fonctionne pour n'importe quel nom de sortie VNC, "default" ou "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
}
Nicolas Sushkin
la source
2

Peut-être la réponse la plus ignorante que j'ai publiée, mais voici: Utilisez le client / visualiseur TigerVNC et vérifiez 'Resize remote session to local window'sous l'onglet Écran des options.

Je ne sais pas ce que le client $% # @ TigerVNC dit à distance vncserver ou xrandr ou Xvnc ou gnome ou ... mais il se redimensionne lorsque je change la fenêtre du client TigerVNC.

Ma configuration:

  • Tiger VNC Server fonctionnant sous CentOS 6. Hébergement du bureau GNOME. (Fonctionne aussi avec RHEL 6.6)
  • Windows une version avec Tiger VNC Client.

Avec cela, la résolution change pour s'adapter à la taille de la fenêtre du client, peu importe ce qu'elle est, et ce n'est pas le cas zooming, c'est le changement de résolution réel (je peux voir la nouvelle résolution dans la sortie xrandr).

J'ai essayé tout ce que j'ai pu pour ajouter une nouvelle résolution au xrandr, mais en vain, je me retrouve toujours avec une 'xrandr: Failed to get size of gamma for output default'erreur.

Versions avec lesquelles cela fonctionne pour moi en ce moment (bien que je n'ai eu aucun problème avec AUCUNE version dans le passé, je viens d'installer la dernière utilisation yum install gnome-* tigervnc-serveret fonctionne 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
la source
Quelles versions de TigerVNC utilisez-vous pour votre client / serveur? J'ai essayé cela aujourd'hui et il ne se redimensionne pas automatiquement pour moi. Je suis sur RHEL 6.2 exécutant Xvnc TigerVNC 1.1.0 pour le serveur et le client vncviewer-1.4.3.exe
cdwilson
@cdwilson J'espère que vous avez essayé avec le client en mode plein écran. Versions ajoutées. HTH
Kashyap
s'avère que 1.1.0 ne jouait pas bien avec tout ce qu'ils exécutaient sur nos machines de travail. L'exécution de la dernière version 1.4.3 de mon $HOMErépertoire fonctionne comme prévu github.com/TigerVNC/tigervnc/issues/155
cdwilson
Confirmé: openSuse 15.1, GDM, KDE Plasma, client TigerVNC 1.9.0. La résolution de mon bureau distant suit quelle que soit la taille de la fenêtre du client, toute résolution ad-hoc folle, tout format d'image; dans GDM ou KDE. Fonctionne comme un charme, prêt à l'emploi, pas besoin de définir quoi que ce soit sur le client ou le serveur.
Espinosa le
1

Je ne suis pas sûr de Linux, mais sous Windows, tightvnc détectera et s'adaptera aux changements de résolution sur le serveur.

Vous devriez donc pouvoir VNC dans le poste de travail, faire l'équivalent d'un clic droit sur le bureau, les propriétés, définir la résolution sur n'importe quoi et faire redimensionner la fenêtre de votre client en conséquence.

Blorgbeard est sorti
la source
1

D'un autre côté, s'il existe un moyen de déplacer une fenêtre existante d'un serveur X à un autre, cela pourrait résoudre le problème.

Je pense que vous pouvez utiliser xmove pour déplacer des fenêtres entre deux serveurs x séparés. Donc, si cela fonctionne, cela devrait au moins vous donner un moyen de faire ce que vous voulez, mais pas aussi facilement que de changer la résolution.

Tapoter
la source
savez-vous si xmove porte un autre nom dans SuSE Linux?
Nathan Fellman
@NathanFellman avez-vous regardé xpra? C'est une application plus récente mais un outil similaire en.wikipedia.org/wiki/Xpra et software.opensuse.org/package/xpra .
JJay
Je n'ai pas beaucoup de contrôle là-dessus, car je travaille dans une grande entreprise où le service informatique choisit les outils d'accès à distance
Nathan Fellman
0

Autant que je sache, il n'y a aucun moyen de changer la résolution du client en utilisant simplement VNC, car il s'agit simplement d'une application de "mise en miroir de moniteur".

Cependant, TightVNC (qui est une application client et serveur VNC) peut redimensionner l'écran côté client, c'est-à-dire rendre tout un peu plus petit (similaire aux techniques de redimensionnement d'image dans les programmes graphiques). Cela devrait fonctionner si vous n'utilisez pas de polices trop petites. VNC devrait théoriquement être compatible entre différentes applications VNC.

BlaM
la source
la question est strictement une question Linux, cette réponse de Windows ne s'applique pas ici. Sous Windows, VNC est juste un moniteur, mais sous Linux, c'était D'ABORD un bureau virtuel et seulement plus tard, certaines versions ont ajouté le support «display 0» (c'est-à-dire le moniteur). VNC Scaling est une expérience utilisateur assez médiocre.
nhed le
0

J'ai une idée simple, quelque chose comme ça:

#!/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

Eh bien, j'ai besoin d'une meilleure solution pour tous les périphériques d'affichage sous Linux et Similars SO

inukaze
la source
-3

Je pense que cela dépend de votre gestionnaire de fenêtres.

Je suis un utilisateur de Windows, donc cela peut être une mauvaise estimation, mais: N'y a-t-il pas quelque chose appelé X-Server fonctionnant sur des machines Linux - du moins sur celles qui pourraient être des cibles intéressantes pour VNC - avec lesquelles vous pouvez vous connecter " Clients X "?

VNC prend juste tout ce qui est à l'écran et le "tunnelise à travers votre réseau". Si je ne me trompe pas totalement, le protocole "X" devrait vous donner la possibilité d'utiliser la résolution de bureau de votre client.

Essayez X-Server sur Wikipedia, cela pourrait vous donner un aperçu approximatif.

BlaM
la source
l'idée est bonne et peut être réalisée en utilisant un tunnel ssh et un serveur x local. Vous avez le serveur x sur votre machine et vous donnez aux clients distants l'accès à votre serveur x qui rendra l'interface graphique des applications distantes sur votre écran.
andho
@andho non ce n'est pas du tout ce que l'affiche a demandé - le problème ici est que vous perdriez les veuves si vous perdiez la connectivité. Les fenêtres qui s'ouvrent au-dessus du tunnel ne sont utiles que pour les applications à court terme, pas si vous souhaitez
transférer
@nhed, je ne sais pas si c'est même pratique du tout, mais c'est une idée. En ce qui concerne les applications à long terme, peut-être que le programme «écran» peut être utilisé?
andho
L'écran @andho est génial, pour les applications texte uniquement ... l'OP posait des questions sur les applications X ... et je suis arrivé à ce coin du Web parce que je cherchais la même chose et il semble que quelque chose comme xranr ou xmove at the placet things (xrandr étant une option plus propre)
nhed
@nhed, oui c'est un problème que j'ai aussi. Il suffit de lancer cette idée pour que quelqu'un de plus expérimenté puisse la supprimer, sans que je doive tester si c'était possible du tout.
andho le