172 votes

Changer la résolution d'une session VNC sous linux

J'utilise VNC pour me connecter à une station de travail Linux au travail. Au travail, j'ai un moniteur de 20 pouces qui fonctionne en 1600x1200, tandis qu'à la maison, j'utilise mon ordinateur portable dont la résolution est de 1440x900. Si je configure le serveur VNC pour qu'il fonctionne en 1440x900, je perds beaucoup d'espace sur mon écran, alors que si je le configure pour qu'il fonctionne en 1600x1200, il ne tient pas sur l'écran de l'ordinateur portable et je dois le faire défiler en permanence.

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.

0 votes

Je voudrais mentionner quelque chose que j'ai découvert récemment mais que je n'ai pas encore pu tester. Il existe un nouveau programme appelé FreeNX qui se veut un remplacement de VNC. Voici le lien : freenx.berlios.de

0 votes

@andho - Ce lien semble être cassé.

0 votes

@ArtOfWarfare J'espère que cela vous aidera. help.ubuntu.com/community/FreeNX . Il devrait être assez stable maintenant. Je pense que je vais l'essayer bientôt, si j'ai le temps.

177voto

Nathan Fellman Points 31310

Real VNC server 4.4 inclut le support de Xrandr, qui permet de redimensionner le VNC. Démarrez le serveur avec :

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

Puis redimensionner avec :

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

1 votes

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 qui permet de faire défiler les résolutions randr.

10 votes

Vous pouvez trouver pratique de mettre toutes ces options dans une .vnc/config fichier. Par exemple, la première ligne de ma configuration est : -randr 800x600,1024x768,1280x800,1280x960,1280x1024,1680x1050,1920x‌​1080,3360x1050,1024x‌​700,1200x740,1600x10‌​00,3200x1000

0 votes

@Nathan J'ai essayé d'utiliser la solution que vous avez donnée mais sans succès. Pouvez-vous s'il vous plaît essayer de me répondre ? cette question que je vous pose ?

70voto

Tijs Points 331

J'ai découvert que le vnc4server (4.1.1) fourni avec Ubuntu (10.04) est patché pour prendre en charge le changement de résolution à la volée via xrandr. Malheureusement, cette fonctionnalité est difficile à trouver car elle n'est pas documentée. La voici donc...

Démarrez le serveur avec plusieurs instances de "géométrie", par exemple :

vnc4server -geometry 1280x1024 -geometry 800x600

À partir d'un terminal dans un vncviewer (avec l'option 'allow dymanic desktop resizing' activée), utilisez xrandr pour afficher les modes disponibles :

xrandr

pour changer la résulution, par exemple utiliser :

xrandr -s 800x600

C'est tout.

0 votes

J'ai également essayé d'utiliser votre approche ainsi que celle suggérée par Nathan, mais sans succès. Pouvez-vous identifier ce qui manque ici ?

0 votes

Il a fonctionné parfaitement. Merci !

32voto

Peter Points 135

Je suis en train de courir TigerVNC sur mon serveur Linux, qui a les bases randr support. Je lance simplement vncserver sans aucune option -randr ou -géométrie multiple.

Lorsque j'exécute 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 à 1360x768) :

bash> xrandr -s 5

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

0 votes

Pour que les gens ne se lancent pas dans une course folle, pouvez-vous indiquer la version de TigerVnc ainsi que la distribution et la version de votre serveur linux ? Merci

0 votes

Je peux confirmer qu'il fonctionne très bien avec TiverVnc 1.1.0 (serveur Linux, client Linux).

1 votes

J'utilise vncviewer et chaque fois que j'essaie de changer la résolution, la fenêtre se ferme.

26voto

Pat Points 18943

Je pense que votre meilleure solution 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 le page de manuel

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

Vous pouvez alors vous connecter du travail à un port et de la maison à un autre.

Edit : Utilisez ensuite xmove pour déplacer Windows entre les deux serveurs x.

3 votes

@Pat, le problème avec votre solution est que je ne peux pas déplacer facilement une fenêtre d'une session VNC à une autre. Si je suis au milieu d'un débogage et que je dois partir, je veux pouvoir reprendre là où je me suis arrêté (peut-être avec les fenêtres déplacées un peu en raison du redimensionnement). Si j'ai deux sessions séparées, 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.

1 votes

Xmove n'est pas dans le dépôt actuel d'Ubuntu ; xpra l'est, qui fera la même chose (agir comme un proxy X).

6voto

nhed Points 2155

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

Je voulais parcourir la liste des résolutions mais je n'ai rien vu pour cela :

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

Elle récupère l'index actuel, passe au suivant et revient à 0 en cas d'erreur (c'est-à-dire à la fin).


EDITAR

Modifié pour correspondre à une version ultérieure de xrandr ("*" est en fin de ligne et pas d'identifiant de résolution en tête).

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X