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

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

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

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

19.08.2008 06:56:39
Я хотел бы упомянуть кое-что, с чем я недавно столкнулся, но я еще не смог проверить это. Существует новая программа под названием FreeNX, которая должна была заменить VNC. Вот ссылка: freenx.berlios.de
andho 11.07.2011 04:52:08
@andho - Эта ссылка, кажется, не работает.
ArtOfWarfare 11.08.2014 01:39:13
@ArtOfWarfare надеюсь, что это поможет help.ubuntu.com/community/FreeNX . К настоящему времени должно быть довольно стабильным. Я думаю, что скоро попробую, как позволит время.
andho 19.09.2014 07:55:54
15 ОТВЕТОВ

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

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

0
19.08.2008 07:13:31
вопрос строго Linux, этот ответ Windows здесь не применяется. В Windows VNC - это просто монитор, но в Linux это был ПЕРВЫЙ виртуальный рабочий стол, и только в некоторых версиях добавлена ​​поддержка «отображения 0» (т. Е. Монитора). VNC Scaling - довольно плохой пользовательский интерфейс.
nhed 3.07.2011 02:35:29

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

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

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

Дает X-сервер на Википедии попробовать, что может дать вам общее представление.

-3
19.08.2008 07:54:11
идея хороша и может быть реализована с использованием туннеля ssh и локального x-сервера. У вас есть x-сервер на вашем компьютере, и вы предоставляете удаленным клиентам доступ к вашему x-серверу, который будет отображать графический интерфейс удаленных приложений на вашем дисплее.
andho 10.05.2011 05:20:18
@ andho нет, это не то, о чем просил афиша - проблема здесь в том, что вы потеряете вдов, когда потеряете связь. Открывающиеся окна над туннелем полезны только для краткосрочных приложений, если вы не хотите
nhed 3.07.2011 02:14:13
@ nhed, я не знаю, практично ли это вообще, но это идея. Что касается долгосрочных приложений, может быть, «экранная» программа может быть использована?
andho 5.07.2011 15:27:34
@andho screen просто потрясающий, для текстовых приложений ... ОП спрашивал о X-приложениях ... и я пришел в этот уголок Интернета, потому что искал то же самое, и кажется, что-то вроде xranr или xmove в шкафу вещей (xrandr более чистый вариант)
nhed 5.07.2011 19:00:09
@ nhed, да, у меня тоже есть проблема. Просто добавлю эту идею, чтобы кто-то более опытный мог ее реализовать, и мне не нужно было проверять, возможно ли это вообще.
andho 11.07.2011 04:53:14

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

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

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

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

25
19.08.2008 13:09:50
@Pat, проблема с вашим решением в том, что я не могу легко переместить окно из одного сеанса VNC в другой. Если я нахожусь в середине некоторой отладки, когда мне нужно уйти, я хочу иметь возможность выбрать то место, где я остановился (возможно, с окнами, немного смещенными из-за изменения размера). Если у меня будет два отдельных сеанса, я не смогу продолжить то же самое, что и раньше, потому что мне придется закрыть окна из одного сеанса и повторно открыть их в другом. С другой стороны, если есть способ переместить существующее окно с одного X-сервера на другой, это может решить проблему.
Nathan Fellman 1.07.2009 12:40:32
xmove отсутствует в текущем хранилище Ubuntu; xpra, который будет делать то же самое (выступать в роли X-прокси).
Sam Hartsfield 18.06.2010 15:14:13

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

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

1
19.08.2008 10:32:18

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

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

1
19.08.2008 13:07:41
Знаете ли вы, если xmove идет под любым другим именем в SuSE Linux?
Nathan Fellman 1.07.2009 12:41:07
@NathanFellman ты смотрел на xpra? Это более новое приложение, но похожий инструмент en.wikipedia.org/wiki/Xpra и software.opensuse.org/package/xpra .
DDay 21.03.2018 17:08:35
Я не очень контролирую это, так как работаю в крупной корпорации, где ИТ-специалисты выбирают инструменты удаленного доступа
Nathan Fellman 26.03.2018 18:52:52
РЕШЕНИЕ

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

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

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

xrandr -s 1600x1200
xrandr -s 1440x900
xrandr -s 1024x768
154
5.07.2009 08:18:58
Благодаря Натану, даже люди из realvnc, кажется, не подчеркивают функцию xrandr ... См. Также мою функцию bash ниже, чтобы разрешить циклическое переключение между разрешениями randr.
nhed 3.07.2011 02:09:19
Возможно, вам будет удобно поместить все эти параметры в .vnc/configфайл. Например, первая строка моего -randr 800x600,1024x768,1280x800,1280x960,1280x1024,1680x1050,1920x1080,3360x1050,1024x700,1200x740,1600x1000,3200x1000
bfroehle 22.08.2012 17:30:24
@ Натан Я пытался использовать решение, которое ты дал, но безуспешно. Можете ли вы попытаться ответить на этот мой вопрос?
Geek 29.01.2013 12:27:40
Интересно, работает ли это с tightvncserver?
Dimitry K 20.01.2014 00:46:49
@DimitryK У меня был tailvncserver, и он не работает. Я очистил его и установил настоящий VNC. Я рекомендую это. Все разрешения пейзаж: 320x240,480x320,482x320,560x360,576x360,640x480,640x482,648x486,720x480,720x486,720x540,720x576,768x576,800x480,800x600,1024x600,1024x768,1280x720,1280x800,1280x1024,1366x768,1400x1050,1440x900, 1600x900,1600x1024,1600x1200,1680x1050,1920x1080,1920x1200,2048x1024,2048x1152,2048x1536,2560x1080,2560x1440,2560x1600,2560x2048,3072x1536,3072x1728,3840x2160,4096x2048,4096x2304,7680x4320,8192x4096,8192x4608.
barwnikk 11.04.2015 20:05:33

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

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

vnc4server -geometry 1280x1024 -geometry 800x600

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

xrandr

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

xrandr -s 800x600

Это оно.

68
1.10.2010 13:47:01
Я также пытался использовать ваш подход, предложенный Натаном, но безуспешно. Можете ли вы определить, чего здесь не
Geek 29.01.2013 12:29:28
Работал отлично. Спасибо!
Roney Michael 16.04.2019 17:30:04

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

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

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

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


РЕДАКТИРОВАТЬ

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

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

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

26
5.12.2011 15:57:55
чтобы люди не впадали в погони, пожалуйста, перечислите и версию TigerVnc, и ваш дистрибутив Linux + версию + версию? Спасибо
nhed 2.01.2012 03:45:55
Я могу подтвердить, что он довольно хорошо работает с TiverVnc 1.1.0 (сервер Linux, клиент Linux)
Benedikt Waldvogel 23.06.2012 11:59:46
Я использую vncviewer и каждый раз, когда пытаюсь изменить разрешение, окно закрывается.
AWE 24.10.2012 12:14:27
могу ли я спросить вас, какая версия Xrandr это. Шахта: программа xrandr версии 1.3.5. Отчеты о серверах RandR версии 1.3 выглядит совершенно иначе, например, нет первого столбца
Wakan Tanka 24.02.2015 08:57:34
Просто добавлю, что он работает и с Real VNC в качестве клиента. Протестировано для версии 6.0.3
Vivek V K 15.04.2017 03:30:54

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

#!/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 и аналогами

0
11.10.2012 12:18:19

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

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

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

17
2.06.2014 14:12:47
Это настройка TigerVNC, CentOS или оконного менеджера?
Nathan Fellman 1.06.2014 04:18:23
Это настройка в CentOS. Вы можете получить к ней доступ через 'TigerVNC Viewer', когда войдете в систему.
Hammad Khan 2.06.2014 14:10:22
это безопасно моя жизнь
Yu Jiaao 1.01.2018 15:06:58

Возможно, самый невежественный ответ, который я когда-либо писал, но здесь идет: Используйте клиент / просмотрщик 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.
2
20.03.2015 04:19:05
Какие версии TigerVNC вы используете для своего клиента / сервера? Я попробовал это сегодня, и он не изменяет размер автоматически для меня. Я использую RHEL 6.2 под управлением Xvnc TigerVNC 1.1.0 для сервера и клиента vncviewer-1.4.3.exe
cdwilson 19.03.2015 18:05:12
@cdwilson Надеюсь, вы пробовали с клиентом в полноэкранном режиме. Добавлены версии. HTH
Kashyap 20.03.2015 04:20:28
Оказывается, 1.1.0 не играл хорошо с тем, что они работают на наших рабочих машинах. Запуск последней версии 1.4.3 из моего $HOMEкаталога работает, как и ожидалось, github.com/TigerVNC/tigervnc/issues/155
cdwilson 23.03.2015 19:39:51
Подтверждено: openSuse 15.1, GDM, KDE Plasma, клиент TigerVNC 1.9.0. Разрешение моего удаленного рабочего стола соответствует любому размеру окна клиента, любому сумасшедшему разрешению ad-hoc, любому соотношению сторон; в GDM или KDE. Работает как шарм, из коробки, не нужно ничего устанавливать на клиенте или сервере.
Espinosa 22.09.2019 21:41:06

Так как этот вопрос встал первым в 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 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"
    
18
28.07.2016 08:01:37
использовал его для создания большего рабочего пространства с tigervnc и mwm, он работал для увеличения размера экрана, но рабочее пространство ограничено исходным размером, используемым vnc.
user2019716 14.06.2017 10:55:17
Это из-за mwm, все пространство используется после перезапуска
user2019716 14.06.2017 13:42:45
Блестяще, большое спасибо за рецепт, это действительно помогло.
Adrian Rosoga 15.11.2019 12:44:12
Это сэкономило мне много времени, спасибо!
Ben Davis 15.12.2019 00:03:19

Решение от @omiday работало для меня в Xvnc TigerVNC 1.1.0, поэтому я собрал его в одну функцию bash vncsize xy . Используйте это так: 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
}
3
29.09.2016 18:40:11

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

войти через sshсвой пи

выполнять

vncserver -geometry 1200x1600

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

связаться с вашим клиентом VNC в ipaddress:1

Это оно.

9
12.11.2017 18:57:55
Это неправильный ответ, потому что он не изменит разрешение существующего сеанса, а просто создаст новый.
Nathan Fellman 13.11.2017 11:17:07