X11vnc настройка разрешения экрана
на просторах интернетов много статей на тему как настроить удаленное подключение к существующей сессии Xorg через x11vnc, но я нигде не нашел, как при этом придавить локальный монитор и ввод, чтобы любой, кто сидит рядом с удаленным компом, не смотрел что вы делаете и не нажимал кнопочки в вашей сессии. Под катом мой способ, как сделать x11vnc более похожим на подключение к винде по RDP.
Итак, допустим, вы уже умеете пользоваться x11vnc, если нет — можно погуглить или почитать например тут.
Дано: запускаем x11nvc, подключаемся к нему клиентом, все работает, но локальная консоль компа тоже доступна для просмотра и ввода.
Хотим: вырубить локальную консоль (монитор + клава + мышка) так, чтобы ничего нельзя было увидеть и ввести.
Вырубаем мониторы
Первое, что пришло в голову, было просто отрубить монитор через xrandr например так:
но тут тоже не все гладко. Система будит монитор при первом же событии. Помогает простейший костыль в виде цикла:
Дальше я думать не стал — было лень, оно выполняет свою цель — мониторы ничего не показывают, даже если давить кнопки, шерудить мышкой и т.д.
Спасибо amarao за еще один способ с выкручиванием в ноль яркости:
Вырубаем ввод
Для отключения ввода я использовал xinput. При запуске без параметров он выводит список девайсов:
Девайсы Virtual core. отключить нельзя — выдается ошибка, зато остальные можно включать и отключать, например вот так можно остаться на минуту без мышки:
Готовое решение
Для своего случая я сделал скрипт, который запускаю в ssh сессии. Он глушит локальный ввод и поднимает x11vnc сервер, а по завершению скрипта все возвращает как было. В итоге получилось три скрипта, вот они (обновленные).
switch_local_console:
disable_local_console:
Собственно, главный скрипт (у меня два монитора, я поднимаю один общий сервер и по одному на каждый монитор).
Собственно все. Заходим по ssh, запускаем vnc_server, пока он жив, имеем доступ по vnc и потушенную локальную консоль.
Можно ли изменить разрешение средства просмотра, указанного при запуске сервера vnc с аргументом командной строки геометрии? У меня есть vncserver, настроенный для широкоэкранного монитора, но я хочу просмотреть его на экране 1024x768.
Средство просмотра UltraVNC поддерживает автоматическое масштабирование , поэтому оно автоматически изменит размер окна просмотра, чтобы отобразить весь экран удаленного сервера.
Обновить
И RealVNC, и TightVNC - масштабирование экрана и рабочего стола.
Я использую реальный VNC 4.1.3. где найти вариант масштабирования рабочего стола? Я не могу найти это.
Не масштабируя, но изменяйте размер, автоматически изменяйте контролируемое разрешение ПК в соответствии с экраном контроллера.
Осторожно: автоматическое масштабирование не меняет разрешение удаленного рабочего стола , оно просто увеличивает (или уменьшает) пиксели за счет растягивания выходного изображения. Для большинства пользователей автоматическое масштабирование практически бесполезно, если только у вас нет нарушения зрения. Это значительно снижает качество изображения. Он работает как зум или зеркало в популярных растровых редакторах. Что действительно хотят пользователи, так это реальное изменение разрешения удаленного сеанса, и пока только TigerVNC способен сделать это из всех бесплатных зрителей. Смотрите мой ответ ниже.
Этот же вопрос был задан некоторое время назад при переполнении стека: /programming/15816/changing-the-resolution-of-a-vnc-session-in-linux
Принятый ответ от Натана Феллмана:
Реальный VNC сервер 4.4 включает в себя поддержку Xrandr, которая позволяет изменять размеры VNC. Запустите сервер с:
Затем измените размер с помощью:
С клиентом TigerVNC вам не нужно устанавливать какие-либо геометрии на стороне сервера. Мой сервер запущен без каких-либо -randr настроек и является базовым -geometry 1024x768 . Это низкое разрешение используется только при первом подключении, но затем вы можете изменить разрешение, просто изменив размер окна клиента на любое, что вам нужно, на любое сумасшедшее, нестандартное, специальное разрешение, которое вы хотите. Моя установка: openSuse 15.1, GDM, KDE Plasma, клиент TigerVNC 1.9.0 (Windows)
Если вам нужно изменить настройки без перезапуска VNC-сервера, у меня были хорошие результаты с:
а затем с помощью xrandr измените разрешение, как предложил fgregg:
С TigerVNC Windows VNC клиент (программа просмотра) работает автоматически. Не нужно ничего устанавливать где-либо, на клиенте или на сервере. Когда вы впервые подключаетесь к вашему серверу, разрешение устанавливается на то, что предварительно установлено на стороне сервера, но вы можете легко изменить его, просто изменив размер окна клиента; в любое разрешение, любое сумасшедшее, нестандартное, специальное разрешение, которое вы хотите. Разрешение удаленного рабочего стола, скажем, KDE, плавно соответствует разрешению окна вашего клиента.
Проверьте, установлен ли параметр «Изменить размер удаленного сеанса в локальном окне». Это должно быть по умолчанию.
Пожалуйста, не путайте автоматическое изменение разрешения с растяжением изображения , которое также называется автоматическим масштабированием . Этот вызов практически бесполезен, если только у вас нет нарушений зрения. Он работает как зум или зеркало в популярных растровых редакторах. Это просто делает пиксели больше (или меньше), растягивая выходное изображение. Это значительно снижает качество изображения, если вы сильно растягиваете.
Что обычно хотят пользователи, так это реальное изменение разрешения удаленного сеанса. И это то, о чем я говорил ранее, и это то, на что способен клиент TigetVNC, при условии, что сервер имеет соответствующие функции. Автоматическое разрешение обеспечивает четкость изображения при любом размере. Недостатком является также увеличение пропускной способности сети.
До сих пор я обнаружил, что только TigerVNC способен автоматически разрешать . Я тестировал TightVNC (с открытым исходным кодом), RealVNC (бесплатная версия) и UltraVNC (с открытым исходным кодом), и мне не повезло ни с одним из них, они обеспечивают бесполезное автоматическое масштабирование в лучшем случае.
Если вам нужен только просмотрщик, то скачайте только просмотрщик, например vncviewer64-1.9.0.exe , то есть просто просмотрщик без VNC-сервера в комплекте. Помните, что с сервером TigerVNC служба запускается автоматически в фоновом режиме, что я категорически ненавижу как возможную угрозу безопасности.
Мой сервер запущен без каких-либо -randr настроек и является базовым -geometry 1024x768 . Это низкое разрешение используется только при первом подключении, но затем вы можете изменить разрешение, просто изменив размер окна клиента. Если вам интересно, вот моя полная команда VNC-сервера:
Согласно описанию пакета openSuse, xorg-x11-Xvnc - сервер openSuse VNC - построен на коде TigerVNC. Так что в моем случае клиент TigerVNC общается с сервером TigerVNC, так что, возможно, поэтому все так просто :)
Настройка моего клиента: TigerVNC client 1.9.0 (Windows)
Настройка моего сервера: openSuse 15.1, xorg-x11-Xvnc 1.9.0, vncmanager 1.0.2, GDM, KDE Plasma.
У меня есть сервер Ubuntu без физического доступа к нему, только через ssh / vnc.
Он застрял на разрешении 1680x1050, и в настройках системного дисплея меню отключены, поскольку не обнаружено реального подключенного дисплея.
Мне нужно снизить разрешение, например, до 800x600.
Когда я пытаюсь:
Результаты одинаковы, даже если я впервые попробую:
Похоже, вы используете сервер Vino для совместного использования рабочего стола через VNC. Хотя я думаю, что вы можете изменить свой /etc/X11/xorg.conf или любой другой файл конфигурации X сейчас, у меня есть другое предложение. Оставьте X config в покое и создайте еще один сеанс для вашего vnc.
Установить VNC
Создание сценариев запуска и остановки vnc
12 - просто произвольный номер дисплея. Вы будете использовать это при подключении к серверу. Это может быть любое число, кроме 0. Это то, что сервер vino использует по умолчанию (я думаю). Не забудьте chmod + x скрипты.
Необязательно: Запустите сеанс vnc при загрузке
Добавьте vnc.sh в ваш /etc/rc.local, чтобы сеанс начался при запуске компьютера. sudo vi /etc/rc.local и добавьте это до конца перед "выходом 0"
Я запускаю сервер VNC как пользователь здесь. Я не хочу, чтобы сервер работал в корневом контексте. Замените «YourUserName», конечно. Кроме того, вам не нужно указывать это здесь, вы можете запустить ssh и запустить скрипт «vnc.sh» вручную. Ваш звонок.
Установите пароль VNC
(это отдельно от другого пароля рабочего стола vnc)
Отредактируйте ваш файл VNC сессии
Закомментируйте все и поместите это в конец
Проверь это
Запустите скрипт vnc.sh и подключитесь с другого компьютера.
Спасибо, это отлично работает для нового рабочего стола. Однако мне нужно использовать существующий рабочий стол с уже открытыми различными окнами. Есть ли способ, которым я могу подключиться к исходному дисплею: 0 с другой геометрией?
. альтернативно есть ли способ переместить все окна в одной пакетной операции с основного дисплея на этот новый дисплей VNC?
Хотя я еще не пробовал, я считаю, что вы можете использовать «x11vnc» вместо «vncserver» выше, с определенным параметром -geometry. Это должно дать вам доступ к дисплею: 0. Я искал параметры для сервера gnome vino, но не смог найти ни одного.
Вы могли бы рассмотреть вопрос об изменении разрешения на сервере VNC? Я не уверен в вашей настройке, но если VNC-сервер находится на виртуализированной машине, вы можете проверить точку инстанцирования vncserver и изменить там -geometry флаг?
В качестве альтернативы я бы посмотрел на xorg.conf и добавил режим, который вы ищете, поскольку xrandr он говорит, что он недоступен. В этой статье рассматриваются основы редактирования xorg.conf
Закрыто. Этот вопрос не соответствует рекомендациям по переполнению стека . В настоящее время он не принимает ответы.
Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме переполнения стека.
Закрыто 2 года назад .
Я использую VNC для подключения к рабочей станции Linux на работе. На работе у меня есть 20-дюймовый монитор, который работает с разрешением 1600x1200, а дома я использую свой ноутбук с разрешением 1440x900. Если я установлю vncserver на 1440x900, я пропускаю много места на мониторе, тогда как если я установите его на 1600x1200, он не помещается на экране ноутбука, и мне приходится постоянно прокручивать его.
Есть ли хороший способ изменить размер сеанса VNC на лету?
Мой VNC-сервер - RealVNC E4.x (точную версию не помню), работающий на SuSE64.
Я хотел бы упомянуть кое-что, с чем я недавно столкнулся, но я еще не смог проверить это. Существует новая программа под названием FreeNX, которая должна была заменить VNC. Вот ссылка: freenx.berlios.de
Реальный VNC-сервер 4.4 включает поддержку Xrandr, которая позволяет изменять размеры VNC. Запустите сервер с:
Затем измените размер с помощью:
Благодаря Натану, даже люди из realvnc, кажется, не подчеркивают функцию xrandr . Смотрите также мою функцию bash ниже, чтобы разрешить циклическое переключение между разрешениями randr.
Возможно, вам будет удобно поместить все эти параметры в .vnc/config файл. Например, первая строка моего -randr 800x600,1024x768,1280x800,1280x960,1280x1024,1680x1050,1920x1080,3360x1050,1024x700,1200x740,1600x1000,3200x1000
@ Натан Я пытался использовать решение, которое ты дал, но безуспешно. не могли бы вы попытаться ответить на мой вопрос?
@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.
Обнаружено, что vnc4server (4.1.1), поставляемый с Ubuntu (10.04), исправлен, чтобы также поддерживать изменение разрешения на лету через xrandr. К сожалению, эту функцию было трудно найти, потому что она недокументирована. Так что вот оно .
Запустите сервер с несколькими экземплярами 'geometry', например:
Из терминала в vncviewer (с включенным: «разрешить изменение размера рабочего стола») используйте xrandr для просмотра доступных режимов:
чтобы изменить результат, например, используйте:
Я также пытался использовать ваш подход, предложенный Натаном, но безуспешно. Можете ли вы определить, чего здесь не
Я использую TigerVNC на своем Linux-сервере, который имеет базовую поддержку randr . Я просто запускаю vncserver без опций -randr или multi-geometry.
Когда я запускаю xrandr в терминале, он отображает все доступные разрешения экрана:
Затем я могу легко переключиться на другое разрешение (например, на 1360x768):
Я использую TightVnc Viewer в качестве клиента, и он автоматически адаптируется к новому разрешению.
чтобы люди не впадали в погони, пожалуйста, перечислите и версию TigerVnc, и версию Linux + для вашего дистрибутива Linux? Спасибо
могу ли я спросить вас, какая версия Xrandr это. Шахта: программа xrandr версии 1.3.5. Отчеты о серверах RandR версии 1.3 выглядит совершенно иначе, например, нет первого столбца
Я думаю, что лучше всего запустить сервер VNC с другой геометрией на другом порту. Я хотел бы попробовать на основе страницы руководства
Затем вы можете подключиться с работы к одному порту и из дома на другой.
Изменить: Затем используйте xmove для перемещения окон между двумя x-серверами.
@Pat, проблема с вашим решением в том, что я не могу легко переместить окно из одного сеанса VNC в другой. Если я нахожусь в середине некоторой отладки, когда мне нужно уйти, я хочу быть в состоянии выбрать, где я остановился (возможно, с окнами, немного смещенными из-за изменения размера). Если у меня будет два отдельных сеанса, я не смогу продолжать то же самое, что и раньше, потому что мне придется закрыть окна из одного сеанса и повторно открыть их в другом. С другой стороны, если есть способ переместить существующее окно с одного X-сервера на другой, это может решить проблему.
xmove отсутствует в текущем хранилище Ubuntu; xpra, который будет делать то же самое (выступать в роли X-прокси).
Поскольку в Google этот вопрос стоит первым, я решил поделиться решением с использованием TigerVNC, которое в наши дни используется по умолчанию.
xrandr позволяет выбирать режимы отображения (также называемые разрешениями), однако из-за жесткой кодировки моделинов в код необходимо будет добавить любую дополнительную модельную линию, такую как «2560x1600» или «1600x900» . Я думаю, что разработчики, написавшие код, намного умнее, и жестко закодированный список - это всего лишь образец значений. Это приводит к заключению, что должен быть способ добавить пользовательские модели, и man xrandr подтверждает это.
На этом фоне, если целью является совместное использование сеанса VNC между двумя компьютерами с указанными выше разрешениями и при условии, что VNC-сервер - это компьютер с разрешением «1600x900»:
Начните сеанс VNC с геометрией, соответствующей физическому отображению:
На компьютере "2560x1600" запустите программу просмотра VNC (я предпочитаю Remmina) и подключитесь к удаленному сеансу VNC:
Оказавшись внутри сеанса VNC, запустите окно терминала.
Убедитесь, что новая геометрия доступна в сеансе VNC:
и вы заметите, что экран довольно маленький.
Перечислите модельную линию (см. Статью xrandr в ArchLinux wiki) для разрешения «2560x1600»:
или, если монитор старый, получите время GTF:
Добавьте новую моделину в текущий сеанс VNC:
В приведенном выше xrandr выводе найдите отображаемое имя во второй строке:
Свяжите новую модельную линию с текущим виртуальным монитором VNC:
использовал его для создания большего рабочего пространства с tigervnc и mwm, он работал для увеличения размера экрана, но рабочее пространство ограничено исходным размером, используемым vnc.
С линуксом жизнь становится интересней, я бы даже сказал экспериментальней!
Меня потянуло на эксперименты с ssh, и то, что я получил в итоге — доступ с работы к домашнему компу — мне очень понравилось! Еще бы — классно управлять домашним компом, обновлять его и т.п. С девушкой даже с помощью festival разговаривал)))
Однако, захотелось пойти дальше, интересно, можно ли настроить удаленный доступ к рабочему столу, как позволяет это RAdmin в Windows? Можно конечно! Надо только настроить))
Покопался в интернете, нашел несколько статей про VNC — Virtual Network Computing, решил такое счастье сделать и у себя!
Для этого сначала необходимо было поставить несколько утилит:
sudo aptitude install vnc4-common vnc4server xvnc4viewer
Эти утилиты необходимы непосредственно для того, чтобы запускать удаленный сервер (vnc4server) и подключаться к нему с удаленного клиента (xvnc4viewer).
Установили! Теперь дело остается за малым: сначала нужно запустить vnc-сервер, а потом подключиться к нему.
Для запуска удаленного сервера, нужно в консоли набрать
Если это первый запуск vncserver в системе с этой учётной записью пользователя, тогда вы должны ввести пароль, который клиенты будут использовать при подключении, после чего запустится сервер, который будет доступен на порту 5901. Кстати, при запуске сервера в консоль выведется номер дисплея (виртуального), на котором он будет доступен, отсчет ведется с 1 (так как 0 — текущий дисплей). Пример запуска:
igor@Voyageur:~$ vncserver
New 'Voyageur:1 (igor)' desktop is Voyageur:1
Starting applications specified in /home/igor/.vnc/xstartup
Log file is /home/igor/.vnc/Voyageur:1.log
Здесь строчка New 'Voyageur:1 (igor)' desktop is Voyageur:1 как раз говорит о том, что у меня компе запустился сервер на дисплее 1, доступен он на порту 5901.
Если vncserver запустить еще раз, то загрузится новый терминальный сервер :2 на порту 5902 и т.д.
Теперь попробуем зайти на этот сервер с удаленной машины. Для этого необходимо в консоли удаленного клиента ввести команду:
В этой команде __hostname__ — это доменное имя или ip машины, на которой запущен удаленный сервер. Далее необходимо будет ввести пароль и в результате появится приблизительно вот такое окно:
Немного не то я ожидал увидеть если честно)) Начал разбираться, и оказалось, что vncserver запускает лишь новую сессию, а не подключается к текущей, именно для этого и нужны виртуальные дисплеи. А в этой сессии запущены twm (Tab Window Manager for the X Window System) и xterm.
Между прочим это все добро запускается из скрипта ~/.vnc/xtartup, который можно редактировать, удаляя ненужные и добавляя свои строчки запуска необходимых приложений. В самом верху скрипта есть небольшой комментарий:
То есть, чтобы получить нормальный рабочий стол, нужно раскомментировать 2 строчки. Я их раскомментировал, но ничего хорошего из этого у меня не вышло.
Посмотрел я на этот twm, и решил, что с этим убожеством работать нельзя. Я установил fluxbox (занимает всего 6 Мб) и в скрипте xstartup заменил строчку
В итоге у меня получилось вот так:
Нормально для работы. Но не айс! Оперу можно запустить, еще некоторые приложения, но далеко не все (приложения kde выламываются)! Пробовал я вместо fluxbox'a запустить kde, но не пошло… Играет приветствие входа в систему, но вылетает окно с крахом плазмы и все, черный экран, занавес…
В итоге я получил удаленный доступ, но не такой как хотел! Мне-то хотелось иметь доступ к текущему рабочему столу, а не к мифическому дисплею 1, на котором загружается fluxbox, но не kde.
Что делать? Надо копать еще.
Я поискал в репозиториях пакеты, в названии которых присутствует «vnc», список оказался не очень большой, я начал читать комментарии к утилитам и библиотекам… В самом конце списка я увидел такую строчку:
p xvnc4viewer - Virtual network computing client software for X
Очень похоже на то, что мне нужно!
Я установил x11vnc. man у этой утилиты знатный, несколько тысяч строк)) После небольшого его изучения я более менее разобрался с процедурой запуска и назначением утилиты.
Итак, x11vnc является фактически удаленным сервером (как и vncserver), но позволяет получать доступ к уже существующей X-сессии!
На машине, к которой необходимо подключиться:
Эта команда позволит позаимствовать пароль для подключения к серверу из файла ~/.vnc/passwd (тут лежит пароль, который был задан при первом запуске vncserver). Далее непосредственно запустим x11vnc:
x11vnc -usepw -display :0
Опция -usepw задействует использования пароля при подключении к серверу, -display :0 — запускает сервер на нулевом дисплее (так, где открыта текущая X-сессия).
Теперь мы с удаленной машины можем подключиться к текущей X-сессии, выполнив
При закрытии окна удаленного рабочего стола, завершается и работа x11vnc (на сервере)
Таким образом, я получил то, что хотел))))
Напоследок приведу несколько опций для утилит vncserver, x11vnc и vncviewer, облегчающих траффик и жизнь))
Читайте также: