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

StackOverflow https://stackoverflow.com/questions/15816

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Реальный 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-сервере, который имеет базовую рандр Поддержка.Я просто запускаю 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 в качестве клиента, и он автоматически адаптируется к новому разрешению.

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

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

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

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

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

enter image description here

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

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

xrandr однако позволяет выбирать режимы отображения (также известные как разрешения) из-за того, что модели жестко закодированный любой дополнительный режим, например, "до 2560x1600" или "1600х900" нужно быть добавить в код.Я думаю, что разработчики, которые писали код намного умнее и жесткий закодированный список является лишь примером ценностей.Это приводит к выводу, что должен быть способ добавления пользовательских моделей и 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 wiki) для получения разрешения "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"
    

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

войдите в систему через ssh в ваш личный

выполнить

vncserver -geometry 1200x1600

Это сгенерирует новый сеанс :1

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

Вот и все.

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

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

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

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


Редактировать

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

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

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

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

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

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

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

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

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

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

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

Решение от @omiday сработало для меня в Xvnc TigerVNC 1.1.0, поэтому я свел его в единую функцию bash vncsize x y.Используйте это следующим образом: размер vnc 1400 1000.Это предполагает , что ксандр сообщает выходное имя 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
}

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

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

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

#!/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 и аналогичных S.O

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

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

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

Отдавать X-Сервер попробуйте заглянуть в Википедию, это может дать вам приблизительный обзор.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top