Сведения о вопросе

Junior

04:56, 27th August, 2020

Теги

linux   vnc    

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

Просмотров: 1898   Ответов: 15

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

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

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



  Сведения об ответе

#hash

18:22, 29th August, 2020

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

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

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

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


  Сведения об ответе

ASSembler

04:59, 8th August, 2020

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

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

vnc4server -geometry 1280x1024 -geometry 800x600

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

xrandr

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

xrandr -s 800x600

Вот и все.


  Сведения об ответе

JUST___

05:59, 17th August, 2020

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

Когда я запускаю xrandr в terminal, он отображает все доступные разрешения экрана:

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

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

bash> xrandr -s 5

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


  Сведения об ответе

PHPH

19:01, 18th August, 2020

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

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

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

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


  Сведения об ответе

PIRLO

23:26, 29th August, 2020

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

enter image description here

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


  Сведения об ответе

baggs

08:38, 7th August, 2020

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

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

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

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

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

    host:5901
    
  3. Как только вы войдете в сеанс VNC, запустите окно terminal.

  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"
    


  Сведения об ответе

$DOLLAR

00:27, 27th August, 2020

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

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

выполнять

vncserver -geometry 1200x1600

При этом будет создан новый сеанс :1

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

Вот и все.


  Сведения об ответе

P_S_S

11:19, 20th August, 2020

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

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

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
}

  Сведения об ответе

crush

10:56, 28th August, 2020

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

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


  Сведения об ответе

PROGA

10:04, 27th August, 2020

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

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


  Сведения об ответе

baggs

23:35, 20th August, 2020

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

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

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

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

При этом разрешение изменяется, чтобы соответствовать размеру окна клиента, независимо от того, что это такое , и это не zooming, это фактическое изменение разрешения (я вижу новое разрешение в выводе xrandr).

Я пробовал все, что мог, чтобы добавить новое разрешение к xrandr, но безрезультатно, всегда заканчивалось ошибкой 'xrandr: Failed to get size of gamma for output default' .

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


  Сведения об ответе

SEEYOU

05:23, 24th August, 2020

Решение по @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
}


  Сведения об ответе

P_S_S

06:11, 21st August, 2020

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

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


  Сведения об ответе

DINO

18:19, 11th August, 2020

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

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


  Сведения об ответе

SEEYOU

22:31, 11th August, 2020

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

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться