Pergunta

Eu uso o VNC para conectar-me a uma estação de trabalho Linux no trabalho.No trabalho tenho um monitor de 20" que roda a 1600x1200, enquanto em casa uso meu laptop com resolução de 1440x900.Se eu configurar o vncserver para rodar em 1440x900, perderei muito espaço no meu monitor, enquanto se eu configurá-lo para rodar em 1600x1200, ele não caberá na tela do laptop e terei que rolar o tempo todo.

Existe alguma boa maneira de redimensionar uma sessão VNC rapidamente?

Meu servidor VNC é RealVNC E4.x (não me lembro da versão exata) rodando em SuSE64.

Foi útil?

Solução

O servidor Real VNC 4.4 inclui suporte para Xrandr, que permite redimensionar o VNC.Inicie o servidor com:

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

Em seguida, redimensione com:

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

Outras dicas

Descobri que o vnc4server (4.1.1) fornecido com o Ubuntu (10.04) foi corrigido para também suportar a alteração da resolução em tempo real via xrandr.Infelizmente, o recurso foi difícil de encontrar porque não está documentado.Então aqui está...

Inicie o servidor com várias instâncias de 'geometria', como:

vnc4server -geometry 1280x1024 -geometry 800x600

De um terminal em um vncviewer (com:'permitir redimensionamento dinâmico da área de trabalho' habilitado) use xrandr para visualizar os modos disponíveis:

xrandr

para alterar a resolução, por exemplo, use:

xrandr -s 800x600

É isso.

Estou correndo TigerVNC no meu servidor Linux, que tem básico Randr apoiar.Acabei de iniciar o vncserver sem nenhuma opção -randr ou múltiplas -geometry.

Quando executo o xrandr em um terminal, ele exibe todas as resoluções de tela disponíveis:

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 então mudar facilmente para outra resolução (por exemplo,mudar para 1360x768):

bash> xrandr -s 5

Estou usando o visualizador TightVnc como cliente e ele se adapta automaticamente à nova resolução.

Acho que o melhor é executar o servidor VNC com uma geometria diferente em uma porta diferente.Eu tentaria com base no página de manual

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

Depois, você pode conectar-se do trabalho a uma porta e de casa a outra.

Editar:Em seguida, use xmove para mover janelas entre os dois servidores x.

Curiosamente, ninguém respondeu a isso.No TigerVNC, quando você está logado na sessão.Vá para System > Preference > Display na barra de menu superior (eu estava usando o Cent OS como meu servidor remoto).Clique no menu suspenso de resolução, há várias configurações disponíveis, incluindo 1080p.Selecione o que você gosta.Isso mudará na hora.

enter image description here

Certifique-se de aplicar a nova configuração quando uma caixa de diálogo for solicitada.Caso contrário, ele voltará à configuração anterior, assim como no Windows

Como essa pergunta surge primeiro no Google, pensei em compartilhar uma solução usando TigerVNC, que é o padrão atualmente.

xrandr permite a seleção dos modos de exibição (também conhecidos codificado duroQualquer modelo adicional como "2560x1600" ou "1600x900" precisaria ser adicionado ao código.Eu acho que os desenvolvedores que escreveram o código são muito mais inteligentes e a lista de codificação dura é apenas uma amostra de valores.Isso leva à conclusão de que deve haver uma maneira de adicionar modelos personalizados e man xrandr confirma isso.

Com esse histórico, se o objetivo é compartilhar uma sessão do VNC entre dois computadores com as resoluções acima e assumindo que o servidor VNC seja o computador com a resolução de "1600x900":

  1. Inicie uma sessão VNC com uma geometria correspondente à exibição física:

    $ vncserver -geometry 1600x900 :1
    
  2. No computador "2560x1600", inicie o visualizador VNC (eu prefiro remmina) e conectar -me à sessão remota do VNC:

    host:5901
    
  3. Uma vez dentro da sessão VNC, abra uma janela de terminal.

  4. Confirme se a nova geometria está disponível na sessão 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 você notará que a tela é bem pequena.

  5. Liste o Modeline (consulte o artigo XRANDR no Wiki do Archlinux) para a resolução "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 se o monitor for antigo, obtenha os tempos do 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. Adicione o novo modeline à sessão VNC atual:

    $ xrandr --newmode "2560x1600_60.00"  348.16  2560 2752 3032 3504  1600 1601 1604 1656 -HSync +Vsync
    
  7. No acima xrandr Saída Procure o nome da tela na segunda linha:

    VNC-0 connected 1600x900+0+0 0mm x 0mm
    
  8. Vincule a nova modelina ao monitor virtual VNC atual:

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

    $ xrandr -s "2560x1600_60.00"
    

Pessoal, isso é muito simples.

faça login através ssh em seu pi

executar

vncserver -geometry 1200x1600

Isso irá gerar uma nova sessão :1

conecte-se com seu cliente vnc em ipaddress:1

É isso.

Adicionando à resposta (aceita) de Nathan:

Eu queria percorrer a lista de resoluções, mas não vi nada para isso:

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

Ele obtém o índice atual, avança para o próximo e volta para 0 em caso de erro (ou seja,fim)


EDITAR

Modificado para corresponder a uma versão posterior do xrandr ("*" está no final da linha e não tem identificador de resolução inicial).

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

Não tenho certeza sobre o Linux, mas no Windows, o tightvnc detectará e se adaptará às alterações de resolução no servidor.

Portanto, você deve ser capaz de fazer o VNC na estação de trabalho, fazer o equivalente a clicar com o botão direito na área de trabalho, propriedades, definir a resolução para qualquer coisa e fazer com que a janela vnc do cliente seja redimensionada de acordo.

Por outro lado, se houver uma maneira de mover uma janela existente de um servidor X para outro, isso pode resolver o problema.

Eu acho que você pode usar xmove para mover janelas entre dois servidores x separados.Portanto, se funcionar, isso deve pelo menos fornecer uma maneira de fazer o que você deseja, embora não tão facilmente quanto alterar a resolução.

Talvez a resposta mais ignorante que postei, mas aqui vai:Use o cliente/visualizador TigerVNC e verifique 'Resize remote session to local window' na guia Tela de opções.

Não sei o que o cliente $%#@ TigerVNC diz ao vncserver remoto ou xrandr ou Xvnc ou gnome ou ...mas ele é redimensionado quando mudo a janela do cliente TigerVNC.

Minha configuração:

  • Servidor Tiger VNC rodando em CentOS 6.Hospedando a área de trabalho GNOME.(Funciona com RHEL 6.6 também)
  • Windows alguma versão com Tiger VNC Client.

Com isso a resolução muda para se ajustar ao tamanho da janela do cliente, não importa qual seja, e não é zooming, é a mudança real da resolução (posso ver a nova resolução na saída do xrandr).

Eu tentei de tudo para adicionar uma nova resolução ao xrandr, mas sem sucesso, sempre acabo com 'xrandr: Failed to get size of gamma for output default' erro.

Versões com as quais funciona para mim agora (embora eu não tenha tido problemas com NENHUMA versão no passado, apenas instalei a mais recente usando yum install gnome-* tigervnc-server e funciona bem):

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.

A solução de @omiday funcionou para mim no Xvnc TigerVNC 1.1.0, então a condensei em uma única função bash tamanho vnc x y.Use assim: tamanho vnc 1400 1000.Supõe que xrandr relata o nome da saída VNC como padrão.

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
}

Pelo que eu sei não há como alterar a resolução do cliente apenas usando VNC, pois é apenas um aplicativo de "espelhamento de monitor".

ApertadoVNC no entanto (que é um aplicativo cliente e servidor VNC) pode redimensionar a tela no lado do cliente, ou seja,tornando tudo um pouco menor (semelhante às técnicas de redimensionamento de imagens em programas gráficos).Isso deve funcionar se você não usar tamanhos de fonte muito pequenos.O VNC deveria, teoricamente, ser compatível entre diferentes aplicativos VNC.

Tenho uma ideia simples, mais ou menos assim:

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

Bem, preciso de uma solução melhor para todos os dispositivos de exibição no Linux e similares S.O

Acho que isso depende do seu gerenciador de janelas.

Sou usuário do Windows, então pode ser um palpite errado, mas:Não existe algo chamado Servidor X rodando em máquinas Linux - pelo menos naquelas que podem ser alvos interessantes para VNC - às quais você pode se conectar com "X-Clients"?

O VNC apenas pega tudo o que está na tela e "encaixa-o na sua rede".Se não estiver totalmente errado, o protocolo "X" deve lhe dar a chance de usar a resolução da área de trabalho do seu cliente.

Dar Servidor X na Wikipedia, isso pode lhe dar uma visão geral aproximada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top