Изменение разрешения сеанса VNC в linux [закрыто]


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

есть ли хороший способ, чтобы изменить размер в VNC сессии "на лету"?

мой VNC сервер Быстрый Е4.x (я не помню точную версию) работает на SuSE64.

15 125

15 ответов:

Real VNC server 4.4 включает поддержку Xrandr, которая позволяет изменять размер VNC. Запустите сервер с помощью:

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

затем измените размер с:

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

выяснилось, что vnc4server (4.1.1), поставляемый с Ubuntu (10.04), исправлен, чтобы также поддерживать изменение разрешения на лету через xrandr. К сожалению, эту функцию было трудно найти, потому что она не задокументирована. Так вот оно что...

запустите сервер с несколькими экземплярами "geometry", например:

vnc4server -geometry 1280x1024 -geometry 800x600

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

xrandr

изменить результат, например использовать:

xrandr -s 800x600

вот и все.

Я TigerVNC на моем сервере Linux, который имеет basic 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

затем я могу легко переключиться на другое разрешение (например, переключиться на 1360x768):

bash> xrandr -s 5

Я использую TightVNC viewer в качестве клиента, и он автоматически адаптируется к новому разрешение.

Я думаю, что лучше всего запустить сервер VNC с другой геометрией на другом порту. Я бы попробовал на основе на странице

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

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

изменить: затем используйте xmove для перемещения окон между двумя X-серверами.

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

enter image description here

убедитесь, что вы применяете новую настройку при появлении диалогового окна. В противном случае он вернется к предыдущей настройке просто как в Windows

поскольку этот вопрос возникает сначала в Google, я думал, что поделюсь решением с помощью TigerVNC, которое в наши дни является стандартным.

xrandr позволяет выбрать режимы отображения (a.k.a резолюции) однако из-за модельных линий быть жесткий закодировано любая дополнительная модельная линия, такая как "2560x1600 " или" 1600x900 будь добавлено в код. Я думаю, что разработчики, которые написали код, намного умнее и сложнее закодированный список - это всего лишь пример ценности. Это приводит к выводу, что должен быть способ добавить пользовательские модели и man xrandr подтверждает оно.

С этим фоном, если цель состоит в том, чтобы разделить сеанс VNC между двумя компьютеры с вышеуказанными разрешениями и при условии, что сервер VNC компьютер с разрешением "1600x900":

  1. запустите сеанс VNC с геометрией, соответствующей физическому дисплею:

    $ vncserver -geometry 1600x900 :1
    
  2. на "2560x1600" компьютер запускает VNC viewer (я предпочитаю 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. список modeline (см. статью xrandr в ArchLinux wiki) для в "2560х1600" разрешение:

    $ 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"
    

добавление к ответу Натана (принято):

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

function vncNextRes()
{
   xrandr -s $(($(xrandr | grep '^*'|sed 's@^\*\([0-9]*\).*$@@')+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
}

ребята, это действительно просто.

войти через ssh на ваш Пи

выполнить

vncserver -geometry 1200x1600

это создаст новый сеанс :1

соединитесь с вашим клиентом vnc на ipaddress:1

вот и все.

Я не уверен в linux, но под windows tightvnc будет обнаруживать и адаптироваться к изменениям разрешения на сервере.

таким образом, вы должны иметь возможность VNC на рабочей станции, делать эквивалент щелчка правой кнопкой мыши на рабочем столе, свойствах, устанавливать разрешение на что угодно и соответственно изменять размер окна VNC вашего клиента.

С другой стороны, если есть способ перемещение существующего окна из одного X-сервер на другой, что может решить проблема.

Я думаю, что вы можете использовать xmove для перемещения окон между двумя отдельными x-серверами. Так что если это работает, это должно по крайней мере дать вам способ сделать то, что вы хотите, хотя и не так легко, как изменение разрешения.

решение @omiday работало для меня в Xvnc TigerVNC 1.1.0, поэтому я сжал его в одну функцию bash vncsize x y. Используйте его так:vncsize 1400 1000. Он предполагает, что xrandr сообщает имя вывода VNC как по умолчанию.

function vncsize {
    local x= y=
    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_]/ } )
            xrandr --newmode $newMode
            xrandr --addmode default "$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
}

насколько я знаю, нет никакого способа изменить разрешение клиента только с помощью VNC, так как это просто приложение "зеркального отображения монитора".

TightVNC Однако (который является клиентом VNC и серверным приложением) может изменить размер экрана на стороне клиента, т. е. сделать все немного меньше (аналогично методам изменения размера изображения в графических программах). Это должно работать, если вы не используете слишком маленькие размеры шрифта. VNC теоретически должен быть совместим между различными VNC приложения.

У меня есть простая идея, что-то вроде этого:

#!/bin/sh

echo `xrandr --current | grep current | awk '{print }'` >> RES1
echo `xrandr --current | grep current | awk '{print }'` >> 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 и подобных S. O

возможно, самый невежественный ответ, который я опубликовал, но здесь идет: используйте TigerVNC client / viewer и проверьте 'Resize remote session to local window' на вкладке экрана параметров.

Я не знаю, что клиент $%#@ TigerVNC говорит удаленному vncserver или xrandr или Xvnc или gnome or ... но он изменяется, когда я изменяю окно клиента TigerVNC.

Мои настройки:

  • Tiger VNC Server работает на CentOS 6. Хостинг рабочего стола GNOME. (Работает и с RHEL 6.6)
  • Windows какой-то версия с клиентом Tiger VNC.

при этом разрешение изменяется в соответствии с размером окна клиента независимо от того, что это такое, и это не 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.

Я думаю, что это зависит от вашего оконного менеджера.

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

VNC просто берет все, что находится на экране, и "туннелирует его через вашу сеть". Если я не совсем ошибаюсь, то протокол" X " должен дать вам возможность использовать разрешение рабочего стола вашего клиента.

дать X-Server в Википедии попробуйте, это может дать вам общее представление.