РАЗРАБОТКА И РЕАЛИЗАЦИЯ X-CLIENT ДЛЯ ОС WINDOWS Аннотация

advertisement
РАЗРАБОТКА И РЕАЛИЗАЦИЯ X-CLIENT ДЛЯ
ОС WINDOWS
Малыгин А.О. студент 5-го курса, кафедры Информатики, математикомеханического факультета СПбГУ, carbon2320@gmail.com
Научный руководитель
Баклановский М.В.
Аннотация
X11 – протокол позволяющий передавать окна
приложений, которые запускаются на удаленном компьютере
с помощью X-Client’a, а так же принимать и пробрасывать
события на локальном X-Server’e
Данный документ представляет собой описание
реализации X-Client’a для Windows OS, эвристические
методы решения и рассмотрение случаев необходимости
использования тонкого клиента в целом.
Введение
X Window System – открытое, платформо-независимое, “серверноклиентское” программное обеспечение (более известное как X11[1]),
которое позволяет управлять оконным графическим интерфейсом
пользователя в распределенных сетях по протоколу X11.
Хочется акцентировать внимание на том, что использование
концепции клиент-серверной модели отлично от обычного представления.
В X11 используются следующие термины:
 X-Client в концепции клиент-серверной модели, означает сервер,
который, в свою очередь, запускает приложение и передает управление
на X-Server;
 X-Server в концепции клиент-серверной модели, означает клиент,
который принимает управление от X-Client’а и занимается следующими
задачами:
 построение окна и передача оконному менеджеру для отображения;
 обработка событий мышки и клавиатуры, передача их на X-Client;
Во многих Unix подобных системах используется протокол X11, как
основной. А для отображения окон используются оконные менеджеры.
Например, в GNOME[6], используют “Metacity”[7], а в Mac OS используют
QUARTZ[9], как одни из стандартных оконных менеджеров.
Постановка задачи
Многим пользователям доводилось работать с неизвестными, только
что загруженными, непроверенными приложениями, которые часто
вызывают недоверие и заставляют беспокоиться о конфиденциальности
тех данных, которые хранятся у них на компьютере. При установке таких
приложений, стоит задуматься о целостности информации. Даже, если у
вас есть антивирус, не стоит думать, что базы данных антивируса
обновляются раньше, чем создается очередной, новый вирус. Отсюда
возникает задача безопасности целостности системы в целом.
Предлагается запускать приложения на удаленной, (возможно,
виртуальной), машине. При помощи X-Client’a передавать окно
приложения на локальную машину, а при помощи X-Server’а рисовать его
и передавать происходящие события мышки и клавиатуры обратно. Тем
самым, мы получаем, подобие песочницы, которая гарантирует нам
целостность наших данных.
На текущий момент, по протоколу X11 возможно передавать окна
следующим образом в следующих операционных системах:
1.
C Linux на Linux, т.к. протокол X11 лежит в основе системы;
2.
C Linux на Windows OS, т.к. существуют решения X-Server’а для
Windows OS (Например, MobaXTerm[8]);
Но, не были реализованы следующие варианты, поскольку в основе
Windows OS не лежит протокол X11:
1.
C Windows на Linux
2.
C Windows OS на Windows OS
Хочется отметить, что в данном случае рассматриваются отдельные окна
одного приложения, а не весь рабочий стол в целом co всеми имеющимися
приложения. Это делает клиент тонким, с точки зрения приложения.
На рис.1 схематично изображено описанное выше представление
возможностей передачи окна приложения.
Рисунок 1: Реализованные решения передачи окна по протоколу X11.
Стоит отметить, что реализация такого X-Client’а для Windows OS,
позволит работать с разными типами приложений, запущенных на разных
операционных системах, например, таких как Windows 3.1, Windows XP,
Windows 7, Linux (рис.2).
А так же, X-Client’а удобно использовать в разделенном рабочем
пространстве.
Рисунок 2: Демонстрация тонкого клиента и отображения приложений с разных
операционных систем.
.
Реализация X-Client’а для Windows OS
В первую очередь, было изучено большое количество информации по
существующим решениям. Вследствие чего, было найдено следующее
проприетарное ПО: “Citrix MetaFrame”[2]. После этого, была получена
информация из официального сообщества разработчиков X11[1], о том, что
можно реализовать свое оконное приложение, используя протокол X11 и
библиотеку xlib[4] для Windows OS. Отсюда возник вопрос о таком
приложении, которое сможет передавать любые окна по этому протоколу и
появилась идея реализации универсального X-Client для Windows OS.
Поскольку, переписывание всех существующих приложений на X11 не
представляется возможным, а также изменения GDI[3] на X11 без
исходного кода, является трудоемкой задачей, то было принято решение
передавать фреймовый буфер.
Отсюда возникли следующие задачи:
1.
Захват изображения приложения;
a. Получение окна приложения;
b. Удаление рамки приложения;
c. Удаление прозрачности приложения;
d. Захват многооконного приложения;
e. Отображение курсора;
2.
Передача фрейма по протоколу X11;
a. Сжатие изображения;
b. Создание окна из изображения;
c. Передача пустого курсора;
d. Расчет размеров окна;
3.
Получение и обработка событий X-Server’а;
a. Получение кликов мышки;
b. Пересчет координат мышки;
c. Получения символов клавиатуры;
d. Получение escape последовательностей клавиатуры;
e. Подбрасывание событий в приложение;
Замечу, что многие из задач трудно разрешимы, как для разных
версий Windows OS, так и для одной. Многие методы решения являются
эвристическими. Например, для разных приложений Windows OS
используются разные стили окна, скажем, тройная рамка или одинарная, а
может и двойная. На помощь приходит Windows API[5], который позволяет
настроить стили приложения. А также отсутствие иерархии окон в
Windows OS задают неразрешимость и решаются только эвристическими
методами.
На данный момент был реализован тестовый X-Client для Windows OS
на C#, который позволяет находить все открытые, не свернутые, оконные
приложения, представлять их в виде списка, для удобства просмотра и
выбора окна для передачи на X-Server. А так же, приложение позволяет
менять стили окна и убирать рамку и сохранять фрейм. На языке C было
реализовано сжатие фрейма, передача его на X-Server и обработка событий
клавиатуры. При помощи очереди сообщений, события подбрасываются в
буфер приложения с текущим хендлером и обрабатываются им. Так же,
реализован полуавтоматический алгоритм передачи фреймов, который в
дальнейшем будет полностью автоматизирован.
В ближайших планах, реализовать автоматизацию обновления
фреймов и обработку escape последовательностей клавиатуры, а так же,
обработку событий мышки и пересчет размера окна.
Заключение
В документе были представлены общие сведения о X Windows System,
основные понятия этой системы, задачи и возможные решение
безопасности конфиденциальных данных, а так же, план реализации XClient’a для Windows OS.
Литература
1.
2.
3.
4.
5.
6.
7.
8.
9.
Сообщество разработчиков X11 http://www.x.org
Citrix MetaFrame http://www.citrix.com/
GDI http://msdn.microsoft.com/en-us/library/ms533797.aspx
Xlib http://tronche.com/gui/x/xlib/
Windows API http://msdn.microsoft.com/enus/library/windows/desktop/ff818516(v=vs.85).aspx
GNOME http://www.gnome.org/
Metacity http://xwinman.org/metacity.php
MobaXTerm http://mobaxterm.mobatek.net/
QUARTZ http://quartz-scheduler.org/
Download