Modifica della risoluzione di una sessione VNC in linux [chiuso]


153

Uso VNC per collegarmi a una workstation Linux al lavoro. Al lavoro ho un monitor da 20 "che funziona a 1600x1200, mentre a casa uso il mio laptop con la sua risoluzione di 1440x900. Se imposto il vncserver per funzionare a 1440x900, perdo molto spazio sul mio monitor, mentre se impostarlo per funzionare a 1600x1200 non si adatta allo schermo del laptop e devo scorrere tutto il tempo.

C'è un buon modo per ridimensionare una sessione VNC al volo?

Il mio server VNC è RealVNC E4.x (non ricordo la versione esatta) in esecuzione su SuSE64.


Vorrei menzionare qualcosa che mi sono imbattuto di recente ma non sono ancora riuscito a provarlo. Esiste un nuovo programma chiamato FreeNX che si è proposto di sostituire VNC. Ecco il link: freenx.berlios.de
andho,

@andho - Quel link sembra essere rotto.
ArtOfWarfare l'

@ArtOfWarfare spero che questo aiuti help.ubuntu.com/community/FreeNX . Ormai dovrebbe essere abbastanza stabile. Penso che ci proverò presto, quando il tempo lo permetterà.
andho,

Risposte:


159

Il vero server VNC 4.4 include il supporto per Xrandr, che consente di ridimensionare il VNC. Avviare il server con:

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

Quindi ridimensiona con:

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

1
Grazie Nathan, anche le persone realvnc non sembrano enfatizzare la funzione xrandr ... Vedi anche la mia funzione bash di seguito per consentire di scorrere le risoluzioni randr.
Nhed

7
Potresti trovare comodo mettere tutte queste opzioni in un .vnc/configfile. Ad esempio, la prima riga della mia configurazione è:-randr 800x600,1024x768,1280x800,1280x960,1280x1024,1680x1050,1920x1080,3360x1050,1024x700,1200x740,1600x1000,3200x1000
bfroehle,

@Nathan Ho provato ad usare la soluzione che hai dato ma senza successo. puoi per favore provare a rispondere a questa mia domanda?
Geek

3
Mi chiedo se funziona tightvncserver?
Dimitry K,

4
@DimitryK Ho avuto tightvncserver e non funziona. L'ho eliminato e ho installato VNC reale. Lo consiglio. Tutte le risoluzioni orizzontali: 320x240,480x320,482x320,560x360,576x360,640x480,640x482,648x486,720x480,720x486,720x540,720x576,768x576,800x480,800x600,1024x600,1024x780,180x2480 1600x900,1600x1024,1600x1200,1680x1050,1920x1080,1920x1200,2048x1024,2048x1152,2048x1536,2560x1080,2560x1440,2560x1600,2560x2048,3072x1536,3072x1728,3840x2160,4096x2048,4096x2304,7680x4320,8192x4096,8192x4608.
Barwnikk,

68

Abbiamo scoperto che vnc4server (4.1.1) fornito con Ubuntu (10.04) è patchato per supportare anche il cambiamento della risoluzione al volo tramite xrandr. Purtroppo la funzione è stata difficile da trovare perché non è documentata. Quindi eccolo qui ...

Avvia il server con più istanze di "geometria", come:

vnc4server -geometry 1280x1024 -geometry 800x600

Da un terminale in un vncviewer (con: "consenti ridimensionamento del desktop dymanic" abilitato) usa xrandr per visualizzare le modalità disponibili:

xrandr

per modificare la risoluzione, ad esempio utilizzare:

xrandr -s 800x600

Questo è tutto.


Ho cercato di usare anche il tuo approccio insieme a quello suggerito da Nathan ma senza successo. Riesci a individuare ciò che manca qui?
Geek

Ha funzionato perfettamente. Grazie!
Roney Michael,

27

Sto eseguendo TigerVNC sul mio server Linux, che ha il supporto randr di base . Ho appena avviato vncserver senza opzioni -randr o multiple -geometry.

Quando eseguo xrandr in un terminale, vengono visualizzate tutte le risoluzioni dello schermo disponibili:

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

Posso quindi passare facilmente a un'altra risoluzione (passare a 1360x768):

bash> xrandr -s 5

Sto usando TightVnc viewer come client e si adatta automaticamente alla nuova risoluzione.


in modo che la gente non vada a caccia di oca selvatica, puoi elencare sia la versione di TigerVnc sia la tua distribuzione + versione del tuo server linux? Grazie
nhed

Posso confermare che funziona abbastanza bene con TiverVnc 1.1.0 (server Linux, client Linux)
Benedikt Waldvogel,

1
Sto usando vncviewer e ogni volta che provo a cambiare la risoluzione la finestra si chiude.
AWE

posso chiederti quale versione di xrandr è questa. Il mio: il programma xrandr versione 1.3.5 riporta che il server RandR versione 1.3 sembra completamente diverso, ad esempio non ha la prima colonna
Wakan Tanka,

Solo per aggiungere che funziona anche con Real VNC come client. Testato per la versione 6.0.3
Vivek VK

25

Penso che il tuo meglio sia eseguire il server VNC con una geometria diversa su una porta diversa. Vorrei provare in base alla pagina man

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

Quindi è possibile connettersi dal lavoro a una porta e da casa a un'altra.

Modifica: quindi usa xmove per spostare le finestre tra i due x-server.


3
@Pat, il problema con la tua soluzione è che non riesco facilmente a spostare una finestra da una sessione VNC a un'altra. Se sono nel bel mezzo di un debug quando devo partire, voglio essere in grado di riprendere da dove avevo interrotto (forse con le finestre spostate un po 'a causa del ridimensionamento). Se ho due sessioni separate, non sarò in grado di continuare lo stesso di prima, perché dovrò chiudere le finestre da una sessione e riaprirle in un'altra. D'altra parte, se c'è un modo per spostare una finestra esistente da un X-server a un altro, ciò potrebbe risolvere il problema.
Nathan Fellman,

1
xmove non si trova nell'attuale repository Ubuntu; xpra è, che farà la stessa cosa (fungerà da proxy X).
Sam Hartsfield,

20

Dato che questa domanda sorge prima su Google, ho pensato di condividere una soluzione utilizzando TigerVNC, che è l'impostazione predefinita in questi giorni.

xrandrconsente di selezionare le modalità di visualizzazione (ovvero le risoluzioni), tuttavia, a causa della codifica rigida delle modeline, è necessario aggiungere qualsiasi codice aggiuntivo come "2560x1600" o "1600x900" nel codice . Penso che gli sviluppatori che hanno scritto il codice siano molto più intelligenti e l'elenco hard coded sia solo un esempio di valori. Conduce alla conclusione che ci deve essere un modo per aggiungere modelli personalizzati e lo man xrandrconferma.

Con questo background se l'obiettivo è condividere una sessione VNC tra due computer con le risoluzioni di cui sopra e supponendo che il server VNC sia il computer con la risoluzione di "1600x900":

  1. Avvia una sessione VNC con una geometria corrispondente al display fisico:

    $ vncserver -geometry 1600x900 :1
    
  2. Sul computer "2560x1600" avviare il visualizzatore VNC (preferisco Remmina) e connettersi alla sessione VNC remota:

    host:5901
    
  3. Una volta all'interno della sessione VNC, avviare una finestra del terminale.

  4. Conferma che la nuova geometria è disponibile nella sessione 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  
    

    e noterai che lo schermo è piuttosto piccolo.

  5. Elenca la modeline (vedi l'articolo xrandr nel wiki di ArchLinux) per la risoluzione "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 se il monitor è vecchio ottenere i tempi 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. Aggiungi la nuova modeline alla sessione VNC corrente:

    $ xrandr --newmode "2560x1600_60.00"  348.16  2560 2752 3032 3504  1600 1601 1604 1656 -HSync +Vsync
    
  7. xrandrNell'output sopra cercare il nome visualizzato sulla seconda riga:

    VNC-0 connected 1600x900+0+0 0mm x 0mm
    
  8. Associa la nuova modeline all'attuale monitor virtuale VNC:

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

    $ xrandr -s "2560x1600_60.00"
    

usato per creare uno spazio di lavoro più grande con tigervnc e mwm, ha funzionato per aumentare le dimensioni dello schermo, ma lo spazio di lavoro è limitato alle dimensioni iniziali utilizzate da vnc.
user2019716

È dovuto a mwm, lo spazio completo viene sfruttato una volta riavviato
mwm

Fantastico, molte grazie per la ricetta, mi ha davvero aiutato.
Adrian Rosoga,

Questo mi ha fatto risparmiare un sacco di tempo, grazie!
Ben Davis,

17

È interessante notare che nessuno ha risposto a questo. In TigerVNC, quando si è connessi alla sessione. Vai System > Preference > Displaydalla barra dei menu in alto (stavo usando Cent OS come mio server remoto). Fai clic sul menu a discesa della risoluzione, sono disponibili varie impostazioni, tra cui 1080p. Seleziona quello che ti piace. Cambierà al volo.

inserisci qui la descrizione dell'immagine

Assicurati di applicare la nuova impostazione quando viene richiesta una finestra di dialogo. Altrimenti tornerà all'impostazione precedente proprio come in Windows


1
È un'impostazione di TigerVNC, di CentOS o del gestore delle finestre?
Nathan Fellman,

Questa è un'impostazione in CentOS. Puoi accedervi da 'TigerVNC Viewer' quando sei loggato.
Hammad Khan

2
questa vita sicura
Yu Jiaao

9

Ragazzi, questo è davvero semplice.

accedi tramite il sshtuo pi

eseguire

vncserver -geometry 1200x1600

Questo genererà una nuova sessione :1

connettiti con il tuo client vnc all'indirizzo ipaddress:1

Questo è tutto.


7
Questa è una risposta sbagliata, perché non cambierà la risoluzione di una sessione esistente, ma ne creerà una nuova.
Nathan Fellman,

6

Aggiungendo alla risposta (accettata) di Nathan:

Volevo scorrere l'elenco delle risoluzioni ma non ho visto nulla per questo:

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

Ottiene l'indice corrente, passa al successivo e torna indietro a 0 in caso di errore (es. Fine)


MODIFICARE

Modificato per corrispondere a una versione successiva di xrandr ("*" si trova alla fine della riga e nessun identificatore di risoluzione iniziale).

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

3

La soluzione di @omiday ha funzionato per me in Xvnc TigerVNC 1.1.0, quindi l'ho condensata in un'unica funzione bash vncsize xy . Usalo in questo modo: vncsize 1400 1000 . Funziona con qualsiasi nome di uscita VNC, "predefinito" 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
}

2

Forse la risposta più ignorante che ho pubblicato ma qui va: Usa il client / visualizzatore TigerVNC e controlla 'Resize remote session to local window'nella scheda Schermo delle opzioni.

Non so cosa dice il client $% # @ TigerVNC a vncserver remoto o xrandr o Xvnc o gnome o ... ma si ridimensiona quando cambio la finestra del client TigerVNC.

La mia configurazione:

  • Tiger VNC Server in esecuzione su CentOS 6. Hosting desktop GNOME. (Funziona anche con RHEL 6.6)
  • Windows alcune versioni con Tiger VNC Client.

Con questo la risoluzione cambia per adattarsi alle dimensioni della finestra del client, non importa quale sia, e non lo è zooming, è la modifica della risoluzione effettiva (posso vedere la nuova risoluzione nell'output xrandr).

Ho provato tutto il possibile per aggiungere una nuova risoluzione a xrandr, ma senza risultato, ho sempre trovato un 'xrandr: Failed to get size of gamma for output default'errore.

Versioni con cui funziona per me in questo momento (anche se non ho avuto problemi con QUALSIASI versione in passato, installo solo l'ultima versione yum install gnome-* tigervnc-servere funziona bene):

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.

Quali versioni di TigerVNC stai usando per il tuo client / server? L'ho provato oggi e non si ridimensiona automaticamente per me. Sono su RHEL 6.2 con Xvnc TigerVNC 1.1.0 per server e client vncviewer-1.4.3.exe
cdwilson

@cdwilson Spero che tu abbia provato con il client in modalità schermo intero. Versioni aggiunte. HTH
Kashyap,

risulta che 1.1.0 non stava giocando bene con qualsiasi cosa stiano eseguendo sulle nostre macchine da lavoro. Eseguire l'ultimo 1.4.3 dalla mia $HOMEdirectory funziona come previsto github.com/TigerVNC/tigervnc/issues/155
cdwilson

Confermato: openSuse 15.1, GDM, KDE Plasma, client TigerVNC 1.9.0. La risoluzione del mio desktop remoto segue qualunque sia la dimensione della finestra del client, qualsiasi pazza risoluzione ad hoc, qualsiasi rapporto d'aspetto; in GDM o KDE. Funziona come un incantesimo, pronto all'uso, senza bisogno di impostare nulla sul client o sul server.
Espinosa,

1

Non sono sicuro di Linux, ma sotto Windows, tightvnc rileverà e si adatterà alle modifiche della risoluzione sul server.

Quindi dovresti essere in grado di VNC nella workstation, fare l'equivalente del tasto destro del mouse sul desktop, delle proprietà, impostare la risoluzione su qualunque cosa e far ridimensionare di conseguenza la finestra vnc del tuo client.


1

D'altra parte, se c'è un modo per spostare una finestra esistente da un X-server a un altro, ciò potrebbe risolvere il problema.

Penso che puoi usare xmove per spostare le finestre tra due x-server separati. Quindi, se funziona, questo dovrebbe almeno darti un modo di fare quello che vuoi, anche se non così facilmente come cambiare la risoluzione.


sai se xmove ha un altro nome in SuSE Linux?
Nathan Fellman,

@NathanFellman hai visto xpra? È un'applicazione più recente ma uno strumento simile en.wikipedia.org/wiki/Xpra e software.opensuse.org/package/xpra .
DD

Non ho molto controllo su questo, poiché lavoro in una grande
Nathan Fellman,

0

Per quanto ne so non c'è modo di cambiare la risoluzione del client solo usando VNC, in quanto si tratta solo di un'applicazione "monitor mirroring".

TightVNC tuttavia (che è un'applicazione client e server VNC) può ridimensionare lo schermo sul lato client, ovvero rendere tutto un po 'più piccolo (simile alle tecniche di ridimensionamento delle immagini nei programmi di grafica). Ciò dovrebbe funzionare se non si utilizzano caratteri troppo piccoli. VNC dovrebbe teoricamente essere compatibile tra diverse applicazioni VNC.


la domanda è strettamente una domanda di Linux, questa risposta di Windows non si applica qui. In Windows VNC è solo un monitor, ma in Linux era PRIMO un desktop virtuale e solo in seguito alcune versioni hanno aggiunto il supporto 'display 0' (cioè monitor). VNC Scaling è un'esperienza utente piuttosto scadente.
Nhed

0

Ho un'idea semplice, qualcosa del genere:

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

Bene, ho bisogno di una soluzione migliore per tutti i dispositivi di visualizzazione su Linux e Similars SO


-3

Penso che dipende dal gestore delle finestre.

Sono un utente di Windows, quindi questa potrebbe essere un'ipotesi sbagliata, ma: Non c'è qualcosa chiamato X-Server in esecuzione su macchine Linux - almeno su quelli che potrebbero essere destinazioni interessanti per VNC - a cui puoi connetterti con " X-clienti "?

VNC prende tutto ciò che è sullo schermo e "lo tunnel attraverso la tua rete". Se non sbaglio totalmente, il protocollo "X" dovrebbe darti la possibilità di utilizzare la risoluzione desktop del tuo client.

Dare X-Server su Wikipedia una prova, che potrebbe dare un quadro di massima.


l'idea è buona e può essere fatta usando un tunnel ssh e un x-server locale. Hai l'x-server sul tuo computer e dai ai client remoti l'accesso al tuo x-server che renderà la GUI delle app remote sul tuo display.
andho,

@ e no no, questo non è affatto ciò che il poster ha richiesto - il problema qui è che perderai i widnow quando perdevi la connettività. Le finestre di apertura sul tunnel sono utili solo per le app a breve termine, non se vuoi portare il tuo desktop (e tutte le app aperte all'interno) da un client a un altro ...
nhed

@nhed, non so se sia pratico, ma è un'idea. Per quanto riguarda le app a lungo termine, forse è possibile utilizzare il programma 'schermo'?
andho,

Lo schermo @andho è fantastico, per le app di solo testo ... l'OP stava chiedendo delle app X ... e sono arrivato in questo angolo del web perché stavo cercando la stessa cosa e sembra che qualcosa come xranr o xmove at the closet things (xrandr è un'opzione più pulita)
nhed

@nhed, sì, anche questo è un problema. Basta lanciare quell'idea là fuori in modo che qualcuno più esperto possa colpirla, senza che io debba testare se fosse possibile.
andho,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.