Domanda

Utilizzo VNC per connettermi a una workstation Linux al lavoro.Al lavoro ho un monitor da 20" che funziona a 1600x1200, mentre a casa utilizzo il mio portatile con la risoluzione di 1440x900.Se imposto vncserver per l'esecuzione a 1440x900 perdo molto spazio sul mio monitor, mentre se lo imposto per l'esecuzione a 1600x1200 non si adatta allo schermo del laptop e devo scorrere continuamente.

Esiste un buon modo per ridimensionare al volo una sessione VNC?

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

È stato utile?

Soluzione

Real VNC server 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

Altri suggerimenti

Ho scoperto che vnc4server (4.1.1) fornito con Ubuntu (10.04) è dotato di patch per supportare anche la modifica della risoluzione al volo tramite xrandr.Sfortunatamente la funzionalità è 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 dinamico del desktop' abilitato) utilizza xrandr per visualizzare le modalità disponibili:

xrandr

per modificare la risoluzione, ad esempio utilizzare:

xrandr -s 800x600

Questo è tutto.

sto correndo TigerVNC sul mio server Linux, che ha basic Randr supporto.Avvio semplicemente vncserver senza alcuna opzione -randr o multiple -geometry.

Quando eseguo xrandr in un terminale, visualizza 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 (ad es.passare a 1360x768):

bash> xrandr -s 5

Utilizzo il visualizzatore TightVnc come client e si adatta automaticamente alla nuova risoluzione.

Penso che la soluzione migliore sia eseguire il server VNC con una geometria diversa su una porta diversa.Proverei in base a pagina man

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

Quindi puoi connetterti dal lavoro a una porta e da casa a un'altra.

Modificare:Quindi utilizzare xmove per spostare le finestre tra i due x-server.

È interessante notare che nessuno ha risposto a questa domanda.In TigerVNC, quando hai effettuato l'accesso alla sessione.Vai a System > Preference > Display dalla barra dei menu in alto (usavo Cent OS come 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.

enter image description here

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

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

xrandr consente tuttavia di selezionare le modalità di visualizzazione (ovvero le risoluzioni) a causa del fatto che le modeline sono duro Codificato Qualsiasi modeline aggiuntiva come "2560x1600" o "1600x900" dovrebbe essere aggiunto al codice.Io penso che gli sviluppatori che hanno scritto il codice siano molto più intelligenti e i più difficili coded list è solo un esempio di valori.Ne consegue la conclusione che ci deve essere un modo per aggiungere modeline personalizzate e man xrandr Conferma esso.

Con questo sfondo, se l'obiettivo è quello di 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 (io preferisco Remmina) e collegarsi al VNC remoto sessione:

    host:5901
    
  3. Una volta all'interno della sessione VNC, avvia una finestra di 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. Elencare la modeline (vedere 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 ottieni 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. In quanto sopra xrandr output cerca il nome visualizzato sul secondo linea:

    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"
    

Ragazzi, è davvero semplice.

accedi tramite ssh nel tuo pi greco

eseguire

vncserver -geometry 1200x1600

Questo genererà una nuova sessione :1

connettiti con il tuo client vnc su ipaddress:1

Questo è tutto.

In aggiunta alla risposta (accettata) di Nathan:

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

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

Ottiene l'indice corrente, passa a quello successivo e torna a 0 in caso di errore (ad es.FINE)


MODIFICARE

Modificato per corrispondere a una versione successiva di xrandr ("*" è 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
}

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 di fare clic con il pulsante destro del mouse sul desktop, proprietà, impostare la risoluzione su qualsiasi cosa e fare in modo che la finestra vnc del client si ridimensioni di conseguenza.

D'altra parte, se c'è un modo per Spostare una finestra esistente da una X-server ad un altro, che potrebbe risolvere il problema.

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

Forse la risposta più ignorante che ho pubblicato, ma ecco qui:Utilizza il client/visualizzatore TigerVNC e controlla 'Resize remote session to local window' nella scheda Schermata 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:

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

In questo modo la risoluzione cambia per adattarsi alla dimensione della finestra del client, non importa quale sia e non lo sia zooming, si tratta dell'effettiva modifica della risoluzione (posso vedere la nuova risoluzione nell'output xrandr).

Ho provato tutto quello che potevo per aggiungere una nuova risoluzione a xrandr, ma senza alcun risultato, finisco sempre con 'xrandr: Failed to get size of gamma for output default' errore.

Versioni con cui funziona per me in questo momento (anche se in passato non ho avuto problemi con NESSUNA versione, installo semplicemente l'ultima utilizzando yum install gnome-* tigervnc-server e 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.

La soluzione di @omiday ha funzionato per me in Xvnc TigerVNC 1.1.0, quindi l'ho condensata in un'unica funzione bash vncdimensione x y.Usalo in questo modo: vncdimensione 1400 1000.Si presuppone questo xrandr riporta il nome dell'output VNC come predefinito.

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
}

Per quanto ne so, non c'è modo di modificare la risoluzione del client semplicemente usando VNC, poiché è solo un'applicazione di "mirroring del monitor".

StrettoVNC tuttavia (che è un'applicazione client e server VNC) può ridimensionare lo schermo sul lato client, ad es.rendendo tutto un po' più piccolo (simile alle tecniche di ridimensionamento delle immagini nei programmi di grafica).Dovrebbe funzionare se non usi dimensioni dei caratteri troppo piccole.VNC dovrebbe teoricamente essere compatibile tra diverse applicazioni VNC.

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 sotto Linux e simili S.O

Penso che dipenda dal tuo window manager.

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

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

Dare X-Server su Wikipedia una prova, che potrebbe darti una panoramica approssimativa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top