Modifica della risoluzione di una sessione VNC in Linux [chiuso]
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.
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.
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":
Avvia una sessione VNC con una geometria corrispondente al display fisico:
$ vncserver -geometry 1600x900 :1
Sul computer "2560x1600" avviare il visualizzatore VNC (io preferisco Remmina) e collegarsi al VNC remoto sessione:
host:5901
Una volta all'interno della sessione VNC, avvia una finestra di terminale.
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.
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
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
In quanto sopra
xrandr
output cerca il nome visualizzato sul secondo linea:VNC-0 connected 1600x900+0+0 0mm x 0mm
Associa la nuova modeline all'attuale monitor virtuale VNC:
$ xrandr --addmode VNC-0 "2560x1600_60.00"
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.