Linux'ta VNC oturumunun çözünürlüğünü değiştirme [kapalı]


153

İş yerinde bir Linux iş istasyonuna bağlanmak için VNC kullanıyorum. İş yerinde, 1600x1200 hızında çalışan 20 inçlik bir monitöre sahibim, evde ise 1440x900 çözünürlüğüyle dizüstü bilgisayarımı kullanıyorum. Vncserver'ı 1440x900'de çalışacak şekilde ayarlarsam, monitörümde çok fazla alan kaçırırsam, dizüstü bilgisayarın ekranına sığmayacak şekilde 1600x1200'de çalışacak şekilde ayarladım ve sürekli kaydırmam gerekiyor.

VNC oturumunu anında yeniden boyutlandırmanın iyi bir yolu var mı?

VNC sunucum SuSE64 üzerinde çalışan RealVNC E4.x (tam sürümünü hatırlamıyorum).


Son zamanlarda karşılaştığım bir şeyden bahsetmek istiyorum, ancak henüz test edemedim. VNC'nin yerini alacak olan FreeNX adlı yeni bir program var. Bağlantı: freenx.berlios.de
andho

@andho - Bu bağlantı kopmuş gibi görünüyor.
ArtOfWarfare

@ArtOfWarfare bunun help.ubuntu.com/community/FreeNX'e yardımcı olacağını umuyoruz . Şimdiye kadar oldukça kararlı olmalı. Sanırım, zamanın elverdiği gibi yakında deneyeceğim.
andho

Yanıtlar:


159

Gerçek VNC sunucusu 4.4, VNC'nin yeniden boyutlandırılmasına izin veren Xrandr desteği içerir. Sunucuyu şununla başlatın:

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

Sonra yeniden boyutlandır:

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

1
Teşekkürler Nathan, realvnc millet bile xrandr özelliğini vurgulamıyor gibi görünüyor ... Ayrıca randr çözünürlüklerinde bisiklet sürmeye izin vermek için aşağıdaki bash fonksiyonuma bakın.
nhed

7
Bu seçeneklerin tümünü bir .vnc/configdosyaya koymayı uygun bulabilirsiniz . Örneğin, yapılandırmamın ilk satırı:-randr 800x600,1024x768,1280x800,1280x960,1280x1024,1680x1050,1920x1080,3360x1050,1024x700,1200x740,1600x1000,3200x1000
bfroehle

@Nathan verdiğiniz çözümü kullanmaya çalıştım ama başarılı olamadım. lütfen bu soruyu
Geek

3
Bunun işe yarayıp yaramadığını merak ediyorum tightvncserver?
Dimitry K

4
@DimitryK Sıkıvncserver'ım vardı ve çalışmıyor. Temizledim ve gerçek VNC kurdum. Bunu öneririm. Tüm manzara çözünürlükleri: 320x240,480x320,482x320,560x360,576x360,640x480,640x482,648x486,720x480,720x486,720x540,720x576,768x576,800x480,800x600,1024x600,1024x768,1280x720,1280x800,1280x1024x14,140014 1600x900,1600x1024,1600x1200,1680x1050,1920x1080,1920x1200,2048x1024,2048x1152,2048x1536,2560x1080,2560x1440,2560x1600,2560x2048,3072x1536,3072x1728,3840x2160,4096x2048,4096x2304,7680x4320,8192x4096,8192x4608.
barwnikk

68

Ubuntu (10.04) ile birlikte gelen vnc4server'ın (4.1.1), xrandr aracılığıyla anında çözünürlüğün değiştirilmesini desteklemek için yamalı olduğunu öğrendi. Ne yazık ki özellik bulması zordu çünkü belgelenmemiş. İşte burada...

Sunucuyu, aşağıdakiler gibi birden çok 'geometri' örneği ile başlatın:

vnc4server -geometry 1280x1024 -geometry 800x600

Bir vncviewer'daki bir terminalden ('dymanic masaüstü yeniden boyutlandırmasına izin ver' etkinken), mevcut modları görüntülemek için xrandr kullanın:

xrandr

sonucu değiştirmek için, örneğin şunu kullanın:

xrandr -s 800x600

Bu kadar.


Yaklaşımınızı Nathan'ın önerdiği yaklaşımla birlikte kullanmaya çalıştım ama başarılı olamadım. Burada
Geek

Mükemmel çalıştı. Teşekkürler!
Roney Michael

27

Koşuyorum TigerVNC temel vardır benim Linux sunucu üzerinde randr desteği. Vncserver'ı herhangi bir -randr veya çoklu-geometri seçeneği olmadan başlatıyorum.

Bir terminalde xrandr'ı çalıştırdığımda, mevcut tüm ekran çözünürlüklerini görüntüler:

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

Daha sonra kolayca başka bir çözünürlüğe geçebilirim (fe 1360x768'e geçer):

bash> xrandr -s 5

TightVnc görüntüleyiciyi istemci olarak kullanıyorum ve otomatik olarak yeni çözünürlüğe uyarlanıyor.


böylece millet vahşi kaz kovalamaca gitmeyin hem TigerVnc sürümünü hem de linux sunucu dağıtım + sürümünü listeleyebilir misiniz? Teşekkürler
nhed

TiverVnc 1.1.0 (Linux sunucusu, Linux istemcisi) ile oldukça iyi çalıştığını doğrulayabilirim
Benedikt Waldvogel

1
Vncviewer kullanıyorum ve her zaman pencere kapatır resoultion değiştirmeye çalışın.
AWE

size hangi xrandr sürümü olduğunu sorabilir miyim. Mine: xrandr program sürümü 1.3.5 Sunucu raporları RandR sürüm 1.3 tamamen farklı görünüyor, örneğin ilk sütun yok
Wakan Tanka

Sadece bir istemci olarak Real VNC ile çalıştığını eklemek için. 6.0.3 sürümü için test edildi
Vivek VK

25

En iyisinin VNC sunucusunu farklı bir bağlantı noktasında farklı bir geometri ile çalıştırmak olduğunu düşünüyorum. Man sayfasına göre denerdim

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

Daha sonra işten bir porta ve evden diğerine bağlanabilirsiniz.

Düzenleme: Daha sonra pencereleri iki x sunucusu arasında taşımak için xmove komutunu kullanın.


3
@Pat, çözümünüzle ilgili sorun, bir pencereyi bir VNC oturumundan diğerine kolayca taşıyamam. Eğer ayrılmak zorunda kaldığım bazı hata ayıklama ortasında iseniz, ben bıraktığım yerden almak mümkün olmak istiyorum (belki windows yeniden boyutlandırma nedeniyle biraz taşındı). İki ayrı oturumum varsa, öncekiyle aynı şekilde devam edemeyeceğim, çünkü bir oturumdaki pencereleri kapatıp başka bir oturumda tekrar açmam gerekecek. Öte yandan, varolan bir pencereyi bir X sunucusundan diğerine taşımanın bir yolu varsa, bu sorunu çözebilir.
Nathan Fellman

1
xmove şu anki Ubuntu deposunda değil; xpra, aynı şeyi yapacak (X proxy gibi davranacak).
Sam Hartsfield

20

Bu soru Google'da ilk ortaya çıktığında, bu günlerde varsayılan olan TigerVNC'yi kullanarak bir çözüm paylaşacağımı düşündüm.

xrandrgörüntüleme modlarının (diğer çözünürlükler olarak) seçilmesine izin verir, ancak sabit kodlanmış modellerden dolayı "2560x1600" veya "1600x900" gibi herhangi bir ek modelin koda eklenmesi gerekir . Kod yazan geliştiricilerin çok daha akıllı olduğunu ve sabit kodlanmış listenin sadece değerlerin bir örneği olduğunu düşünüyorum. Özel modeller eklemenin bir yolu olması gerektiği sonucuna varır ve man xrandrbunu doğrular.

Amaç, yukarıdaki çözünürlüklerle iki bilgisayar arasında bir VNC oturumunu paylaşmak ve VNC sunucusunun "1600x900" çözünürlüğe sahip bilgisayar olduğunu varsayarsak:

  1. Fiziksel göstergeyle eşleşen bir geometriyle bir VNC oturumu başlatın:

    $ vncserver -geometry 1600x900 :1
    
  2. "2560x1600" bilgisayarında VNC görüntüleyiciyi başlatın (Remmina'yı tercih ederim) ve uzak VNC oturumuna bağlanın:

    host:5901
    
  3. VNC oturumuna girdikten sonra bir terminal penceresi açın.

  4. Yeni geometrinin VNC oturumunda mevcut olduğunu doğrulayın:

    $ 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  
    

    ve ekranın oldukça küçük olduğunu fark edeceksiniz.

  5. "2560x1600" çözünürlüğü için modelini listeleyin (ArchLinux wiki'deki xrandr makalesine bakın):

    $ 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
    

    veya monitör eskiyse GTF zamanlamalarını alın:

    $ 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. Geçerli VNC oturumuna yeni modelini ekleyin:

    $ xrandr --newmode "2560x1600_60.00"  348.16  2560 2752 3032 3504  1600 1601 1604 1656 -HSync +Vsync
    
  7. Yukarıdaki xrandrçıktıda ikinci satırda görünen adı arayın:

    VNC-0 connected 1600x900+0+0 0mm x 0mm
    
  8. Yeni modeli mevcut VNC sanal monitörüne bağlayın:

    $ xrandr --addmode VNC-0 "2560x1600_60.00"
    
  9. Kullanın:

    $ xrandr -s "2560x1600_60.00"
    

tigervnc ve mwm ile daha büyük bir çalışma alanı oluşturmak için kullandı, ekran boyutunu artırmak için çalıştı, ancak çalışma alanı vnc tarafından kullanılan ilk boyutla sınırlıdır.
user2019716

Bu
mwm

Parlak, tarif için çok teşekkürler, gerçekten yardımcı oldu.
Adrian Rosoga

Bu bana çok zaman kazandırdı, teşekkürler!
Ben Davis

17

İlginçtir ki kimse buna cevap vermedi. TigerVNC'de, oturuma giriş yaptığınızda. Git System > Preference > DisplayÜst menü çubuğundan (benim uzaktan Sunucusu gibi Cent OS kullanıyordu). Çözünürlük açılır menüsünü tıklayın, 1080p dahil çeşitli ayarlar var. Beğendiğinizi seçin. Anında değişecek.

resim açıklamasını buraya girin

Bir iletişim kutusu istendiğinde yeni ayarı uyguladığınızdan emin olun. Aksi takdirde, tıpkı Windows'da olduğu gibi önceki ayara geri döner


1
Bu TigerVNC, CentOS veya pencere yöneticisinin bir ayarı mı?
Nathan Fellman

Bu, CentOS'ta bir ayardır. Giriş yaptığınızda 'TigerVNC Görüntüleyicisi'nden erişebilirsiniz.
Hammad Khan

2
bu güvenli hayatım
Yu Jiaao

9

Çocuklar bu gerçekten basit.

aracılığıyla giriş sshsenin pi içine

gerçekleştirmek

vncserver -geometry 1200x1600

Bu yeni bir oturum oluşturacak :1

vnc istemcinizle bağlantı kurun ipaddress:1

Bu kadar.


7
Bu yanlış bir cevaptır, çünkü mevcut bir oturumun çözünürlüğünü değiştirmez, sadece yeni bir oturum oluşturur.
Nathan Fellman

6

Nathan'ın (kabul edilen) cevabına ekleme:

Kararlar listesi arasında dolaşmak istedim ama bunun için bir şey görmedim:

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

Geçerli dizini alır, bir sonrakine geçer ve hata durumunda 0'a geri döner (yani son)


DÜZENLE

Xrandr'ın sonraki bir sürümüyle eşleşecek şekilde değiştirildi ("*" satır sonunda ve önde gelen çözünürlük tanımlayıcısı yok).

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

3

@Omiday'ın çözümü benim için Xvnc TigerVNC 1.1.0'da çalıştı, bu yüzden onu tek bir bash işlevi vncsize xy'de yoğunlaştırdım . Şunun gibi kullanın: vncsize 1400 1000 . Herhangi bir VNC çıkış adı, "varsayılan" veya "VNC-0" için çalışır.

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

Belki de gönderdiğim en cahil cevap ama işte gidiyor: TigerVNC istemcisini / görüntüleyicisini kullanın ve 'Resize remote session to local window'seçeneklerin Ekran sekmesi altında kontrol edin .

$% # @ TigerVNC istemcisinin uzak vncserver veya xrandr veya Xvnc veya gnome veya ne söylediğini bilmiyorum ama ... TigerVNC Client penceresini değiştirdiğimde yeniden boyutlandırılıyor.

Kurulumum:

  • CentOS 6 üzerinde çalışan Tiger VNC Sunucusu. GNOME masaüstünü barındırma. (RHEL 6.6 ile de çalışır)
  • Windows Tiger VNC İstemcisi ile bazı sürümleri.

Bununla, çözünürlük, ne olursa olsun istemci penceresinin boyutuna uyacak şekilde değişir ve zoominggerçek çözünürlük değişikliği (xrandr çıktısında yeni çözünürlüğü görebilirim).

Ben xrandr yeni bir çözünürlük eklemek için elimden geleni denedim, ama boşuna, her zaman 'xrandr: Failed to get size of gamma for output default'hata ile sonuçlanır .

Şu anda benim için çalıştığı sürümler (geçmişte HERHANGİ sürümlerle ilgili sorun yaşamamış olmama rağmen, sadece en son kullanımları yum install gnome-* tigervnc-serverve iyi çalışıyor):

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.

İstemciniz / sunucunuz için hangi TigerVNC sürümlerini kullanıyorsunuz? Bunu bugün denedim ve benim için otomatik olarak yeniden boyutlandırılmıyor. Sunucu ve vncviewer-1.4.3.exe istemcisi için Xvnc TigerVNC 1.1.0 çalıştırıyorum RHEL 6.2 kullanıyorum
cdwilson

@cdwilson Umarım istemciyle tam ekran modunda denediniz. Eklenen sürümler. HTH
Kashyap

1.1.0, iş makinelerimizde çalıştıkları her şeyle iyi oynamadığı ortaya çıkıyor. Dizimin en son 1.4.3 sürümünü çalıştırmak$HOME beklendiği gibi çalışıyor github.com/TigerVNC/tigervnc/issues/155
cdwilson

Onaylandı: openSuse 15.1, GDM, KDE Plazma, TigerVNC istemcisi 1.9.0. Uzak masaüstümün çözünürlüğü, istemci penceresinin boyutu ne olursa olsun, herhangi bir çılgın geçici çözünürlük, herhangi bir en boy oranı izler; GDM veya KDE. Kutudan çıkar çıkmaz bir cazibe gibi çalışır, istemci veya sunucu üzerinde herhangi bir yere ayarlamaya gerek yoktur.
Espinosa

1

Linux hakkında emin değilim, ancak pencereler altında tightvnc sunucudaki çözünürlük değişikliklerini algılar ve buna uyarlanır.

Bu nedenle, iş istasyonuna VNC yapabilmeniz, masaüstünde sağ tıklatma, özellikler, çözünürlüğü herhangi bir değere ayarlayabilmeniz ve istemcinizin vnc penceresinin kendisini buna göre yeniden boyutlandırmasını sağlayabilmelisiniz.


1

Öte yandan, varolan bir pencereyi bir X sunucusundan diğerine taşımanın bir yolu varsa, bu sorunu çözebilir.

Bence pencereleri iki ayrı x-server arasında taşımak için xmove kullanabilirsiniz . Bu yüzden eğer işe yararsa, bu en azından çözünürlüğü değiştirmek kadar kolay olmasa da istediğinizi yapmanın bir yolunu vermelidir.


Linux'ta xmove'nin başka bir isme sahip olup olmadığını biliyor musunuz?
Nathan Fellman

@NathanFellman xpra'ya baktın mı? Daha yeni bir uygulama ama benzer bir araç en.wikipedia.org/wiki/Xpra ve software.opensuse.org/package/xpra .
DDay

BT'nin uzaktan erişim araçlarını seçtiği büyük bir şirkette çalıştığım için bunun üzerinde çok fazla kontrolüm yok
Nathan Fellman

0

Bildiğim kadarıyla sadece bir "monitör yansıtma" uygulaması olduğu gibi, sadece VNC kullanarak müşterinin çözünürlüğünü değiştirmek için bir yolu yoktur.

Ancak TightVNC (bir VNC istemci ve sunucu uygulamasıdır) istemci tarafındaki ekranı yeniden boyutlandırabilir, yani her şeyi biraz daha küçük hale getirebilir (grafik programlarındaki görüntü yeniden boyutlandırma tekniklerine benzer). Çok küçük yazı tipi boyutları kullanmıyorsanız bu işe yarayacaktır. VNC teorik olarak farklı VNC uygulamaları arasında uyumlu olmalıdır.


soru kesinlikle linux sorusu, bu windows cevabı burada geçerli değil. Windows'da VNC sadece bir monitördür, ancak Linux'ta İLK sanal bir masaüstü idi ve sadece daha sonraki bazı sürümlerde 'display 0' desteği eklendi (yani monitör). VNC Ölçeklendirme oldukça zayıf bir kullanıcı deneyimidir.
nhed

0

Basit bir fikrim var, şöyle bir şey:

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

Linux ve Similars SO altındaki tüm ekran cihazları için daha iyi bir çözüme ihtiyacım var


-3

Bence bu pencere yöneticinize bağlı.

Windows kullanıcısıyım, bu yanlış bir tahmin olabilir, ancak: Linux makinelerinde çalışan X-Server diye adlandırılan bir şey yok - en azından VNC için ilginç hedefler olabileceklerde - X-Müşteriler "?

VNC sadece ekrandaki her şeyi alır ve "ağınız üzerinden tünel açar". Tamamen yanılmıyorsam, "X" protokolü size müşterinizin masaüstü çözünürlüğünü kullanma şansı vermelidir.

Ver X-Sunucusu size kaba bir bakış verebilir Wikipedia denemek üzerinde.


fikir iyi ve bir ssh tüneli ve yerel bir x-server kullanılarak yapılabilir. Makinenizde x-sunucusu var ve uzak istemcilerin size x-sunucunuza erişmesini sağladınız ve bu da uzak uygulamaların GUI'sini ekranınızda gösterecek.
andho

@veho hayır bu posterin hiç istediği şey değil - buradaki sorun, bağlantıyı kaybettiğinizde widnow'ları kaybedeceğinizdir. Tünel üzerindeki açılış pencereleri, masaüstünüzü (ve içindeki tüm açık uygulamaları) bir istemciden diğerine götürmek istiyorsanız, sadece kısa süreli uygulamalar için kullanışlıdır ...
nhed

@nhed, bunun hiç pratik olup olmadığını bilmiyorum, ama bu bir fikir. Uzun vadeli uygulamalara gelince, belki 'ekran' programı kullanılabilir?
andho

@andho ekranı sadece metin içeren uygulamalar için harika ... OP X uygulamaları hakkında soruyordu ... ve aynı şeyi arıyordum çünkü web'in bu köşesine geldim ve xranr gibi bir şey ya da dolap şeyler xmove (xrandr daha temiz bir seçenek olmak)
nhed

@nhed, evet bu da yaşadığım bir problem. Sadece bu fikri dışarı atmak, böylece daha deneyimli bir kişi, mümkün olup olmadığını test etmek zorunda kalmadan, onu ortaya çıkarabilir.
andho
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.