De resolutie van een VNC-sessie in linux wijzigen

Ik gebruik VNC om verbinding te maken met een Linux-werkstation op het werk. Op het werk heb ik een 20″ monitor die draait op 1600×1200, terwijl ik thuis mijn laptop gebruik met een resolutie van 1440×900.
Als ik de vncserver op 1440×900 zet, mis ik veel ruimte op mijn monitor, terwijl als ik hem instel op 1600×1200 hij niet op het scherm van de laptop past en ik er de hele tijd doorheen moet scrollen.

Is er een goede manier om het formaat van een VNC-sessie on-the-fly te wijzigen?

Mijn VNC-server is RealVNC E4.x (ik weet de exacte versie niet meer) die draait op SuSE64.


Antwoord 1, autoriteit 100%

Real VNC-server 4.4 bevat ondersteuning voor Xrandr, waarmee het formaat van de VNC kan worden gewijzigd. Start de server met:

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

Verklein vervolgens met:

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

Antwoord 2, autoriteit 41%

Ontdek dat de vnc4server (4.1.1) die bij Ubuntu (10.04) wordt geleverd, is gepatcht om ook ondersteuning te bieden voor het on-the-fly wijzigen van de resolutie via xrandr. Helaas was de functie moeilijk te vinden omdat deze niet is gedocumenteerd. Dus hier is het…

Start de server met meerdere ‘geometry’-instanties, zoals:

vnc4server -geometry 1280x1024 -geometry 800x600

Vanaf een terminal in een vncviewer (met: ‘dymanic desktop resizing toestaan’ ingeschakeld) gebruik xrandr om de beschikbare modi te bekijken:

xrandr

om de resolutie te wijzigen, gebruik bijvoorbeeld:

xrandr -s 800x600

Dat is het.


Antwoord 3, autoriteit 18%

Ik gebruik TigerVNCop mijn Linux-server, die basisondersteuning voor randrheeft.
Ik start gewoon vncserver zonder enige -randr of meerdere -geometry-opties.

Als ik xrandr in een terminal uitvoer, worden alle beschikbare schermresoluties weergegeven:

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

Ik kan dan gemakkelijk overschakelen naar een andere resolutie (bijvoorbeeld overschakelen naar 1360×768):

bash> xrandr -s 5

Ik gebruik de TightVnc-viewer als client en deze past zich automatisch aan de nieuwe resolutie aan.


Antwoord 4, autoriteit 15%

Ik denk dat je het beste de VNC-server met een andere geometrie op een andere poort kunt draaien. Ik zou het proberen op basis van de man-pagina

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

Dan kun je van je werk verbinding maken met de ene poort en van thuis naar de andere.

Bewerken: gebruik vervolgens xmove om vensters tussen de twee x-servers te verplaatsen.


Antwoord 5, autoriteit 14%

Aangezien deze vraag als eerste op Google komt, dacht ik dat ik een oplossing zou delen met TigerVNC, wat tegenwoordig de standaard is.

xrandrmaakt het echter mogelijk om de weergavemodi (ook wel resoluties genoemd) te selecteren
omdat modelines hard zijn
gecodeerd

elk extra model zoals “2560×1600” of “1600×900” zou moeten
worden toegevoegd aan de
code
. l
denk dat de ontwikkelaars die de code hebben geschreven veel slimmer en moeilijker zijn
gecodeerde lijst is slechts een voorbeeld van waarden. Het leidt tot de conclusie dat
er moet een manier zijn om aangepaste modelines toe te voegen en man xrandrbevestigt
het.

Met die achtergrond als het doel is om een VNC-sessie tussen twee te delen
computers met de bovenstaande resoluties en ervan uitgaande dat de VNC-server is
de computer met de resolutie van “1600×900”:

  1. Start een VNC-sessie met een geometrie die overeenkomt met de fysieke weergave:

    $ vncserver -geometry 1600x900 :1
    
  2. Op de “2560×1600” computer start de VNC-viewer (ik heb liever
    Remmina) en maak verbinding met de externe VNC
    sessie:

    host:5901
    
  3. Eenmaal binnen de VNC-sessie start u een terminalvenster.

  4. Bevestig dat de nieuwe geometrie beschikbaar is in de VNC-sessie:

    $ 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  
    

    en je zult merken dat het scherm vrij klein is.

  5. Laat de modeline zien (zie xrandr artikel in ArchLinux wiki) voor
    de “2560×1600” resolutie:

    $ 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
    

    of, als de monitor oud is, de GTF-timings ophalen:

    $ 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. Voeg de nieuwe modeline toe aan de huidige VNC-sessie:

    $ xrandr --newmode "2560x1600_60.00"  348.16  2560 2752 3032 3504  1600 1601 1604 1656 -HSync +Vsync
    
  7. Zoek in de bovenstaande xrandr-uitvoer naar de weergavenaam op de tweede
    regel:

    VNC-0 connected 1600x900+0+0 0mm x 0mm
    
  8. Bind de nieuwe modeline aan de huidige virtuele VNC-monitor:

    $ xrandr --addmode VNC-0 "2560x1600_60.00"
    
  9. Gebruik het:

    $ xrandr -s "2560x1600_60.00"
    

Antwoord 6, autoriteit 12%

Interessant is dat niemand hierop heeft gereageerd. In TigerVNC, wanneer u bent ingelogd op de sessie. Ga naar System > Preference > Displayin de bovenste menubalk (ik gebruikte Cent OS als mijn externe server). Klik op de resolutie drop-down, er zijn verschillende instellingen beschikbaar, waaronder 1080p. Selecteer degene die je leuk vindt. Het zal on-the-fly veranderen.

Zorg ervoor dat u de nieuwe instelling toepast wanneer een dialoogvenster wordt gevraagd. Anders keert het terug naar de vorige instelling, net als in Windows


Antwoord 7, autoriteit 6%

Jongens, dit is heel eenvoudig.

log in via sshin je pi

uitvoeren

vncserver -geometry 1200x1600

Hiermee wordt een nieuwe sessie gegenereerd :1

verbind met uw vnc-client op ipaddress:1

Dat is het.


Antwoord 8, autoriteit 4%

Toevoegen aan Nathan’s (geaccepteerde) antwoord:

Ik wilde door de lijst met resoluties bladeren, maar zag er niets voor:

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

Het krijgt de huidige index, gaat naar de volgende en keert terug naar 0 bij fout (d.w.z. einde)

BEWERKEN

Aangepast om overeen te komen met een latere versie van xrandr (“*” staat aan het einde van de regel en geen leidende resolutie-ID).

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

Antwoord 9, autoriteit 2%

Oplossing van @omiday werkte voor mij in Xvnc TigerVNC 1.1.0, dus ik heb het gecondenseerd in een enkele bash-functie vncsize x y. Gebruik het als volgt: vncsize 1400 1000. Het werkt voor elke VNC-uitgangsnaam, “default” of “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 "$screen" "$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
}

Antwoord 10

Misschien het meest onwetende antwoord dat ik heb gepost, maar hier komt het: gebruik TigerVNC-client/viewer en vink 'Resize remote session to local window'aan op het tabblad Scherm met opties.

Ik weet niet wat de $%#@ TigerVNC-client externe vncserver of xrandr of Xvnc of gnome of … vertelt, maar het formaat wordt aangepast wanneer ik het TigerVNC Client-venster verander.

Mijn instellingen:

  • Tiger VNC-server draait op CentOS 6. Hosting van GNOME-bureaublad. (Werkt ook met RHEL 6.6)
  • Windows een versie met Tiger VNC Client.

Hiermee verandert de resolutie om in de grootte van het clientvenster te passen, wat het ook is, en het is niet zooming, het is een daadwerkelijke resolutieverandering (ik kan de nieuwe resolutie zien in xrandr-uitvoer).

Ik heb alles gedaan wat ik kon om een nieuwe resolutie aan de xrandr toe te voegen, maar het mocht niet baten, ik krijg altijd de 'xrandr: Failed to get size of gamma for output default'-fout.

Versies waarmee het op dit moment voor mij werkt (hoewel ik in het verleden geen problemen heb gehad met ENIGE versies, installeer ik gewoon de nieuwste met behulp van yum install gnome-* tigervnc-serveren werkt prima):

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.

Antwoord 11

Ik ben niet zeker van Linux, maar onder Windows zal tightvnc resolutieveranderingen op de server detecteren en aanpassen.

Dus je zou in staat moeten zijn om VNC op het werkstation te zetten, het equivalent te doen van rechtsklikken op het bureaublad, eigenschappen, de resolutie instellen op wat dan ook, en je client vnc-venster zelf dienovereenkomstig laten aanpassen.


Antwoord 12

Aan de andere kant, als er een manier is om
een bestaand venster van een verplaatsen
X-server naar een andere, dat zou kunnen oplossen
het probleem.

Ik denk dat je xmovekunt gebruiken om vensters tussen twee afzonderlijke x-servers te verplaatsen . Dus als het werkt, zou dit je in ieder geval een manier moeten geven om te doen wat je wilt, zij het niet zo gemakkelijk als het veranderen van de resolutie.


Antwoord 13

Voor zover ik weet is er geen manier om de resolutie van de client te veranderen door alleen VNC te gebruiken, aangezien het gewoon een “monitor mirroring”-toepassing is.

TightVNCechter (wat een VNC-client en servertoepassing is) kan het formaat van het scherm aan de clientzijde wijzigen , dwz alles een beetje kleiner maken (vergelijkbaar met technieken voor het vergroten of verkleinen van afbeeldingen in grafische programma’s). Dat zou moeten werken als je niet te kleine lettergroottes gebruikt. VNC zou in theorie compatibel moeten zijn tussen verschillende VNC-toepassingen.


Antwoord 14

Ik heb een simpel idee, zoiets als dit:

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

Nou, ik heb een betere oplossing nodig voor alle weergaveapparaten onder Linux en soortgelijke S.O


Antwoord 15

Ik denk dat dat afhangt van je windowmanager.

Ik ben een Windows-gebruiker, dus dit kan een verkeerde gok zijn, maar: Is er niet iets dat X-Serverdraaiend op linux-machines – tenminste op machines die interessante doelen kunnen zijn voor VNC – waarmee u verbinding kunt maken met “X-Clients”?

VNC neemt gewoon alles wat op het scherm staat en “tunnelt het door je netwerk”. Als ik me niet helemaal vergis, zou het “X”-protocol je de kans moeten geven om de desktopresolutie van je klant te gebruiken.

Probeer X-Serverop Wikipedia eens, dat kan je een overzicht.

Other episodes