РАЗРАБОТКА И РЕАЛИЗАЦИЯ 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/