Alterando a resolução de uma sessão VNC no Linux [fechado]


153

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

Existe alguma maneira de redimensionar uma sessão do VNC em tempo real?

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


Gostaria de mencionar algo que me deparei recentemente, mas ainda não pude testá-lo. Existe um novo programa chamado FreeNX que substituiu o VNC. Aqui está o link: freenx.berlios.de
andho

@andho - Esse link parece estar quebrado.
ArtOfWarfare

@ArtOfWarfare espero que isso ajude help.ubuntu.com/community/FreeNX . Agora deve estar bem estável. Acho que vou tentar em breve, se o tempo permitir.
andho

Respostas:


159

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

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

Redimensione com:

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

1
Obrigado Nathan, mesmo o pessoal do realvnc não parece enfatizar o recurso xrandr ... Veja também minha função bash abaixo para permitir alternar entre as resoluções randr.
nhed

7
Você pode achar conveniente colocar todas essas opções em um .vnc/configarquivo. Por exemplo, a primeira linha da minha configuração é:-randr 800x600,1024x768,1280x800,1280x960,1280x1024,1680x1050,1920x1080,3360x1050,1024x700,1200x740,1600x1000,3200x1000
bfroehle

@ Nathan Tentei usar a solução que você deu, mas sem sucesso. você pode tentar responder a esta pergunta minha?
29413 Geek

3
Gostaria de saber se isso funciona com tightvncserver?
precisa

4
@DimitryK Eu tinha tightvncserver e não funciona. Eu o limpei e instalei o VNC real. Eu recomendo. Todas as resoluções de paisagem: 320x240,480x320,482x320,560x360,576x360,640x480,640x482,648x486,720x480,720x486,720x540,720x576,768x576,800x480,800x600,1024x600,1024x768,1280x768,1280x768,1280x740,1240x440 1600x900,1600x1024,1600x1200,1680x1050,1920x1080,1920x1200,2048x1024,2048x1152,2048x1536,2560x1080,2560x1440,2560x1600,2560x2048,3072x1536,3072x1728,3840x2160,4096x2048,4096x23020,819,760x460x1940
barwnikk

68

Descobriu que o vnc4server (4.1.1) enviado com o Ubuntu (10.04) está 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

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

xrandr

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

xrandr -s 800x600

É isso aí.


Tentei usar sua abordagem também com a sugerida por Nathan, mas sem sucesso. Você consegue identificar o que está faltando aqui?
29413 Geek

Funcionou perfeitamente. Obrigado!
Roney Michael

27

Estou executando o TigerVNC no meu servidor Linux, que possui randr básico suporte . 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 alternar facilmente para outra resolução (fe mudar para 1360x768):

bash> xrandr -s 5

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


para que as pessoas não se envolvam em perseguições, você pode listar a versão do TigerVnc e a distribuição + versão do servidor linux? Obrigado
nhed

Posso confirmar que ele funciona muito bem com TiverVnc 1.1.0 (servidor Linux, o cliente Linux)
Benedikt Waldvogel

1
Estou usando o vncviewer e toda vez que tento alterar a resoultion a janela fecha.
AWE

posso perguntar qual versão do xrandr é essa. Mine: xrandr versão do programa 1.3.5 Server relata RandR versão 1.3 parece completamente diferente, por exemplo, não têm primeira coluna
Wakan Tanka

Apenas para acrescentar que também funciona com o Real VNC como cliente. Testado para a versão 6.0.3
Vivek VK 15/17

25

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

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

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

Editar: Em seguida, use o xmove para mover as janelas entre os dois x-servers.


3
@ Pat, o problema com sua solução é que não consigo mover facilmente uma janela de uma sessão VNC para outra. Se eu estiver no meio de uma depuração quando precisar sair, quero poder continuar de onde parei (talvez com as janelas movidas um pouco devido ao redimensionamento). Se eu tiver duas sessões separadas, não poderei continuar o mesmo de antes, porque precisarei fechar as janelas de uma sessão e reabri-las em outra. Por outro lado, se houver uma maneira de mover uma janela existente de um servidor X para outro, isso poderá resolver o problema.
18415 Nathan Fellman

1
O xmove não está no repositório atual do Ubuntu; xpra é, que fará a mesma coisa (agir como um proxy X).
Sam Hartsfield

20

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

xrandrpermite selecionar os modos de exibição (também conhecidos como resoluções); no entanto, devido à codificação das modelagens, qualquer modeline adicional como "2560x1600" ou "1600x900" precisaria ser adicionada ao código . Eu acho que os desenvolvedores que escreveram o código são muito mais inteligentes e a lista codificada é apenas uma amostra de valores. Isso leva à conclusão de que deve haver uma maneira de adicionar modelos personalizados eman xrandr confirma-los.

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

  1. Inicie uma sessão do 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 conecte-se à sessão VNC remota:

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

  4. Confirme se a nova geometria está disponível na sessão do 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 a modelagem (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 horários 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 a nova modelagem à sessão atual do VNC:

    $ xrandr --newmode "2560x1600_60.00"  348.16  2560 2752 3032 3504  1600 1601 1604 1656 -HSync +Vsync
    
  7. Na xrandrsaída acima, procure o nome para exibição na segunda linha:

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

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

    $ xrandr -s "2560x1600_60.00"
    

usado para criar um espaço de trabalho maior com tigervnc e mwm, ele trabalhou para aumentar o tamanho da tela, mas o espaço de trabalho é limitado ao tamanho inicial usado pelo vnc.
user2019716

É devido a MWM, todo o espaço é explorado uma vez MWM é reiniciado
user2019716

Brilhante, muito obrigado pela receita, realmente ajudou.
Adrian Roşoga

Isso me salvou muito tempo, obrigado!
Ben Davis

17

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

insira a descrição da imagem aqui

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


1
Essa é uma configuração do TigerVNC, do CentOS ou do gerenciador de janelas?
Nathan Fellman

Esta é uma configuração em CentOS.You pode acessá-lo de 'TigerVNC Visualizador' quando você está logado.
Hammad Khan

2
este seguro minha vida
Yu Jiaao

9

Gente, isso é realmente simples.

entre via sshno seu pi

executar

vncserver -geometry 1200x1600

Isso irá gerar uma nova sessão :1

conecte-se ao seu cliente vnc em ipaddress:1

É isso aí.


7
Essa é uma resposta errada, porque não altera a resolução de uma sessão existente, mas apenas cria uma nova.
precisa

6

Adicionando à resposta de Nathan (aceita):

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, passa para o próximo e volta para 0 com erro (isto é, final)


EDITAR

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

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

3

A solução do @omiday funcionou para mim no Xvnc TigerVNC 1.1.0, então eu a condensei em uma única função bash vncsize xy . Use-o assim: vncsize 1400 1000 . Funciona para qualquer nome de saída VNC, "padrão" ou "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

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

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

Minha configuração:

  • Servidor Tiger VNC em execução no CentOS 6. Hospedando a área de trabalho do GNOME. (Funciona com o RHEL 6.6 também)
  • Windows alguma versão com o 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 alteração real da resolução (eu posso ver a nova resolução na saída xrandr).

Eu tentei tudo o que pude para adicionar uma nova resolução ao xrandr, mas sem sucesso, sempre terminava 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 QUALQUER versão no passado, apenas instalei as mais recentes usando yum install gnome-* tigervnc-servere 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.

Quais versões do TigerVNC você está usando para seu cliente / servidor? Eu tentei isso hoje e ele não é redimensionado automaticamente para mim. Estou no RHEL 6.2 executando o Xvnc TigerVNC 1.1.0 para servidor e cliente vncviewer-1.4.3.exe
cdwilson

@cdwilson Espero que você tenha tentado com o cliente no modo de tela cheia. Versões adicionadas. HTH
Kashyap

Acontece que a versão 1.1.0 não estava se saindo bem com o que eles estão executando em nossas máquinas de trabalho. Rodando a última 1.4.3 das minhas $HOMEobras de diretório como esperado github.com/TigerVNC/tigervnc/issues/155
cdwilson

Confirmado: openSuse 15.1, GDM, KDE Plasma, TigerVNC client 1.9.0. A resolução da minha área de trabalho remota segue o tamanho da janela do cliente, qualquer resolução ad-hoc louca, qualquer proporção; no GDM ou no KDE. Funciona como um encanto, pronto para uso, sem necessidade de definir nada em qualquer lugar do cliente ou servidor.
Espinosa

1

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 poder fazer o VNC na estação de trabalho, fazer o equivalente a clicar com o botão direito do mouse na área de trabalho, nas propriedades, definir a resolução para o que for e fazer com que a janela vnc do cliente se redimensione adequadamente.


1

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

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


você sabe se xmove tem outro nome no SuSE Linux?
18419 Nathan Fellman

@NathanFellman você olhou xpra? É uma aplicação mais recente, mas uma ferramenta semelhante en.wikipedia.org/wiki/Xpra e software.opensuse.org/package/xpra .
DDay

Eu não tenho muito controle sobre isso, como eu trabalho em uma grande empresa onde ele escolhe as ferramentas de acesso remoto
Nathan Fellman

0

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

No entanto, o TightVNC (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 imagem em programas gráficos). Isso deve funcionar se você não usar tamanhos de fonte muito pequenos. Teoricamente, o VNC deve ser compatível entre diferentes aplicativos VNC.


a pergunta é estritamente uma questão do linux, a resposta desta janela não se aplica aqui. No Windows, o VNC é apenas um monitor, mas no Linux era PRIMEIRO um desktop virtual e somente mais tarde algumas versões adicionaram suporte ao 'display 0' (ou seja, monitor). O VNC Scaling é uma experiência muito ruim para o usuário.
nhed

0

Eu tenho uma ideia simples, algo como isto:

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


-3

Eu acho que depende do seu gerenciador de janelas.

Eu sou um usuário do Windows, então isso pode ser um palpite errado, mas: Não existe algo chamado X-Server em execução em máquinas Linux - pelo menos naquelas que podem ser alvos interessantes para o VNC - às quais você pode se conectar " Clientes X "?

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

Experimente o X-Server na Wikipedia, que pode lhe dar uma visão geral.


a ideia é boa e pode ser feita usando um túnel ssh e um x-server local. Você tem o x-server em sua máquina e concede aos clientes remotos acesso ao x-server, que renderizará a interface dos aplicativos remotos em sua tela.
andho

@andho não, não é isso que o pôster pedia - o problema aqui é que você perderia as viúvas quando perdesse a conectividade. As janelas de abertura sobre o túnel só é útil para aplicações de curto prazo, não se você quiser ter o seu ambiente de trabalho (e todos os aplicativos abertos dentro) de um cliente para outro ...
nhed

@ Nhed, eu não sei se isso é mesmo prático, mas é uma idéia. Quanto aos aplicativos de longo prazo, talvez o programa 'screen' possa ser usado?
5133 andho

A tela @andho é incrível, para aplicativos somente texto ... o OP estava perguntando sobre aplicativos X ... e cheguei a esse canto da Web porque estava procurando a mesma coisa e parece que algo como xranr ou xmove nas coisas do armário (xrandr sendo uma opção mais limpa)
encerrado em 5/07/11

@ nhed, sim, este é um problema que estou tendo também. Apenas lançando essa idéia para que alguém mais experiente possa se manifestar, sem que eu precise testar se era possível.
andho
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.