среда, 10 ноября 2010 г.

X Window System - немного теории

X Window System. Основные понятия.
X Window - оконная система (реализующая диалог пользователя с программами через окна), обеспечивающая корректное графическое отображение действий пользователя, производимых с помощью мышки и клавиатуры, отрисовку и перемещение окон.
Система X Window - это не программа и не приложение, ее нельзя запустить щелчком мыши; и не надо путать ее с графической средой рабочего стола; это способ организации построения графического интерфейса. В этой системе используется клиент-серверная модель. В чем ее основная идея?

Система X Window знает, что внутри нашего компьютера есть много разных программ, которые не умеют рисовать, у них нет карандаша, но они умеют командовать (это знакомые нам Gimp, OpenOffice, текстовый редактор). Такие программы называются Х-клиентами. Им всем нужно, чтобы кто-то нарисовал на экране то, что они хотят. Кроме них, существует программа Х-сервер, которая сидит с карандашом, умеет рисовать и умеет общаться с мышкой, клавиатурой, монитором по своим, серверным правилам.  Если бы не система X Window, то Х-клиенты бестолково бегали бы по компьютеру и раз за разом требовали нарисовать прямую линию или прямоугольник, а Х-сервер сидел бы в углу с карандашом и периодически обменивался замечаниями с мышкой и клавиатурой.
 Но система X Window научила их разговаривать по определенным правилам (прежде чем что-то потребовать, они должны сказать "пожалуйста", а в конце предложения поставить точку). И теперь Х-клиенты говорят: "Пожалуйста, нарисуй прямоугольник по таким-то координатам", Х-сервер рисует и отвечает: "Пользователь нажал на кнопку ОК, пожалуйста, отобрази ему нужную информацию". Эти правила, по которым общаются клиенты и сервер, называются протоколом X Window.

Повторим: Х-сервер называется сервером, потому что он дает приложениям-клиентам доступ к монитору, мышке и другим устройствам ввода-вывода. Х-сервер - это программа, которую можно потрогать и установить, запустить и отключить (если мы ее отключим, то, соответственно, будем радостно сидеть в консоли). Она запускается автоматически при загрузке операционной системы.

Х-протокол.
Х-протокол довольно прост и поддерживает четыре типа сообщений между клиентом и сервером:
Запрос – клиент требует нарисовать что-либо в окне или запрашивает у сервера информацию;
Ответ – сервер отвечает на запрос;
Событие – сервер сообщает клиенту о событии (например, о нажатии клавиши пользователем);
Ошибка – сервер сообщает об ошибке.
Также нужно отметить, что протокол использует ассинхронный метод обмена данными, то есть, ни Х-клиент, ни Х-сервер при обмене сообщениями не должны ожидать подтверждения запрошенной операции, что увеличивает быстродействие.

Хорошо, с клиент-серверной моделью и Х-протоколом все понятно, идем дальше. Что еще особенного есть в системе X Window?

Работа по локальной сети. Понятие Х-терминала.
X Window система позволяет реализовывать общение сервера и клиентов по локальной сети. То есть, мы можем запустить на одном компьютере Х-сервер, а на нескольких других - Х-клиенты и набрать в консоли компьютера с Х-сервером команду xhost + (она разрешает глобальный доступ к запущенному серверу. Если мы хотим дать доступ не всем, а определенному компьютеру, то после + нужно добавить имя этого компьютера. Если хотим убрать доступ - меняем + на -). Соответственно, мы также должны сказать машине с Х-клиентом, что она может обращаться по сети к Х-серверу (с помощью команды Xterm - это эмулятор терминала, осуществляющий связь между интерфейсом командной строки и интерфейсом X Window - ключа Display и указания сетевого адреса машины с запущенным сервером). После этого команды от Х-клиентов будут отправляться по локальной сети.
Компьютер, в котором запущен только Х-сервер, называется Х-терминалом.
Х-сервер в комплекте с аппаратно-программным обеспечением (если оно может выполнять команды Х-сервера и обслуживать клавиатуру и мышку) называются дисплеем.
А экраном называется та картинка, которую мы видим при запуске Х-сервера.
Еще одно понятие - ресурсы сервера. Для увеличения быстродействия для каждого приложения сервер хранит данные об используемых приложением шрифтах, курсорах и палитре.

Идем дальше. Итак, мы поняли, что Х-клиенты - пользовательские приложения - выполняя свои функции, просят Х-сервер отобразить их графическое сопровождение по определенному Х-протоколу, а Х-сервер выводит данные на экран и передает Х-клиентам информацию о действиях пользователя, произведенных через клавиатуру или мышь. Но кто же тогда занимается созданием самого интерфейса приложения - кнопок, меню, заголовков окон?

Менеджер оконных приложений. Библиотека Xlib.
Оказывается, между Х-клиентом и Х-сервером находится еще кое-кто - Менеджер оконных приложений. По сути, он тоже является Х-клиентом - но он также управляет другими клиентами. Вспомним, что Х Window - оконная система, и каждое приложение запускается в своем окне. И именно Менеджер окон занимается внешним видом и размещением окон приложений, он обеспечивает выполнение операций с окнами: прорисовку рамок, меню, иконок и полос прокрутки.
Почти всегда пользователь работает не с одним приложением, а сразу с несколькими - браузер, джаббер-клиент, текстовый редактор, и на экране можно видеть, что приложения накладываются друг на друга, одно окно сзади, второе спереди, третье посередине. Как серверу определить, с каким приложением собирается работать пользователь, когда он кликает мышкой? За этим следит Менеджер окон. Он делает активным именно то окно, на которое указывает курсор.
Надо упомянуть об еще одной важной составляющей системы X Window - библиотеки Xlib. В этой библиотеке содержатся функции на С, реализующие Х-протокол. То есть, обращаясь к Х-серверу, наш Менеджер оконных приложений заглядывает в библиотеку Xlib, берет оттуда необходимую функцию и вызывает ее. Подробно об этом можно почитать в статье на rus-linux.net.
Теперь мы можем отобразить все это в совокупности на подробной картинке:


В конце теоретической части хотелось бы остановиться на еще одном пункте: не надо путать Менеджер оконных приложений (менеджер окон) с графической средой рабочего стола (KDE, GNOME, LXDE). Среда рабочего стола включает в себя Менеджер окон. Менеджер окон отвечает за наши приложения: занимается отрисовкой перемещения окон, изменением размеров, внешним видом. А среда рабочего стола отвечает за весь наш рабочий стол:)

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

вторник, 9 ноября 2010 г.

Festival (Часть 4) - последняя:) Ссылки

Скрипты:
  1. Самый популярный банк скриптов на Wikia (дата, время, заряд батареи и т.д.). 
  2. Forum.ubuntu.ru (почта, всплывающие уведомления, будильник) - не очень удобная форма представления данных, зато это форум, можно задать вопрос создателю, если скрипт не работает.
Как еще использовать Фестиваль:
  1. Asterisk и Festival
  2. Pidgin-festival (дополнение, с помощью которого, видимо, Фестиваль будет проговаривать входящие сообщения). Еще не пробовала, буду в ближайшем времени.
Просто ссылки:
  1. Обсуждение с создателем (на форуме создатель русской базы отвечает на вопросы. Несмотря на то, что датировано все древним волосатым годом, можно найти много интересного).
Будет дополняться по мере нахождения.

На этом свою курсовую считаю законченной :) , но эксперименты с Фестивалем не оставляю - заставить скрипт Будильника работать корректно пока никак не получается, отдохну и возьмусь с новыми силами, и пиджин-фестиваль тоже нужно обязательно протестировать.

Festival (Часть 3) - исправляем ошибки

Во время работы с программой у вас могут возникать ошибки, связанные с совершенно разными проблемами.Вот некоторые из них, наиболее распространенные, с которыми сталкивалась я и решения которых нашла на форумах.
  • Самая распространенная ошибка -
LTS_Ruleset russian_downcase: no rule matches: LTS_Ruleset: # *here* + какое-то слово здесь.

1 причина: в своем вы использовали недопустимый символ, который Festival не умеет обрабатывать (об этом ниже).
 - поправьте скрипт.

2 причина: вы скрипт сами не писали, сделали Copy+Past с какого-то сайта, вставили в свой текстовый редактор и сохранили. Некоторые редакторы делают автоформатирование, например, меняют двойной дефис на одинарный, кавычки-двойные на кавычки-елочки.
 - воспользуйтесь другим редактором и вставьте скрипт с сайта туда.

3 причина: вы сделали Copy+Past с сайта, но вы точно уверены, что ваш редактор автоформатированием не занимается! Значит, автоформатированием занимается сайт, с которого вы копируете скрипт.
 - перепечатайте скрипт ручками.

4 причина: некоторые текстовые редкторы при сохранении файлов в UTF-8 в начало файла добавляют BOM (подпись UTF-8 в виде трёх байтов). Festival не воспринимает ее, как подпись, пытается обработать и не может.
 - воспользуйтесь другим редактором.

5 причина: вы заставляете Festival говорить одновременно на нескольких языках.
 - одна сессия - один язык.

  • У программы есть баг - не работает при включенном аудио- или видео-проигрывателе.
Чтобы это исправить, добавьте в файл /usr/share/festival/festival.scm в самый конец строчки:
(Parameter.set 'Audio_Method 'Audio_Command)

(Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r $SR $FI

  • Не забывайте давать вашим скриптам право на исполнение.
 chmod +x script.sh (меняете script.sh на имя вашего скрипта)


Список распознаваемых символов:
lБуквы: A-z, А-я,
Символы: - ' + ? ! . , (+ специально используется для расстановки ударений)
Цифры: 0-9 
Список известных нераспознаваемых символов и их сочетаний:
/ (слеш)
«» (кавычки-елочки) 
?* (где * - один или более пробелов, например, "Как дела? Какие планы на сегодня?". Ставьте вместо пробела - точку, тогда будет работать. Или просто без пробела после вопросительного знака)
.* (где * - любой знак, кроме пробела. После точки всегда обязателен пробел).


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

понедельник, 8 ноября 2010 г.

Использование одной флешки в Windows и Linux

Сегодня почти у каждого человека есть usb-флешка - удобный девайс для переноса данных с одного компьютера на другой. В случае с Windows от пользователя не требуется никаких действий, кроме как вставить флешку в нужный разъем - через управляющий канал, работающий по принципу "вопрос-ответ", флешка сообщит операционной системе все нужные данные для определения типа устройства и установки нужного драйвера. Чаще всего магазинные флешки имеют формат файловой системы ntfs - дань могуществу компании Micrisoft, но этот формат не поддерживается в Linux-системах. А что делать, если данные необходимо передать с Windows на Linux?

Сначала необходимо отформатировать флешку, как FAT32, этот формат поддерживается обеими операционными системами. Предварительно удалив все данные, щелкаем правой кнопкой по иконке флешки в Моем Компьютере, выбираем "Отформатировать..." и щелкаем на нужный формат. Готово. Переносим на флеш нужные нам данные и идем ко второму компьютеру.

При подключении флешки Linux рассматривает ее как SCSI-диск. Он видит наш накопитель, и ассоциирует его с одним из файлов-дырок (файлы-"прообразы" подключенных к компьютеру устройств) в папке /dev. Первым делом нам нужно определить, с каким именно файлом был ассоциирован накопитель.
Введем в терминале:
  • sudo fdisk -l
Команда -l программы fdisk выводит пользователю данные о всех имеющихся файловых системах. Мы увидим что-то вроде этого:


Исходя из размера и файловой системы можно догадаться, что наша флешка - это последняя строчка, /dev/sdb1 (скорей всего sdb использовался по причине занятости всех имеющихся по умолчанию sda, но, возможно, по другой какой-то причине).
Далее мы должны создать директорию, в которую будем монтировать флешку. Создается она в папке /mnt (в принципе, можно в любой папке, но так по канону):
  • sudo mkdir /mnt/flashka
И монтируем туда нашу флешку:
  • sudo mount /dev/sdb1 /mnt/flashka
Заходим в эту папку, и видим файлы, которые мы записали на флешку.
Имеет смысл прописать в файл  /etc/fstab ( в нем хранится информация о точках монтирования) такую строчку:

/dev/sdb1 /mnt/flashka vfat rw,users,iocharset=koi8-r,codepage=866,sync

Vfat указывает на тип нашей файловой системы, users указывает, что монтировать может любой пользователь, а не только root, iocharset и codepage помогают избежать проблем с кодировкой при переносе файлов из разных ОС, а sync запрещает кэширование (если его убрать, то флешку нужно будет каждый раз размонтировать, иначе она повредится). 



Прежде чем начинать монтировать флешки вручную, проверьте - некоторые современные системы научились монтировать устройства самостоятельно (ищите директорию в папке /media). Но часто системы делают это некорректно, появляются проблемы с копированием на устройство, и все равно может потребоваться самостоятельное монтирование.