Зміна роздільної здатності сеансу VNC в Linux [закрито]


153

Я використовую VNC для підключення до робочої станції Linux на роботі. На роботі у мене 20-дюймовий монітор, який працює в 1600x1200, а вдома я використовую свій ноутбук з роздільною здатністю 1440x900. Якщо я встановити vncserver для роботи в 1440x900, я втрачаю багато місця на моніторі, тоді як якщо я налаштувати його на 1600x1200, він не поміщається на екрані ноутбука, і мені доведеться його постійно прокручувати.

Чи є хороший спосіб змінити розмір сеансу VNC на ходу?

Мій сервер VNC - RealVNC E4.x (я не пам’ятаю точної версії), що працює на SuSE64.


Я хотів би згадати щось, на що я зіткнувся нещодавно, але ще не зміг його перевірити. Існує нова програма під назвою FreeNX, яка стала заміною VNC. Ось посилання: freenx.berlios.de
andho

@andho - це посилання, здається, порушено.
ArtOfWarfare

@ArtOfWarfare сподіваємось, що це допоможе help.ubuntu.com/community/FreeNX . Наразі має бути досить стабільним. Я думаю, що скоро спробую, як дозволяє час.
andho

Відповіді:


159

Реальний сервер VNC 4.4 включає підтримку Xrandr, яка дозволяє змінити розмір VNC. Запустіть сервер із:

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

Потім змініть розмір за допомогою:

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

1
Спасибі Натане, навіть люди з 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?
Димитрій К

4
@DimitryK У мене був hardvncserver і не працює. Я прочистив його і встановив справжній VNC. Рекомендую. Усі роздільні здатності ландшафту: 320x240,480x320,482x320,560x360,576x360,640x480,640x482,648x486,720x480,720x486,720x540,720x576,768x576,800x480,800x600,1024x600,1024x768,1280x720,12x1200x220x220x220x220x220x220x1200,1280x220x220x1200,1280x220x1200,1280x220x1200,1280x1200,1280x120,1280x120,1280x120,1280x220x1200 1600x900,1600x1024,1600x1200,1680x1050,1920x1080,1920x1200,2048x1024,2048x1152,2048x1536,2560x1080,2560x1440,2560x1600,2560x2048,3072x1536,3072x1728,3840x2160,4096x2048,4080520520520520520520540520520520520540520520520520520520520520820
barwnikk

68

З'ясувалося, що vnc4server (4.1.1), що постачається з Ubuntu (10.04), виправлений, щоб також підтримувати зміну роздільної здатності на льоту через xrandr. На жаль, цю функцію було важко знайти, оскільки вона не є документальною. Так ось це ...

Запустіть сервер з кількох екземплярів "геометрії", наприклад:

vnc4server -geometry 1280x1024 -geometry 800x600

З терміналу в vncviewer (з: увімкнено 'дозволити зміна розміру робочого столу') використовуйте xrandr для перегляду доступних режимів:

xrandr

щоб змінити результат, наприклад, використовуйте:

xrandr -s 800x600

Це воно.


Я намагався використати ваш підхід, а також той, який запропонував Натан, але без успіху. Ви можете помітити, чого тут
Geek

Працювали чудово. Дякую!
Роні Майкл

27

Я запускаю TigerVNC на моєму сервері Linux, на якому є базовий randr підтримка . Я просто запускаю vncserver без будь-яких варіантів -randr або декількох -геометрії.

Коли я запускаю 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 (сервер Linux, клієнт Linux)
Benedikt Waldvogel

1
Я використовую vncviewer і кожен раз, коли я намагаюся змінити resoultion, вікно закриється.
AWE

я можу запитати вас, яка версія xrandr це. Моя: xrandr версія версії 1.3.5 Звіти сервера RandR версія 1.3 здається зовсім іншою, наприклад, не мають першого стовпця
Wakan Tanka

Просто додамо, що він також працює з Real VNC як клієнт. Тестовано на версію 6.0.3
Vivek VK

25

Я думаю, що найкраще - запустити сервер VNC з іншою геометрією на іншому порту. Я б спробував, спираючись на сторінку man

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

Тоді ви можете підключитися з роботи до одного порту та від дому до іншого.

Редагувати: Потім використовуйте xmove для переміщення вікон між двома x-серверами.


3
@Pat, проблема вашого рішення полягає в тому, що я не можу легко перенести вікно з одного сеансу VNC на інший. Якщо я опинився в середині якоїсь налагодження, коли мені доведеться виїхати, я хочу, щоб я міг вибрати місце, де я зупинився (можливо, з вікнами трохи перемістився через зміни розміру). Якщо у мене є два окремих сеанси, я не зможу продовжувати так само, як раніше, тому що мені доведеться закрити вікна з одного сеансу і повторно відкрити їх в інший. З іншого боку, якщо існує спосіб переміщення наявного вікна з одного X-сервера на інший, це може вирішити проблему.
Натан Фелман

1
xmove не знаходиться в поточному сховищі Ubuntu; xpra є, що буде робити те саме (виконувати функцію X-проксі).
Сем Хартсфілд

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. Перерахуйте моделін (див. Статтю xrandr у вікі ArchLinux) для роздільної здатності "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
    

    або якщо монітор старий, отримайте таймінги 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.
користувач2019716

Це завдяки mwm, повний простір експлуатується після перезапуску mwm
user2019716

Блискуче, спасибі за рецепт, це справді допомогло.
Адріан Росога

Це заощадило мені багато часу, дякую!
Бен Девіс

17

Цікаво, що ніхто не відповів на це. У TigerVNC, коли ви входите в сеанс. Перейдіть на System > Preference > Displayверхню панель меню (я використовував Cent OS як мій віддалений сервер). Натисніть на роздільну здатність, що випадає, доступні різні налаштування, включаючи 1080p. Виберіть той, який вам подобається. Це зміниться з льоту.

введіть тут опис зображення

Обов’язково застосуйте нове налаштування, коли буде запропоновано діалогове вікно. Інакше він повернеться до попереднього налаштування, як і в Windows


1
Це налаштування TigerVNC, CentOS або менеджера вікон?
Натан Фелман

Це налаштування в CentOS. Ви можете отримати доступ до нього з "TigerVNC Viewer", коли ви ввійшли в систему.
Hammad Khan

2
це безпечне моє життя
Ю. Цзяао

9

Хлопці, це дійсно просто.

увійдіть через sshваш pi

виконати

vncserver -geometry 1200x1600

Це створить новий сеанс :1

підключіться до свого клієнта vnc за адресою ipaddress:1

Це воно.


7
Це неправильна відповідь, оскільки це не змінить роздільну здатність існуючого сеансу, а просто створить новий.
Натан Фелман

6

Додавання до відповіді Натана (прийнято):

Я хотів проглянути список резолюцій, але нічого для цього не побачив:

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

Він отримує поточний індекс, переходить до наступного та повертається до 0 при помилці (тобто в кінці)


EDIT

Змінено відповідно до пізнішої версії 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, "за замовчуванням" або "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 каже віддаленому vncserver або xrandr, Xvnc або gnome або ..., але він змінює розмір, коли я змінюю вікно клієнта TigerVNC.

Моя установка:

  • Сервер Tiger VNC працює на CentOS 6. Хостинг на робочому столі GNOME. (Також працює з RHEL 6.6)
  • Windows деяку версію з Tiger VNC Client.

При цьому роздільна здатність змінюється відповідно до розміру вікна клієнта, незалежно від того, що воно є, і це не так 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 ви використовуєте для свого клієнта / сервера? Я спробував це сьогодні, і для мене це не змінюється автоматично. Я перебуваю на RHEL 6.2 під керуванням Xvnc TigerVNC 1.1.0 для клієнта сервера та vncviewer-1.4.3.exe
cdwilson

@cdwilson Сподіваюся, ви намагалися з клієнтом у повноекранному режимі. Додано версії. HTH
Каш’яп

виявляється, 1.1.0 не грає добре з тим, що вони працюють на наших робочих машинах. Запуск останнього 1.4.3 з мого $HOMEкаталогу працює як очікувалося github.com/TigerVNC/tigervnc/isissue/155
cdwilson

Підтверджено: openSuse 15.1, GDM, KDE Plasma, клієнт TigerVNC 1.9.0. Роздільна здатність мого віддаленого робочого столу випливає з будь-якого розміру вікна клієнта, будь-якого шаленого спеціального дозволу, будь-якого співвідношення сторін; в GDM або KDE. Працює як шарм, поза коробкою, не потрібно нічого встановлювати будь-де на клієнті чи сервері.
Еспіноса

1

Я не впевнений, що стосується Linux, але під вікном Windows, sendvnc буде виявляти та адаптуватись до змін роздільної здатності на сервері.

Таким чином, ви повинні мати змогу VNC на робочу станцію, виконувати еквівалент клацання правою кнопкою миші на робочому столі, властивості, встановити роздільну здатність до будь-якого, і дозволити вашому клієнту vnc вікно змінити розмір відповідно.


1

З іншого боку, якщо існує спосіб переміщення наявного вікна з одного X-сервера на інший, це може вирішити проблему.

Я думаю, ви можете використовувати xmove для переміщення вікон між двома окремими x-серверами. Отже, якщо це працює, це, принаймні, повинно дати вам можливість робити те, що ви хочете, хоч і не так просто, як зміна роздільної здатності.


чи знаєте ви, чи xmove переходить під будь-яким іншим іменем у SuSE Linux?
Натан Фелман

@NathanFellman Ви подивилися на xpra? Це більш недавнє додаток, але подібний інструмент en.wikipedia.org/wiki/Xpra та software.opensuse.org/package/xpra .
DDay

Я не маю особливого контролю над цим, оскільки працюю у великій корпорації, де ІТ вибирає засоби віддаленого доступу
Натан Фелман,

0

Наскільки я знаю, немає можливості змінити роздільну здатність клієнта лише за допомогою VNC, оскільки це лише додаток "дзеркальне відображення монітора".

Однак TightVNC (який є клієнтом VNC і серверним додатком) може змінити розмір екрана на стороні клієнта, тобто зробити все трохи меншим (аналогічно методам зміни розміру зображень у графічних програмах). Це може спрацювати, якщо ви не використовуєте занадто малі розміри шрифту. VNC теоретично повинен бути сумісним між різними програмами VNC.


питання суто питання Linux, ця відповідь Windows тут не застосовується. У Windows VNC - це просто монітор, але в Linux це ПЕРШИЙ віртуальний робочий стіл, і лише пізніше деякі версії додали підтримку 'display 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

Ну, мені потрібне краще рішення для всіх дисплейних пристроїв під Linux та Similars SO


-3

Я думаю, це залежить від вашого менеджера вікон.

Я користувач Windows, тому це може бути помилковою здогадкою, але: Чи не існує щось, що називається X-Server працює на машинах Linux - принаймні, на тих, які можуть бути цікавими цілями для VNC - до яких можна підключитися " X-клієнти "?

VNC просто бере все, що є на екрані, і "тунелює його через вашу мережу". Якщо я не зовсім помиляюся, то протокол "X" повинен дати вам можливість використовувати роздільну здатність вашого клієнта на робочому столі.

Спробуйте X-Server у Вікіпедії, який може дати вам приблизний огляд.


ідея хороша і може бути здійснена за допомогою ssh тунелю та локального x-сервера. У вас на сервері є сервер x, і ви надаєте віддаленим клієнтам доступ до вас на x-сервер, який виводить на дисплей гуї віддалених програм.
andho

@andho ні це зовсім не те, про що плакав плакат - проблема тут полягає в тому, що ви втратили б вікна, коли втратили зв’язок. Вікна, що відкриваються над тунелем, корисні лише для короткочасних додатків, але не якщо ви хочете перенести робочий стіл (і всі відкриті програми в межах) від одного клієнта до іншого ...
nhed

@nhed, я не знаю, чи це взагалі практично, але це ідея. Що стосується довгострокових додатків, можливо, можна використовувати програму "екран"?
andho

Екран @andho є приголомшливим, для програм, що містять лише текст ... ОП запитував про додатки X ... і я приїхав до цього куточка Інтернету, бо шукав те саме, і здається, що або щось на кшталт xranr або xmove у шафі речі (xrandr є більш чистим варіантом)
nhed

@nhed, так, це проблема, яку я теж маю. Просто викинувши цю ідею туди, щоб хтось досвідченіший міг її викреслити, не маючи необхідності перевіряти, чи це взагалі можливо.
andho
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.