Changer la résolution d'une session VNC sous Linux [fermé]
Question
J'utilise VNC pour me connecter à un poste de travail Linux au travail.Au travail, j'ai un moniteur 20" qui fonctionne en 1600x1200, tandis qu'à la maison, j'utilise mon ordinateur portable avec une résolution de 1440x900.Si je configure le serveur vnc pour qu'il fonctionne à 1 440 x 900, je manque beaucoup d'espace sur mon moniteur, tandis que si je le configure pour qu'il fonctionne à 1 600 x 1 200, 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.
La solution
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
Autres conseils
J'ai découvert que le vnc4server (4.1.1) fourni avec Ubuntu (10.04) est corrigé pour prendre également en charge la modification de la résolution à la volée via xrandr.Malheureusement, cette 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
Depuis un terminal dans un vncviewer (avec :'autoriser le redimensionnement dynamique du bureau' activé), utilisez xrandr pour afficher les modes disponibles :
xrandr
pour changer le résultat, utilisez par exemple :
xrandr -s 800x600
C'est ça.
je suis entrain de courir TigreVNC sur mon serveur Linux, qui a des fonctionnalités de base Randr soutien.Je viens de démarrer vncserver sans aucune option -randr ou plusieurs -geometry.
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 ex.passer à 1360x768) :
bash> xrandr -s 5
J'utilise la visionneuse TightVnc comme client et elle s'adapte automatiquement à la nouvelle résolution.
Je pense que le 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 page de manuel
$vncserver :0 -geometry 1600x1200 $vncserver :1 -geometry 1440x900
Vous pouvez ensuite vous connecter du travail à un port et de la maison à un autre.
Modifier:Utilisez ensuite xmove pour déplacer les fenêtres entre les deux serveurs X.
Curieusement, personne n'a répondu à cette question.Dans TigerVNC, lorsque vous êtes connecté à la session.Aller à System > Preference > Display
dans la barre de menu supérieure (j'utilisais Cent OS comme serveur distant).Cliquez sur le menu déroulant de résolution, différents paramètres sont disponibles, dont 1080p.Sélectionnez celui que vous aimez.Cela changera à la volée.
Assurez-vous d'appliquer le nouveau paramètre lorsqu'une boîte de dialogue vous est demandée.Sinon, il reviendra au paramètre précédent, comme sous Windows.
Comme cette question apparaît en premier sur Google, j'ai pensé partager une solution utilisant TigerVNC, qui est la valeur par défaut de nos jours.
xrandr
permet de sélectionner les modes d'affichage (aka résolutions) cependant en raison de la modélines codé en durToute modèle supplémentaire telle que "2560x1600" ou "1600x900" devrait être ajouté dans le 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élines personnalisées et man xrandr
le confirme.
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":
Démarrez une session VNC avec une géométrie correspondant à l'affichage physique :
$ vncserver -geometry 1600x900 :1
Sur l'ordinateur "2560x1600", démarrez la visionneuse VNC (je préfère Remmina) et connectez-vous à la session VNC distante:
host:5901
Une fois dans la session VNC, démarrez une fenêtre de terminal.
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.
Énumérez la modéline (voir l'article Xrandr dans Archlinux Wiki) 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
Ajoutez la nouvelle ligne de mode à la session VNC actuelle :
$ xrandr --newmode "2560x1600_60.00" 348.16 2560 2752 3032 3504 1600 1601 1604 1656 -HSync +Vsync
Au dessus
xrandr
Sortie Recherchez le nom d'affichage sur la deuxième ligne:VNC-0 connected 1600x900+0+0 0mm x 0mm
Liez la nouvelle ligne de mode au moniteur virtuel VNC actuel :
$ xrandr --addmode VNC-0 "2560x1600_60.00"
Utilise le:
$ xrandr -s "2560x1600_60.00"
Les gars, c'est vraiment simple.
connectez-vous via ssh
dans ton pi
exécuter
vncserver -geometry 1200x1600
Cela générera une nouvelle session :1
connectez-vous avec votre client vnc à ipaddress:1
C'est ça.
Ajout à 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
}
Il obtient l'index actuel, passe au suivant et revient à 0 en cas d'erreur (c'est-à-direfin)
MODIFIER
Modifié pour correspondre à une version ultérieure de xrandr ("*" est en fin de ligne et sans identifiant de résolution en tête).
function vncNextRes()
{
xrandr -s $(($(xrandr 2>/dev/null | grep -n '\* *$'| sed 's@:.*@@')-2)) || \
xrandr -s 0
}
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 connecter VNC au 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 quelle valeur et demander à la fenêtre vnc de votre client de se redimensionner en conséquence.
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 tu peux utiliser xmove pour déplacer les fenêtres entre deux serveurs X distincts.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.
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 à vncserver distant ou xrandr ou Xvnc ou gnome ou...mais il se redimensionne lorsque je change la fenêtre du client TigerVNC.
Ma configuration :
- Serveur Tiger VNC fonctionnant sur CentOS 6.Hébergement du bureau GNOME.(Fonctionne également 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 client, quelle qu'elle soit, et ce n'est pas le cas. zooming
, c'est un 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 'xrandr: Failed to get size of gamma for output default'
erreur.
Versions avec lesquelles cela fonctionne pour moi en ce moment (même si je n'ai eu aucun problème avec AUCUNE version dans le passé, j'installe simplement la dernière en utilisant yum install gnome-* tigervnc-server
et ça marche 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 solution de @omiday a fonctionné pour moi dans Xvnc TigerVNC 1.1.0, je l'ai donc condensée en une seule fonction bash taille vnc x y.Utilisez-le comme ceci : taille vnc 1400 1000.Cela suppose que xrandr signale le nom de la sortie VNC comme défaut.
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
}
Pour autant que je sache, il n'y a aucun moyen de modifier la résolution du client simplement en utilisant VNC, car il s'agit simplement d'une application de « mise en miroir de moniteurs ».
SerréVNC cependant (qui est une application client et serveur VNC) peut redimensionner l'écran côté client, c'est-à-direrendre tout un peu plus petit (similaire aux techniques de redimensionnement d'image dans les programmes graphiques).Cela devrait fonctionner si vous n'utilisez pas des tailles de police trop petites.VNC devrait théoriquement être compatible entre différentes applications VNC.
J'ai une idée simple, quelque chose comme ceci :
#!/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 similaires S.O.
Je pense que cela dépend de votre gestionnaire de fenêtres.
Je suis un utilisateur Windows, donc c'est peut-être une mauvaise supposition, mais :N'y a-t-il pas quelque chose qui s'appelle Serveur X fonctionnant sur des machines Linux - du moins sur celles qui pourraient être des cibles intéressantes pour VNC - auxquelles vous pouvez vous connecter avec des "X-Clients" ?
VNC prend simplement tout ce qui est à l'écran et le "transmet à travers votre réseau".Si je ne me trompe pas totalement, le protocole "X" devrait vous donner la possibilité d'utiliser la résolution du bureau de votre client.
Donner Serveur X sur Wikipédia, essayez-le, cela pourrait vous donner un aperçu approximatif.