리눅스에서 VNC 세션의 해상도 변경하기


153

VNC를 사용하여 직장에서 Linux 워크 스테이션에 연결합니다. 직장에서는 1600x1200에서 실행되는 20 인치 모니터가 있고 집에서는 해상도가 1440x900 인 랩톱을 사용합니다. vncserver를 1440x900에서 실행하도록 설정하면 모니터의 많은 공간을 놓치게됩니다. 1600x1200에서 실행되도록 설정하면 랩톱 화면에 맞지 않으며 항상 스크롤해야합니다.

VNC 세션 크기를 즉시 조정할 수있는 좋은 방법이 있습니까?

내 VNC 서버는 SuSE64에서 실행되는 RealVNC E4.x (정확한 버전은 기억 나지 않습니다)입니다.


최근에 겪은 것을 언급하고 싶지만 아직 테스트 할 수 없었습니다. VNC를 대체하기 위해 FreeNX라는 새로운 프로그램이 있습니다. 여기 링크가 있습니다 : freenx.berlios.de
andho

@andho-링크가 끊어진 것 같습니다.
ArtOfWarfare 1

@ArtOfWarfare이 도움이되기를 바랍니다 help.ubuntu.com/community/FreeNX을 . 지금까지 꽤 안정적이어야합니다. 시간이 허락 할 때 곧 시도해 볼 것입니다.
andho

답변:


159

Real VNC 서버 4.4에는 Vrand 크기를 조정할 수있는 Xrandr 지원이 포함되어 있습니다. 다음을 사용하여 서버를 시작하십시오.

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

그런 다음 크기를 조정하십시오.

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

1
고마워 Nathan, realvnc 사람들조차도 xrandr 기능을 강조하지 않는 것 같습니다 ... 아래의 bash 기능을 참조하여 randr 해상도를 순환하십시오.
nhed

7
이러한 옵션을 모두 .vnc/config파일로 저장 하는 것이 편리 할 수 ​​있습니다 . 예를 들어, 나의 설정의 첫 줄은 다음과 같습니다 :-randr 800x600,1024x768,1280x800,1280x960,1280x1024,1680x1050,1920x1080,3360x1050,1024x700,1200x740,1600x1000,3200x1000
bfroehle

@Nathan 나는 당신이 준 솔루션을 사용하려고했지만 성공하지 못했습니다. 이 질문에
Geek

3
이것이 작동하는지 궁금합니다 tightvncserver.
Dimitry K

4
@DimitryK 나는 tightvncserver를 가지고 있었고 작동하지 않습니다. 그것을 제거하고 실제 VNC를 설치했습니다. 난 그것을 추천 해. 모든 가로 해상도 : 320x240,480x320,482x320,560x360,576x360,640x480,640x482,648x486,720x480,720x486,720x540,720x576,768x576,800x480,800x600,1024x600,1024x768,1280x720,1280x800,1280x1024,1366x768,9004001050 1600x900,1600x1024,1600x1200,1680x1050,1920x1080,1920x1200,2048x1024,2048x1152,2048x1537
barwnikk

68

Ubuntu (10.04)와 함께 제공된 vnc4server (4.1.1)는 xrandr를 통해 즉시 해상도 변경을 지원하도록 패치되었습니다. 불행히도이 기능은 문서화되지 않았기 때문에 찾기 어려웠습니다. 여기에 ...

다음과 같이 여러 '형상'인스턴스로 서버를 시작하십시오.

vnc4server -geometry 1280x1024 -geometry 800x600

vncviewer의 터미널에서 ( 'dymanic desktop resizing 허용'사용) xrandr을 사용하여 사용 가능한 모드를보십시오.

xrandr

예를 들어 resulution을 변경하려면 다음을 사용하십시오.

xrandr -s 800x600

그게 다야.


나는 네이선이 제안한 것과 함께 당신의 접근 방식을 사용하려고했지만 성공하지 못했습니다. 여기서
Geek

완벽하게 작동했습니다. 감사!
Roney Michael

27

기본 randr을 지원 하는 Linux 서버 에서 TigerVNC 를 실행 하고 있습니다. -randr 또는 다중 -geometry 옵션없이 vncserver를 시작합니다.

터미널에서 xrandr를 실행하면 사용 가능한 모든 화면 해상도가 표시됩니다.

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

그런 다음 다른 해상도로 쉽게 전환 할 수 있습니다 (fe는 1360x768로 전환).

bash> xrandr -s 5

클라이언트로 TightVnc 뷰어를 사용하고 있으며 새 해상도에 자동으로 적응합니다.


사람들이 야생 거위 추적을하지 않도록 TigerVnc 버전과 Linux 서버 배포 + 버전을 모두 나열 할 수 있습니까? 감사합니다
nhed

나는 TiverVnc 1.1.0 (리눅스 서버, 리눅스 클라이언트)와 함께 꽤 잘 작동하는지 확인할 수 있습니다
베네딕트 Waldvogel

1
vncviewer를 사용하고 있으며 창을 닫을 때마다 resoultion을 변경할 때마다.
AWE

어떤 xrandr 버전이 이것인지 물어볼 수 있습니다. 광산 : 예를 들어 1.3.5 서버 RandR 버전 1.3은 완전히 다른 것보고 xrandr를 프로그램 버전은 첫 번째 열이 없습니다
와칸 단가

Real VNC에서도 클라이언트로 작동한다는 점을 추가하십시오. 버전 6.0.3에서 테스트
Vivek VK

25

최선의 방법은 다른 포트에서 다른 지오메트리로 VNC 서버를 실행하는 것입니다. 맨 페이지를 기반으로 시도 합니다

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

그런 다음 직장에서 한 포트로, 집에서 다른 포트로 연결할 수 있습니다.

편집 : 그런 다음 xmove를 사용하여 두 x 서버 사이에서 창을 이동하십시오.


3
@ Pat, 솔루션의 문제는 한 VNC 세션에서 다른 VNC 세션으로 창을 쉽게 이동할 수 없다는 것입니다. 나가야 할 때 디버그 중간에 있으면 중단 된 곳을 선택할 수 있기를 원합니다 (크기 조정으로 인해 창이 약간 움직일 수 있음). 두 개의 별도 세션이있는 경우 한 세션에서 창을 닫고 다른 세션에서 다시 열어야하기 때문에 이전과 동일하게 계속 진행할 수 없습니다. 반면, 기존 창을 한 X 서버에서 다른 X 서버로 이동하는 방법이 있으면 문제가 해결 될 수 있습니다.
Nathan Fellman

1
xmove는 현재 Ubuntu 저장소에 없습니다. xpra는 동일한 작업을 수행합니다 (X 프록시로 작동).
Sam Hartsfield

20

이 질문이 Google에서 처음 등장함에 따라 요즘 기본값 인 TigerVNC를 사용하는 솔루션을 공유한다고 생각했습니다.

xrandr디스플레이 모드 (일명 해상도)를 선택할 수 있지만, 모델 코드하드 코딩 되어 있기 때문에 "2560x1600"또는 "1600x900"과 같은 추가 모델을 코드에 추가 해야 합니다 . 코드를 작성한 개발자가 훨씬 똑똑하고 하드 코딩 된 목록은 단순한 샘플 일 뿐이라고 생각합니다. 사용자 지정 모델을 추가하고 man xrandr확인 하는 방법이 있어야한다는 결론으로 ​​이어집니다 .

위의 해상도를 가진 두 컴퓨터간에 VNC 세션을 공유하고 VNC 서버가 "1600x900"해상도의 컴퓨터라고 가정하는 것이 목표 인 경우 :

  1. 물리적 디스플레이와 일치하는 형상으로 VNC 세션을 시작합니다.

    $ vncserver -geometry 1600x900 :1
    
  2. "2560x1600"컴퓨터에서 VNC 뷰어를 시작하고 (Remmina를 선호 함) 원격 VNC 세션에 연결하십시오.

    host:5901
    
  3. VNC 세션 내부에서 터미널 창을 시작하십시오.

  4. 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  
    

    화면이 매우 작습니다.

  5. "2560x1600"해상도의 모델을 나열하십시오 (ArchLinux 위키의 xrandr 기사 참조).

    $ 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
    

    또는 모니터가 오래된 경우 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. 현재 VNC 세션에 새 모델을 추가하십시오.

    $ xrandr --newmode "2560x1600_60.00"  348.16  2560 2752 3032 3504  1600 1601 1604 1656 -HSync +Vsync
    
  7. xrandr출력에서 두 번째 줄에서 표시 이름을 찾으십시오.

    VNC-0 connected 1600x900+0+0 0mm x 0mm
    
  8. 새 모델을 현재 VNC 가상 모니터에 바인딩합니다.

    $ xrandr --addmode VNC-0 "2560x1600_60.00"
    
  9. 그걸 써:

    $ xrandr -s "2560x1600_60.00"
    

tigervnc 및 mwm으로 더 큰 작업 공간을 만드는 데 사용되었지만 화면 크기를 늘리는 데 도움이되었지만 작업 공간은 vnc에서 사용하는 초기 크기로 제한됩니다.
user2019716

MWM가 다시 시작되면 그것은 MWM로 인해, 전체 공간이 악용되어
user2019716

화려하고 많은 요리법에 감사드립니다.
Adrian Rosoga

덕분에 많은 시간을 절약 할 수있었습니다. 감사합니다!
벤 데이비스

17

흥미롭게도 아무도 대답하지 않았습니다. TigerVNC에서 세션에 로그인 할 때 System > Preference > Display상단 메뉴 표시 줄로 이동 하십시오 (Cent OS를 원격 서버로 사용하고있었습니다). 해상도 드롭 다운을 클릭하면 1080p를 포함한 다양한 설정이 가능합니다. 원하는 것을 선택하십시오. 즉시 변경됩니다.

여기에 이미지 설명을 입력하십시오

대화 상자가 표시되면 새 설정을 적용하십시오. 그렇지 않으면 Windows와 마찬가지로 이전 설정으로 되돌아갑니다.


1
TigerVNC, CentOS 또는 창 관리자의 설정입니까?
Nathan Fellman 2018 년

이것은 CentOS의 설정입니다. 로그인하면 'TigerVNC Viewer'에서 액세스 할 수 있습니다.
Hammad Khan

2
이 안전한 내 인생
유 지아

9

여러분 이건 정말 간단합니다.

ssh파이에 로그인

실행하다

vncserver -geometry 1200x1600

이것은 새로운 세션을 생성합니다 :1

에서 VNC 클라이언트와 연결 ipaddress:1

그게 다야.


7
기존 세션의 해상도를 변경하지 않고 새로운 세션을 생성하기 때문에 잘못된 답변입니다.
Nathan Fellman

6

Nathan의 (허용되는) 답변에 추가 :

해결 목록을 살펴보고 싶었지만 아무것도 보지 못했습니다.

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

현재 색인을 가져오고 다음 색인으로 이동하여 오류가 발생하면 0으로 돌아갑니다 (예 : 종료).


편집하다

이후 버전의 xrandr와 일치하도록 수정되었습니다 ( "*"는 줄 끝에 있으며 주요 해상도 식별자가 없습니다).

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

3

@omiday의 솔루션은 Xvnc TigerVNC 1.1.0에서 나를 위해 일했기 때문에 단일 bash 함수 vncsize xy 로 압축했습니다 . 다음과 같이 사용하십시오 : vncsize 1400 1000 . 모든 VNC 출력 이름 "default"또는 "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

아마도 내가 게시 한 가장 무식한 답변 일 것입니다 : TigerVNC 클라이언트 / 뷰어를 사용하고 'Resize remote session to local window'옵션의 화면 탭에서 확인하십시오 .

TigerVNC 클라이언트가 $ v # @ TigerVNC 클라이언트가 원격 vncserver 또는 xrandr 또는 Xvnc 또는 gnome을 알려주는 것을 모르지만 TigerVNC 클라이언트 창을 변경하면 크기가 조정됩니다.

내 설정 :

  • CentOS 6에서 실행되는 Tiger VNC 서버 6. 그놈 데스크탑 호스팅. (RHEL 6.6에서도 작동)
  • Tiger VNC Client가 설치된 Windows 버전.

이로 인해 해상도는 클라이언트 창의 크기에 맞게 변경되며 zooming실제 해상도는 변경 되지 않습니다 (xrandr 출력에서 ​​새로운 해상도를 볼 수 있음).

나는 xrandr에 새로운 해상도를 추가하기 위해 최선을 다했지만 아무 소용이 없으면 항상 'xrandr: Failed to get size of gamma for output default'오류가 발생합니다.

현재 나를 위해 작동하는 버전 (과거에는 어떤 버전에서도 문제가 없었지만 최신을 사용하여 설치하고 yum install gnome-* tigervnc-server정상적으로 작동합니다).

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.

클라이언트 / 서버에 어떤 버전의 TigerVNC를 사용하고 있습니까? 오늘 이것을 시도했지만 자동으로 크기가 조정되지 않습니다. 서버 및 vncviewer-1.4.3.exe 클라이언트 용 Xvnc TigerVNC 1.1.0을 실행하는 RHEL 6.2를 사용하고 있습니다
cdwilson

@cdwilson 클라이언트를 전체 화면 모드로 사용해보기를 바랍니다. 추가 된 버전. HTH
Kashyap

1.1.0이 우리의 작업 기계에서 실행중인 것으로 잘 작동하지 않는 것으로 나타났습니다. 내 $HOME디렉토리 에서 최신 1.4.3을 실행하면 예상대로 작동합니다. github.com/TigerVNC/tigervnc/issues/155
cdwilson

확인 : openSuse 15.1, GDM, KDE 플라즈마, TigerVNC 클라이언트 1.9.0. 내 원격 데스크톱의 해상도는 클라이언트 창의 크기, 미친 특별한 해상도, 종횡비를 따릅니다. GDM 또는 KDE에서 기본적으로 매력처럼 작동하며 클라이언트 또는 서버의 어느 곳에도 설정할 필요가 없습니다.
Espinosa

1

Linux에 대해서는 잘 모르겠지만 Windows에서는 tightvnc가 서버의 해상도 변경을 감지하고 적용합니다.

따라서 워크 스테이션으로 VNC를 수행하고, 데스크탑을 마우스 오른쪽 버튼으로 클릭하고, 속성을 설정하고, 해상도를 무엇이든 설정하고, 클라이언트 vnc 창의 크기를 적절히 조정할 수 있어야합니다.


1

반면, 기존 창을 한 X 서버에서 다른 X 서버로 이동하는 방법이 있으면 문제가 해결 될 수 있습니다.

xmove 를 사용 하여 두 개의 별도 x 서버간에 창을 이동할 수 있다고 생각 합니다. 따라서 작동하면 해상도를 변경하는 것만 큼 쉽지는 않지만 원하는 것을 수행 할 수있는 방법을 제공해야합니다.


SuSE Linux에서 xmove가 다른 이름으로 사용되는지 알고 있습니까?
Nathan Fellman

@NathanFellman xpra를 보셨습니까? 최신 응용 프로그램이지만 비슷한 도구 en.wikipedia.org/wiki/Xprasoftware.opensuse.org/package/xpra 입니다.
DDay

IT 부서에서 원격 액세스 도구를 선택하는 대기업에서 근무하고 있기 때문에 이에 대한 통제력이
부족

0

내가 아는 한 "모니터 미러링"응용 프로그램이므로 VNC 만 사용하여 클라이언트의 해상도를 변경할 수있는 방법이 없습니다.

그러나 TightVNC (VNC 클라이언트 및 서버 응용 프로그램)는 클라이언트 쪽의 화면 크기를 조정할 수 있습니다. 즉, 그래픽 프로그램의 이미지 크기 조정 기술과 유사하게 모든 것을 조금 더 작게 만들 수 있습니다. 너무 작은 글꼴 크기를 사용하지 않으면 작동합니다. VNC는 이론적으로 다른 VNC 애플리케이션간에 호환 가능해야합니다.


질문은 엄격히 리눅스 질문이며,이 Windows 답변은 여기에 적용되지 않습니다. Windows에서 VNC는 모니터 일 뿐이지 만 Linux에서는 가상 데스크탑이 FIRST였으며 나중에 일부 버전에서만 '디스플레이 0'지원 (예 : 모니터)이 추가되었습니다. VNC 스케일링은 매우 열악한 사용자 경험입니다.
nhed

0

다음과 같은 간단한 아이디어가 있습니다.

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

글쎄, 나는 리눅스와 비슷한 SO의 모든 디스플레이 장치에 대해 더 나은 솔루션이 필요하다.


-3

나는 그것이 당신의 창 관리자에 달려 있다고 생각합니다.

저는 Windows 사용자이므로 잘못된 추측 일 수 있습니다. Linux 시스템에서 실행중인 X-Server 라는 것이 있습니까? 적어도 VNC의 대상이 될 수있는 시스템에서 " X- 클라이언트 "?

VNC는 화면에있는 모든 것을 가져 와서 "네트워크를 통해 터널링"합니다. 내가 완전히 틀리지 않으면 "X"프로토콜은 클라이언트의 데스크톱 해상도를 사용할 수있는 기회를 제공해야합니다.

주고 X-서버 당신에게 대략적인 개요를 제공 할 수 위키 백과 시도에.


아이디어는 좋으며 ssh 터널과 로컬 x 서버를 사용하여 수행 할 수 있습니다. 컴퓨터에 x 서버가 있고 원격 클라이언트에게 x 서버에 대한 액세스 권한을 부여하면 원격 응용 프로그램의 GUI가 디스플레이에 표시됩니다.
andho

@andho 아니 이것은 포스터가 전혀 요구 한 것이 아닙니다. 여기서 문제는 연결이 끊어지면 widnows를 잃어 버릴 것입니다. 터널을 통해 열리는 창은 단기 응용 프로그램에만 유용합니다. 한 클라이언트에서 다른 클라이언트로 데스크탑 (및 열려있는 모든 응용 프로그램)을 가져
가려는 경우가 아닙니다

@ nhed, 이것이 실제로 실용적인지 모르겠지만 아이디어입니다. 장기 앱의 경우 '스크린'프로그램을 사용할 수 있습니까?
andho

텍스트 전용 앱의 경우 @andho 화면이 훌륭합니다 ... OP는 X 앱에 대해 묻고 ... 그리고 같은 것을 찾고 있었기 때문에 웹 의이 구석에 도착했으며 xranr 또는 옷장에서 xmove (xrandr가 더 깨끗한 옵션)
nhed

@ nhed, 그렇습니다. 이것은 내가 너무 문제입니다. 더 많은 경험이있는 사람이 그 아이디어를 버리기 만하면 가능한지 테스트하지 않고도 아이디어를 얻을 수 있습니다.
andho
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.