Страница 1 из 3

настройка Xvnc

Добавлено: 21 июн 2012, 15:31
SerB
Здравствуйте.
Суть проблемы вот в чем, я подключаюсь к своему серверу (SLES 10.0) через браузер (java plugin, т.е. получается, как клиент tightVNC к встроенному tightVNC серверу) . В результате после подключения в браузере открывается локальный X-сервер, в принципе это нормально, но есть два момента:
1) локаль SUSE - по умолчанию UTF-8 русская, нужное мне приложение (довольно серьезный тренажер) написано для локали ru_UA (KOI-8), для отображения информации (на русском языке) я подключаю шрифты из папки /rus.koi, все нормально при работе в ЛВС (xset +fp /rus.koi) и даже при подключении "удаленно" через X-server XMING (прописываю путь к каталогу со шрифтами в конфигурации xming, предварительно добавив их, - /rus.koi ,- на локальный комп.). А вот при подключении через java-плагин я не могу добавить путь к шрифтам (перепробовал различные варианты). xset q показывет только заданные по умолчанию шрифты. А вот где они прописаны найти не могу. Гугл в помощь, как говорится, но...
2) очень неприятный момент - сервер тренажера (не путайте с X-сервером, в данном случае он - клиент для X-серверов) ОТКРЫВАЕТ на X-серверах клиентских машин (рабочих местах) ряд окон (мнемосхемы, графики, органы управления и т.п., на которых отображается информация из нескольких процессов ) причем наборы окон различные для различных рабочих мест. Идентификация и привязка рабочих меси производится по адресу типа хост:дисплей.экран, например хост:1.0, хост:2.0 ... хост:8.0. Проблема в том, что номера экранов при подключении присваиваются java-плагином с кэшированием (т.е. номер окна равен номеру сеанса, и прежде чем запустить приложение приходится вручную прописывать данные экрана, которые я получаю командой $DISPLAY заново). Нельзя ли как-то автоматизировать это? Т.е. есть ли возможность задать скриптом на сервере (хосте) опрос подключенных к нему клиентов?

Re: настройка Xvnc

Добавлено: 22 июн 2012, 20:13
tundra37
X - это самая большая путаница в Unix. Графическое приложение выводит графику на удаленный/локальный дисплей. На клиентской стороне ставится Х-сервер, который и выводит на реальный дисплей. Задумано это было для реализации через Х-терминалы, а кончилось перегруженным сервисами десктопным Линуксом. Плюс на все это навешана оконная система : от простых до продвинутых типа gnome и KDE. Кто собственно отвечает за фонты я точно не скажу, но - вместе с Х-сервером в Линукс крутится сервер фонтов - XFS. В вашем случае вроде и сервер и клиент в Линуксе - значит и фонты настраивются там. Скорее всего вы просто не там их подключаете. А ваш вопрос неправильный. Сервер не знает клиентов - говорят ему выведи на дисплей 5.0 и он выводит, если он к нему подключен.
Чтобы было понятно опишу реальную ситуацию. Мы работаем из Винды с приложениями в Линукс. Если я ошибусь и в переменной окружения задам не свой дисплей, а дисплей соседа IP:0 - мое приложение исправно нарисует окно у соседа, если конечно у него запущен Х-сервер.

Re: настройка Xvnc

Добавлено: 23 июн 2012, 06:55
SerB
Спасибо, за уточнения в терминологии, то о чем Вы сказали я знаю. Но вот практически не могу понять как реализовать подключение этого же XFS к X-серверу на виндосовской машины (подключению нужных мне шрифтов) именно при подключении через java-плагин (реализующий на виндосовской машине Xserver через tightVNC). С подключением линуксовских процессов (клиентов) и отображением информации на нужный X-сервер проблемы нет, за исключением одной, как организовать вывод именно на нужный X-сервер, адрес которого формируется динамически IP-хоста:N+К+1, где N номер последнего сеанса, К - количество подключенных к хосту X:серверов (как локальных так и удаленных). Т.е. если при первом сеансе подключения адрес у X-сервера на моем виндосовском компьютере в интернет браузере был :1, то при следующем будет :6, а это значит что клиенты будут выводить информацию на ранее подключенный X-сервер (:1), т.е. в никуда. Эта проблема интересна еще и тем что требуется вывод информации от линуксовских процессов на несколько X-серверов (минимум 4). И приходится после каждого сеанса подключения к X:серверу определять его адрес ($DISPLAY) и ручками править скрипт, регулирующий вывод информации от процесса на нужные мне сервера. Вот этот ручной труд и хотелось бы автоматизировать.
Относительно шрифтов, мне не удается даже командой xset +fp задать путь к шрифтам на локальной виндосовской машине, что я делаю при использовании X-Win32 или Xming, задавая путь к этому каталогу со шрифтами, расположенному на локальной виндосовской машине в конфигурациях этих приложений. tightVNC (java-плагин браузера) упорно тащит откуда-то 3 типа шрифтов, заданных где-то по умолчанию).

Re: настройка Xvnc

Добавлено: 23 июн 2012, 18:20
Olej
tundra37 писал(а):X - это самая большая путаница в Unix.
Ну это далеко не так ... даже скорее наоборот: X11 разработан в Массачусетском Технологическом (MIT) ... там плохого не делали ;-) , и X11 сам по себе логичней и стройней, чем, по крайней мере, эклектический, новороченный и "колхозный" Linux.
Вот уж на 20 лет более поздняя придумка VNC, о которой и речь - вот это по логике своей уж действительно достаточно убогое.
tundra37 писал(а):Задумано это было для реализации через Х-терминалы, а кончилось перегруженным сервисами десктопным Линуксом.
Задумано это было для полной независимости GUI от оборудования ... X-терминалы в те годы ещё и не снились.
А то, что именно под Linux в X11 много надобавляли, накорёжили и т.д., так это проблемы Linux (X11 никогда не "затачивался" под Linux + и по возрасту X11 постарше Linux - к моменту разработки X11 Линус Торвальдс ещё только с горшка встал ;-) ).
tundra37 писал(а): Кто собственно отвечает за фонты я точно не скажу, но - вместе с Х-сервером в Линукс крутится сервер фонтов - XFS. В вашем случае вроде и сервер и клиент в Линуксе - значит и фонты настраивются там.
Совершенно не обязательно. Изначально в X11 не было сервера шрифтов. И на сегодня его можно сконфигурировать на работу без XFS.
tundra37 писал(а): Чтобы было понятно опишу реальную ситуацию. Мы работаем из Винды с приложениями в Линукс.
Это если у вас в Windows есть какой-то X-сервер от стороннего производителя (когдато лучшим из подобных был Exeed ... кажется так).
tundra37 писал(а): Если я ошибусь и в переменной окружения задам не свой дисплей, а дисплей соседа IP:0 - мое приложение исправно нарисует окно у соседа, если конечно у него запущен Х-сервер.
Не нарисует. :lol:
По той простой причине, что практически всегда на X-сервере установлен запрет на коннект удалённых X-слиентов (и это при том ещё, если X-серверу вообще сконфигурировано прослушивать TCP/IP на порту 6000+).
Для удалённой работы X-серверу нужно явно разрешить работу от удалённых клиентов, и указать от каких.

И как раз возможность удалённой работы - это совершенно уникальная особенность X11.
Для X11 несколько десятилетий ищут замену... показателен в этом смысле QNX: здесь последовательно сменилось 2 полностью самостоятельных оконных системы: QWindows и Photon, но в полной мере они не дотягивают до функциональности X11, а API Photon - это просто поимённый слепок с API Xlib.

Re: настройка Xvnc

Добавлено: 23 июн 2012, 18:28
Olej
SerB писал(а):Эта проблема интересна еще и тем что требуется вывод информации от линуксовских процессов на несколько X-серверов (минимум 4).
А вот это врад ли ... как любил говорить боец Сухов ;-) ... по крайней мере средствами самого X11:
- X11 использует TCP соединение

Код: Выделить всё

[olej@notebook ~]$ cat /etc/services | grep x11
x11             6000/tcp        X               # the X Window System
x11-ssh-offset  6010/tcp                        # SSH X11 forwarding offset
- в отличие от большинства сервисов, которые могут работать и через TCP и через UDP...
- а TCP не допускает каких-либо механизмов широковащения или групповых операций (установленное двухсторонее соединение, ACK подтверждения и т.д.).

Re: настройка Xvnc

Добавлено: 23 июн 2012, 21:32
tundra37
SerB писал(а):Относительно шрифтов, мне не удается даже командой xset +fp задать путь к шрифтам на локальной виндосовской машине, что я делаю при использовании X-Win32 или Xming, задавая путь к этому каталогу со шрифтами, расположенному на локальной виндосовской машине в конфигурациях этих приложений. tightVNC (java-плагин браузера) упорно тащит откуда-то 3 типа шрифтов, заданных где-то по умолчанию).
TightVNC показывает то, что нарисовано в памяти(значит на Линукс). Там и надо менять шрифты.

Re: настройка Xvnc

Добавлено: 23 июн 2012, 22:31
Olej
SerB писал(а): Суть проблемы вот в чем, я подключаюсь к своему серверу (SLES 10.0) через браузер (java plugin, т.е. получается, как клиент tightVNC к встроенному tightVNC серверу) . В результате после подключения в браузере открывается локальный X-сервер, в принципе это нормально, но есть два момента:
tundra37 писал(а):
SerB писал(а):Относительно шрифтов, мне не удается даже командой xset +fp задать путь к шрифтам на локальной виндосовской машине, что я делаю при использовании X-Win32 или Xming, задавая путь к этому каталогу со шрифтами, расположенному на локальной виндосовской машине в конфигурациях этих приложений. tightVNC (java-плагин браузера) упорно тащит откуда-то 3 типа шрифтов, заданных где-то по умолчанию).
TightVNC показывает то, что нарисовано в памяти(значит на Линукс). Там и надо менять шрифты.
Вот и я как-то не пойму о чём это вы толкуете:
- все VNC (я не сталкивался конкретно с реализацией TightVNC) - используют совершенно свой особенный протокол RFB ...
- Virtual Network Computing:
Virtual Network Computing (VNC) — система удалённого доступа к рабочему столу компьютера, использующая протокол RFB (англ. Remote FrameBuffer, удалённый кадровый буфер). Управление осуществляется путём передачи нажатий клавиш на клавиатуре и движений мыши с одного компьютера на другой и ретрансляции содержимого экрана через компьютерную сеть.
- к протоколу X11 это не имеет ни малейшего отношения:
По умолчанию RFB использует диапазон TCP-портов с 5900 до 5906. Каждый порт представляет собой соответствующий экран X-сервера (порты с 5900 по 5906 ассоциированы с экранами с :0 по :6). Java-клиенты, доступные во многих реализациях, использующих встроенный web-сервер для этой цели, например, в RealVNC, связаны с экранами таким же образом, но на диапазоне портов с 5800 до 5806. Многие компьютеры под управлением ОС Windows могут использовать лишь один порт из-за отсутствия многопользовательских свойств, присущих UNIX-системам. Для Windows-систем экран по умолчанию — :0, что соответствует порту 5900.

Также существует возможность обратного подключения от сервера к клиенту. В этом случае клиент переводится в слушающий (англ. listening) режим и соединение инициируется сервером на 5500 TCP-порт клиента.
- по ставнению с самим X11 протоколом - это совершенно другой механизм и совершенно другие TCP порты.

P.S. Я достаточно плотно (долгосрочно, интенсивно, в реальном проекте) поработал с другим VNC - VNC : TeamViewer (см. тему VNC : TeamViewer) - не помню, чтобы там были минимальные проблемы с отрисовкой.
Да и откуда могут возникать проблемы, если по логике VNC от должен только тупо отрисовать экран удалённого компьютера на моём локальном мониторе? Никаких трансформаций растрового образа при этом уже не происходит.

Re: настройка Xvnc

Добавлено: 24 июн 2012, 14:15
tundra37
Olej писал(а): И как раз возможность удалённой работы - это совершенно уникальная особенность X11.
Для X11 несколько десятилетий ищут замену...
Ну похоже в Линукс ее и не ищут. А вот в Винде появилась. Слабым местом удаленного экрана была "неподдержка" ускоренной графики. И вот свершилось: в 7-ке и далее такая поддержка есть. DirectX не проверял, но думаю свое детище они поддерживают. А вот OpenGL наконец-то стало с нормальной скоростью крутится. VNC конечно хорошо, но оно один экран в Винде поддерживает. А в Линуксе нас больше Х-ы устраивают, т.к. с VNC как раз и начинается чехарда с номерами экранов.

И по теме : номер экрана напрямую связан с используемым портом(хотя могу наврать). Хотя у меня отложились немного другие номера : 5908 - 1 , 5909 - 2 и т.д.
0-й не используется, т.к. он занят родными Х-ами. Вот от этого и надо плясать, наверно. Про много экранов ничего не скажу, но ведь зачем-то существуют номера 0.1 0.2 и т.д. Т.е. на экранах есть подэкраны. И полный номер экрана для локальных Х-ов : 0.0 !!!

Re: настройка Xvnc

Добавлено: 24 июн 2012, 22:36
Olej
tundra37 писал(а):Про много экранов ничего не скажу, но ведь зачем-то существуют номера 0.1 0.2 и т.д. Т.е. на экранах есть подэкраны. И полный номер экрана для локальных Х-ов : 0.0 !!!
Если вы говорите про X11 (X-протокол), то DISPLAY в его синтаксисе определяется как <IP>:<экземпляр X-сервера>.<display этого сервера в xorg.conf>.

По поводу того, что такое экземпляр X-сервера и как они возникают, то у нас была здесь тема: несколько X11 со своими WM.
Это никак не какой-то "подэкран", это отдельный X-сервер, который отрисовывается в отдельный виртуальный терминал (например Ctrl+Alt+F9).

Но я так и не соображу, какое отношение имеет протокол (и вся технология) X11 (в реализации X11R6 или Xorg) - к VNC и его совершенно другому протоколу RFB (удалённый кадровый буфер).
Тут какая-то путаница происходит.

P.S.
В Windows до достаточно последнего времени вообще не было X-сервера, были только реализации от сторонних изготовителей (и коммерческие и свободные)... т.е. вообще не было средств отрисовки примитивов X11 (не знаю как сейчас, но предполагаю, что так же ;-) ).
X-сервер отрисовывает внутренность окна приложения, без рамок и элементов управления окном (без перемещения по экрану, управления размером, рамок, элементов управления: закрытия, свёртывания-развёртывания ...) - это всё должен отрабатывать оконный менеджер, совершенно другая от X-сервера программа, без которой использование X-сервера ... достаточно бессмысленно (у вас всегда будет оконо без рамки, тупо прижатое к левому верхнему углу дисплея).
VNC - это совершенно другая песня, он не отрисовывает окна приложений (он о них просто ничего не знает и не подозревает), он отрисовывает только образ экрана дисплея целиком (кадровый буфер), независимо от того, кто этот кадровый буфер прорисовал: X11 или встроенная оконная система Windows.

Re: настройка Xvnc

Добавлено: 24 июн 2012, 23:01
Olej
tundra37 писал(а):
Olej писал(а): И как раз возможность удалённой работы - это совершенно уникальная особенность X11.
Для X11 несколько десятилетий ищут замену...
Ну похоже в Линукс ее и не ищут. А вот в Винде появилась.
Не нужно бы впутывать сюда Винду ;-) - в Винде вообще нет оконной системы :-o
Здесь у каждого приложения обязательно присутствует "главное окно приложения", это окно более первично для приложения, чем даже его программный код, начинающийся с main... Таким образом там не может быть приложения без собственного графического окна (см. Джефри Рихтера, особенно его 2-е издание). Из-за этого "в Винде" были (да и навсегда остануться, хоть частично и смягчены) сложности с реализацией консольного режима.
А раз приложение + окно - это нераздельная пара, то и говорить о какой-то отдельной оконной системе здесь - полная бессмыслица.

Графическая система X11 и GUI в Винде - это принципиально разные вещи, у них отличается философия.
Попробуйте сконфигурировать (собрать) Windows без графической системы :lol:
В UNIX это - запросто, и так работают значительная часть серверов.
Windows вся построена вокруг своей графической системы, а X11 является совершенно пользовательского уровня (адресного пространства) надстройка над UNIX (всё в точности до наоборот).

P.S. Это не очень широко известно, но вся система X11 (X11R6 / Xorg), в своём классическом виде, постороена полностью в пользовательском адресном пространстве - нет никаких модулей ядра, дайвера видеокарт X11 используют запись в адресные регистры из пространства пользователя. Это уже позже, и только в погоне за производительностью, некоторые бранды индустрии видеоадаптеров (NVIDIA + ATI) стали долепливать свои драйвера для X11 с виде модулей ядра, работающих в режиме супервизора (0 кольцо защиты для процессоров x86).