Mengubah resolusi sesi VNC di linux [ditutup]

153

Saya menggunakan VNC untuk terhubung ke workstation Linux di tempat kerja. Di tempat kerja saya memiliki monitor 20 "yang beroperasi pada 1600x1200, sementara di rumah saya menggunakan laptop saya dengan resolusi 1440x900. Jika saya mengatur vncserver untuk berjalan pada 1440x900 saya kehilangan banyak ruang pada monitor saya, sedangkan jika saya atur agar berjalan pada 1600x1200 itu tidak muat di layar laptop, dan saya harus menggulirnya sepanjang waktu.

Apakah ada cara yang baik untuk mengubah ukuran sesi VNC dengan cepat?

Server VNC saya adalah RealVNC E4.x (saya tidak ingat versi persisnya) berjalan pada SuSE64.

Nathan Fellman
sumber
Saya ingin menyebutkan sesuatu yang saya temui baru-baru ini tetapi saya belum bisa mengujinya. Ada program baru bernama FreeNX yang telah ditetapkan sebagai pengganti VNC. Berikut tautannya: freenx.berlios.de
andho
@andho - Tautan itu tampaknya rusak.
ArtOfWarfare
@ArtOfWarfare berharap ini membantu help.ubuntu.com/community/FreeNX . Seharusnya sudah cukup stabil sekarang. Saya pikir saya akan segera mencobanya, karena waktu memungkinkan.
andho

Jawaban:

159

Server VNC nyata 4.4 mencakup dukungan untuk Xrandr, yang memungkinkan untuk mengubah ukuran VNC. Mulai server dengan:

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

Kemudian ubah ukurannya dengan:

xrandr -s 1600x1200
xrandr -s 1440x900
xrandr -s 1024x768
Nathan Fellman
sumber
1
Terima kasih Nathan, bahkan orang-orang realvnc tampaknya tidak menekankan fitur xrandr ... Lihat juga fungsi bash saya di bawah ini untuk memungkinkan bersepeda melalui resolusi randr.
nhed
7
Anda mungkin merasa nyaman untuk meletakkan semua opsi ini dalam .vnc/configfile. Sebagai contoh, baris pertama konfigurasi saya adalah:-randr 800x600,1024x768,1280x800,1280x960,1280x1024,1680x1050,1920x1080,3360x1050,1024x700,1200x740,1600x1000,3200x1000
bfroehle
@Nathan Saya mencoba menggunakan solusi yang Anda berikan tetapi tidak berhasil. dapatkah Anda mencoba menjawab pertanyaan saya ini?
Geek
3
Saya ingin tahu apakah ini bekerja dengan baik tightvncserver?
Dimitry K
4
@ DemitryK Saya punya tightvncserver dan tidak berhasil. Saya membersihkannya dan menginstal VNC nyata. Saya merekomendasikannya. Semua resolusi lansekap: 320x240,480x320,482x320,560x360,576x360,640x480,640x482,648x486,720x480,720x486,720x576,768x5,80x800,1024x600,80240080780mem 1600x900,1600x1024,1600x1200,1680x1050,1920x1080,1920x1200,2048x1024,2048x1152,2048x1536,2560x1040,2560x1600,2560x2036,3072xletebesarbesardimusik
barwnikk
68

Mengetahui bahwa vnc4server (4.1.1) yang dikirimkan dengan Ubuntu (10.04) telah ditambal untuk juga mendukung perubahan resolusi dengan cepat melalui xrandr. Sayangnya fitur itu sulit ditemukan karena tidak berdokumen. Jadi begini...

Mulai server dengan beberapa contoh 'geometri', seperti:

vnc4server -geometry 1280x1024 -geometry 800x600

Dari terminal dalam vncviewer (dengan: 'memungkinkan ukuran desktop dmanmanik' diaktifkan) gunakan xrandr untuk melihat mode yang tersedia:

xrandr

untuk mengubah resulution, misalnya gunakan:

xrandr -s 800x600

Itu dia.

Tijs
sumber
Saya mencoba menggunakan pendekatan Anda juga bersama dengan yang disarankan oleh Nathan tetapi tidak berhasil. Bisakah Anda melihat apa yang hilang di sini?
Geek
Bekerja dengan sempurna. Terima kasih!
Roney Michael
27

Saya menjalankan TigerVNC di server Linux saya, yang memiliki dukungan randr dasar . Saya baru saja memulai vncserver tanpa opsi -randr atau multiple -geometry.

Ketika saya menjalankan xrandr di terminal, ini akan menampilkan semua resolusi layar yang tersedia:

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

Saya kemudian dapat dengan mudah beralih ke resolusi lain (fe beralih ke 1360x768):

bash> xrandr -s 5

Saya menggunakan penampil TightVnc sebagai klien dan secara otomatis beradaptasi dengan resolusi baru.

Peter
sumber
sehingga orang-orang tidak melakukan pengejaran angsa liar dapatkah Anda mendaftar versi TigerVnc dan versi distribusi server linux Anda? Terima kasih
nhed
Saya dapat mengkonfirmasi bahwa itu bekerja cukup baik dengan TiverVnc 1.1.0 (server Linux, klien Linux)
Benedikt Waldvogel
1
Saya menggunakan vncviewer dan setiap kali saya mencoba mengubah resoultion jendela ditutup.
AWE
bolehkah saya bertanya kepada Anda versi xrandr mana ini? Milik saya: program xrandr versi 1.3.5 Laporan server RandR versi 1.3 tampaknya sangat berbeda, misalnya tidak memiliki kolom pertama
Wakan Tanka
Hanya untuk menambahkan bahwa itu berfungsi dengan Real VNC sebagai klien juga. Diuji untuk versi 6.0.3
Vivek VK
25

Saya pikir yang terbaik adalah menjalankan server VNC dengan geometri yang berbeda pada port yang berbeda. Saya akan mencoba berdasarkan halaman manual

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

Kemudian Anda dapat terhubung dari kantor ke satu port dan dari rumah ke port lainnya.

Sunting: Kemudian gunakan xmove untuk memindahkan windows antara dua x-server.

Menepuk
sumber
3
@Pat, masalah dengan solusi Anda adalah bahwa saya tidak dapat dengan mudah memindahkan jendela dari satu sesi VNC ke yang lain. Jika saya di tengah-tengah beberapa debug ketika saya harus pergi, saya ingin dapat mengambil di mana saya tinggalkan (mungkin dengan windows bergerak sedikit karena ukuran). Jika saya memiliki dua sesi terpisah, saya tidak akan dapat melanjutkan yang sama seperti sebelumnya, karena saya harus menutup jendela dari satu sesi dan membukanya kembali di sesi lain. Di sisi lain, jika ada cara untuk memindahkan jendela yang ada dari satu X-server ke yang lain, itu mungkin memecahkan masalah.
Nathan Fellman
1
xmove tidak ada dalam repositori Ubuntu saat ini; xpra adalah, yang akan melakukan hal yang sama (bertindak sebagai proxy X).
Sam Hartsfield
20

Ketika pertanyaan ini muncul pertama kali di Google, saya pikir saya akan membagikan solusi menggunakan TigerVNC yang merupakan standar akhir-akhir ini.

xrandrmemungkinkan memilih mode tampilan (resolusi alias) namun karena modeline yang dikodekan oleh modeline tambahan seperti "2560x1600" atau "1600x900" perlu ditambahkan ke dalam kode . Saya pikir pengembang yang menulis kode jauh lebih pintar dan daftar kode keras hanyalah contoh nilai. Ini mengarah pada kesimpulan bahwa harus ada cara untuk menambahkan modelines khusus dan man xrandrmengonfirmasinya.

Dengan latar belakang itu jika tujuannya adalah untuk berbagi sesi VNC antara dua komputer dengan resolusi di atas dan dengan asumsi bahwa server VNC adalah komputer dengan resolusi "1600x900":

  1. Mulai sesi VNC dengan geometri yang cocok dengan tampilan fisik:

    $ vncserver -geometry 1600x900 :1
    
  2. Pada komputer "2560x1600", aktifkan penampil VNC (saya lebih suka Remmina) dan sambungkan ke sesi VNC jarak jauh:

    host:5901
    
  3. Begitu masuk sesi VNC memulai jendela terminal.

  4. Konfirmasikan bahwa geometri baru tersedia di sesi 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  
    

    dan Anda akan melihat layarnya cukup kecil.

  5. Daftar modeline (lihat artikel xrandr di ArchLinux wiki) untuk resolusi "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
    

    atau jika monitor sudah tua, dapatkan timing 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. Tambahkan modeline baru ke sesi VNC saat ini:

    $ xrandr --newmode "2560x1600_60.00"  348.16  2560 2752 3032 3504  1600 1601 1604 1656 -HSync +Vsync
    
  7. Pada tampilan xrandroutput di atas untuk nama tampilan di baris kedua:

    VNC-0 connected 1600x900+0+0 0mm x 0mm
    
  8. Bind modeline baru ke monitor virtual VNC saat ini:

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

    $ xrandr -s "2560x1600_60.00"
    
omiday
sumber
menggunakannya untuk membuat ruang kerja yang lebih besar dengan tigervnc dan mwm, ia bekerja untuk meningkatkan ukuran layar, tetapi ruang kerja terbatas pada ukuran awal yang digunakan oleh vnc.
user2019716
Ini karena mwm, ruang penuh dieksploitasi begitu mwm dihidupkan ulang
user2019716
Cemerlang, terima kasih banyak untuk resepnya, ini sangat membantu.
Adrian Rosoga
Ini menyelamatkan saya banyak waktu, terima kasih!
Ben Davis
17

Menariknya tidak ada yang menjawab ini. Di TigerVNC, saat Anda masuk ke sesi. Pergi ke System > Preference > Displaydari bilah menu atas (saya menggunakan Cent OS sebagai Server jarak jauh saya). Klik pada resolusi turun ke bawah, ada berbagai pengaturan yang tersedia termasuk 1080p. Pilih yang Anda suka. Ini akan berubah dengan cepat.

masukkan deskripsi gambar di sini

Pastikan Anda Menerapkan pengaturan baru saat dialog diminta. Kalau tidak, itu akan kembali ke pengaturan sebelumnya seperti di Windows

Hammad Khan
sumber
1
Apakah ini pengaturan TigerVNC, CentOS atau window manager?
Nathan Fellman
Ini adalah pengaturan di CentOS. Anda dapat mengaksesnya dari 'TigerVNC Viewer' saat Anda masuk.
Hammad Khan
2
ini menyelamatkan hidupku
Yu Jiaao
9

Cowok ini sangat sederhana.

login via sshke pi Anda

menjalankan

vncserver -geometry 1200x1600

Ini akan menghasilkan sesi baru :1

terhubung dengan klien vnc Anda di ipaddress:1

Itu dia.

Will Berger
sumber
7
Itu jawaban yang salah, karena itu tidak akan mengubah resolusi dari sesi yang ada, tetapi hanya membuat yang baru.
Nathan Fellman
6

Menambahkan ke jawaban Nathan (diterima):

Saya ingin menelusuri daftar resolusi tetapi tidak melihat apa-apa untuk itu:

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

Itu mendapatkan indeks saat ini, langkah-langkah ke yang berikutnya dan siklus kembali ke 0 pada kesalahan (yaitu akhir)


EDIT

Dimodifikasi agar sesuai dengan versi xrandr yang lebih baru ("*" ada di akhir baris dan tidak ada pengidentifikasi resolusi terkemuka).

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

Solusi oleh @omiday bekerja untuk saya di Xvnc TigerVNC 1.1.0, jadi saya memadatkannya menjadi fungsi bash tunggal vncsize xy . Gunakan seperti ini: vncsize 1400 1000 . Ini berfungsi untuk nama output VNC, "default" atau "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
}
Nicholas Sushkin
sumber
2

Mungkin jawaban yang paling bodoh yang saya posting tetapi begini: Gunakan TigerVNC client / viewer dan centang di 'Resize remote session to local window'bawah tab Screen of options.

Saya tidak tahu apa yang dikatakan $% # @ klien TigerVNC vncserver jarak jauh atau xrandr atau Xvnc atau gnome atau ... tapi itu berubah ukuran ketika saya mengubah jendela TigerVNC Client.

Pengaturan saya:

  • Tiger VNC Server berjalan pada CentOS 6. Hosting desktop GNOME. (Bekerja dengan RHEL 6.6 juga)
  • Windows beberapa versi dengan Tiger VNC Client.

Dengan ini resolusi berubah agar sesuai dengan ukuran jendela klien tidak peduli apa itu, dan tidak zooming, itu perubahan resolusi yang sebenarnya (saya bisa melihat resolusi baru dalam output xrandr).

Saya mencoba semua yang saya bisa untuk menambahkan resolusi baru ke xrandr, tetapi tidak berhasil, selalu berakhir dengan 'xrandr: Failed to get size of gamma for output default'kesalahan.

Versi yang berfungsi untuk saya saat ini (walaupun saya tidak memiliki masalah dengan versi APA SAJA di masa lalu, saya hanya menginstal menggunakan terbaru yum install gnome-* tigervnc-serverdan berfungsi dengan baik):

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.
Kashyap
sumber
Versi TigerVNC apa yang Anda gunakan untuk klien / server Anda? Saya mencoba ini hari ini dan tidak secara otomatis mengubah ukuran untuk saya. Saya menggunakan RHEL 6.2 menjalankan Xvnc TigerVNC 1.1.0 untuk server dan klien vncviewer-1.4.3.exe
cdwilson
@cdwilson Semoga Anda mencoba dengan klien dalam mode layar penuh. Versi yang ditambahkan. HTH
Kashyap
ternyata 1.1.0 tidak cocok dengan apa pun yang mereka jalankan di mesin kerja kami. Menjalankan 1.4.3 terbaru dari $HOMEdirektori saya berfungsi seperti yang diharapkan github.com/TigerVNC/tigervnc/issues/155
cdwilson
Dikonfirmasi: openSuse 15.1, GDM, KDE Plasma, TigerVNC client 1.9.0. Resolusi desktop jarak jauh saya mengikuti ukuran jendela klien berapa pun, resolusi ad-hoc gila, rasio aspek apa pun; dalam GDM atau KDE. Bekerja seperti pesona, di luar kotak, tidak perlu mengatur apa pun di mana pun di klien atau server.
Espinosa
1

Saya tidak yakin tentang linux, tetapi di bawah windows, tightvnc akan mendeteksi dan beradaptasi dengan perubahan resolusi pada server.

Jadi Anda harus dapat VNC ke workstation, melakukan yang setara dengan klik kanan pada desktop, properti, atur resolusi ke apa pun, dan minta klien Anda mengubah ukuran jendela vnc sendiri.

Blorgbeard keluar
sumber
1

Di sisi lain, jika ada cara untuk memindahkan jendela yang ada dari satu X-server ke yang lain, itu mungkin memecahkan masalah.

Saya pikir Anda dapat menggunakan xmove untuk memindahkan windows antara dua x-server yang terpisah. Jadi jika itu berhasil, ini setidaknya harus memberi Anda cara untuk melakukan apa yang Anda inginkan walaupun tidak semudah mengubah resolusi.

Menepuk
sumber
Anda tahu apakah xmove menggunakan nama lain di SuSE Linux?
Nathan Fellman
@NathanFellman apakah Anda sudah melihat xpra? Ini adalah aplikasi yang lebih baru tetapi alat serupa en.wikipedia.org/wiki/Xpra dan software.opensuse.org/package/xpra .
DDay
Saya tidak punya banyak kendali atas ini, karena saya bekerja di sebuah perusahaan besar di mana IT memilih alat akses jarak jauh
Nathan Fellman
0

Sejauh yang saya tahu tidak ada cara untuk mengubah resolusi klien hanya menggunakan VNC, karena itu hanya aplikasi "monitor mirroring".

Namun TightVNC (yang merupakan aplikasi klien dan server VNC) dapat mengubah ukuran layar di sisi klien, yaitu membuat segalanya sedikit lebih kecil (mirip dengan teknik pengubahan ukuran gambar dalam program grafik). Itu akan berhasil jika Anda tidak menggunakan ukuran font yang terlalu kecil. VNC secara teoritis harus kompatibel antara aplikasi VNC yang berbeda.

BlaM
sumber
pertanyaannya adalah pertanyaan linux, jawaban windows ini tidak berlaku di sini. Di windows VNC hanyalah sebuah monitor, tetapi di Linux itu adalah PERTAMA desktop virtual dan hanya kemudian beberapa versi menambahkan dukungan 'display 0' (yaitu monitor). VNC Scaling adalah pengalaman pengguna yang sangat buruk.
nhed
0

Saya punya ide sederhana, sesuatu seperti ini:

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

Yah, saya butuh solusi yang lebih baik untuk semua perangkat layar di Linux dan Similars SO

inukaze
sumber
-3

Saya pikir itu tergantung pada manajer jendela Anda.

Saya pengguna windows, jadi ini mungkin dugaan yang salah, tetapi: Apakah tidak ada sesuatu yang disebut X-Server yang berjalan pada mesin linux - setidaknya pada yang mungkin menjadi target menarik untuk VNC - yang dapat Anda hubungi dengan " X-Klien "?

VNC hanya mengambil semua yang ada di layar dan "terowongan melalui jaringan Anda". Jika saya tidak sepenuhnya salah maka protokol "X" akan memberi Anda kesempatan untuk menggunakan resolusi desktop klien Anda.

Give X-Server di Wikipedia mencoba, yang mungkin memberi Anda gambaran kasar.

BlaM
sumber
idenya bagus dan dapat dilakukan dengan menggunakan ssh tunnel dan x-server lokal. Anda memiliki x-server pada mesin Anda dan Anda memberikan akses klien jarak jauh kepada Anda x-server yang akan membuat gui aplikasi jarak jauh pada tampilan Anda.
andho
@dan tidak, ini sama sekali bukan yang diminta poster - masalahnya di sini adalah Anda akan kehilangan janda ketika kehilangan konektivitas. Jendela pembuka di atas terowongan hanya berguna untuk aplikasi jangka pendek, tidak jika Anda ingin membawa desktop (dan semua aplikasi terbuka) dari satu klien ke yang lain ...
nhed
@ nhed, saya tidak tahu apakah ini bahkan praktis sama sekali, tapi itu ide. Sedangkan untuk aplikasi jangka panjang, mungkin program 'layar' dapat digunakan?
andho
@dan layarnya luar biasa, untuk aplikasi teks saja ... OP bertanya tentang aplikasi X ... dan saya tiba di sudut web ini karena saya mencari hal yang sama dan sepertinya sesuatu seperti xranr atau Pindahkan barang-barang lemari (xrandr menjadi pilihan yang lebih bersih)
nhed
@ nhed, ya ini masalah yang saya alami juga. Hanya melempar ide itu ke luar sana sehingga seseorang yang lebih berpengalaman dapat mencoretnya, tanpa saya harus menguji apakah itu mungkin.
andho