Изменение разрешения сеанса VNC в Linux

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

Есть ли хороший способ изменить размер сеанса VNC на лету?

Мой VNC-сервер - это RealVNC E4.x(я не помню точной версии), запущенного на SuSE64.

Ответ 1

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

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

Затем измените размер с помощью:

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

Ответ 2

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

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

vnc4server -geometry 1280x1024 -geometry 800x600

От терминала в vncviewer (с разрешенным разрешением dymanic desktop resizing) используйте xrandr для просмотра доступных режимов:

xrandr

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

xrandr -s 800x600

Вот оно.

Ответ 3

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

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

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

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

Ответ 4

Я запускаю TigerVNC на моем Linux-сервере, который имеет базовую поддержку randr. Я просто запускаю vncserver без параметров -randr или multiple-geometry.

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

Ответ 5

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

enter image description here

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

Ответ 6

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

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

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

Он получает текущий индекс, переходит к следующему и циклически возвращается к 0 при ошибке (т.е. в конце)


ИЗМЕНИТЬ

Изменено для соответствия более поздней версии xrandr ( "*" находится в конце строки и не имеет идентификатора ведущего разрешения).

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

Ответ 7

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

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

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

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

    $ vncserver -geometry 1600x900 :1
    
  • На компьютере "2560x1600" запустите средство просмотра VNC (я предпочитаю Remmina) и подключиться к удаленному VNC сессия:

    host:5901
    
  • Как только внутри сеанса VNC запустите окно терминала.

  • Подтвердите, что новая геометрия доступна в сеансе 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  
    

    и вы заметите, что экран довольно маленький.

  • Перечислите модель (см. статью 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
    
  • Добавьте новую модель в текущий сеанс VNC:

    $ xrandr --newmode "2560x1600_60.00"  348.16  2560 2752 3032 3504  1600 1601 1604 1656 -HSync +Vsync
    
  • В приведенном выше выражении xrandr найдите отображаемое имя на втором строка:

    VNC-0 connected 1600x900+0+0 0mm x 0mm
    
  • Свяжите новую модель с текущим виртуальным монитором VNC:

    $ xrandr --addmode VNC-0 "2560x1600_60.00"
    
  • Используйте его:

    $ xrandr -s "2560x1600_60.00"
    

Ответ 8

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

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

Ответ 9

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

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

Ответ 10

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

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_]/ } )
            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
}

Ответ 11

Насколько я знаю, нет возможности изменить разрешение клиента только с помощью VNC, так как это просто приложение для зеркалирования монитора.

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

Ответ 12

У меня есть простая идея, примерно такая:

#!/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 S.O

Ответ 13

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

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

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

  • Сервер Tiger VNC, работающий на 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.

Ответ 14

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

войдите через ssh в свой pi

выполнить

vncserver -geometry 1200x1600

Это приведет к созданию нового сеанса :1

подключитесь к клиенту vnc в ipaddress:1

Вот оно.

Ответ 15

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

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

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

Дайте X-Server в Википедии, что может дать вам приблизительный обзор.