среда, 19 октября 2011 г.

Упреждающая безопасность - SELinux

На пятом курсе в своем дипломе я пыталась реализовать систему защиты пользовательской информации, основанной на принципах работы kernel-mode руткитов – на перехвате системных вызовов и модификации их кода таким образом, чтобы было возможно скрывать важные данные от любого пользователя. Основным посылом для разработки такой системы являлось то, что в операционных системах Linux пользователь с учетной записью root, в том числе и злоумышленник, обманным путем получивший права рута, имеет доступ ко всем файлам и процессам. Через полгода после сдачи диплома я обнаружила, что проблему вполне можно решить давно известными средствами :)) - например, с помощью программы SELinux.

Разграничительный контроль доступа.
В операционных системах Linux для каждого файла используется три типа прав доступа – read, write и execute, а также три типа пользователей, обладающих правами доступа к этому файлу – владелец, группа владельца и все остальные. Права доступа к файлу можно описать одной строчкой – 

      rwx                   rwx                       rwx
(владелец) (группа владельца) (остальные)

Эта строчка описывает, что может делать с файлом каждый пользователь – читать, писать, исполнять.
Кроме приведенных трех типов пользователей существует еще один – root, суперпользователь. Его права доступа к файлу не задаются никогда, потому что он имеет доступ ко всем файлам и процессам в системе.
Такая организация прав, когда для каждой пары субъект-объект (пользователь-файл) существует перечисление типов доступа, называется разграничительным контролем доступа (DAC, discretionary access control). По умолчанию эта организация используется во всех ОС Linux, но она имеет некоторые недостатки.
Во-первых, когда пользователь, обладающий определенными правами, запускает какую-либо программу – например, веб-сервер Apache – процесс этой программы наследует все права пользователя. То есть Apache будет иметь доступ к личным файлам пользователя и файлам его группы. И если на компьютер попадет эксплойт, использующий уязвимость веб-сервера, все личные файлы пользователя и его группы могут оказаться в руках злоумышленника.
Во-вторых, опасность представляет вседозволенность пользователя/процесса, обладающего правами root. Как и в первом случае, с помощью эксплойта, использующего уязвимость программы, имеющей права рута, злоумышленник может получить доступ к системе. Либо же злоумышленник может подобрать пароль к рутовой учетной записи.

Как видно, стандартный DAC не обеспечивает достаточной безопасности. Существуют другие способы организации прав доступа, работающие поверх DAC, такие как RBAC (role-based access control, управление доступом на основе ролей), и MAC (mandatory access control, принудительное управление доступом). Основой этих двух способов является предоставление пользователям и процессам минимальных прав, необходимых им для работы. Программа SELinux, которой посвящен сегодняшний разговор, является реализацией MAC.

Термины и принципы работы SELinux.
SELinux – это программа, реализующая дополнительный уровень безопасности ОС. Она работает поверх стандартной системы безопасности DAC, то есть не может разрешить или запретить пользователю/программе то, что запрещено стандартными средствами. SELinux ограничивает права приложений с помощью политик. Политика – это набор правил доступа приложений и пользователей к файлам и процессам. Политики можно создавать самим с помощью простого языка описаний правил, также существуют уже готовые политики, входящие в поставку программы. В отличие от стандартной системы безопасности ОС, где происходит взаимодействие субъекта с объектом, в SELinux взаимодействуют домен с типом. Домен – это уровень доступа, которым обладает любой процесс в системе, это описание прав процесса (субъекта). А тип – это уровень секретности, которым обладает любой файл/каталог/сокет (объект). И политика на основе правил при вызове доменом типа определяет, имеет ли домен права на открытие этого типа. Еще один термин, роль, имеет отношение к самому пользователю. Роль определяет, к каким доменам имеет доступ пользователь. У каждого домена, типа и роли есть контекст безопасности – это набор всех атрибутов, которыми обладает домен, тип или роль (то есть его права и права на него). 

На рисунке изображены два пользователя с разными ролями и один процесс (субъекты), пытающиеся получить доступ к одному типу (объекту). Также один из пользователей пытается получить доступ к процессу.
Термины SELinux
Итак, работа SELinux заключается в создании и обеспечении работы определенной политики, которая изначально задает каждому домену, типу и роли их права и права доступа к ним, и в дальнейшем регулирует их взаимодействие. Также правила политики самостоятельно, без участия пользователя, следят и реагируют на определенные события – например, при создании нового файла внутри папки файл наследует права этой папки, это описано в специальном правиле. При желании, такие правила можно изменять вручную.

Как это работает?
Чтобы понять, как именно работает SELinux, нужно отвлечься и рассмотреть понятие LSM (Linux Security Modules). LSM - это система, предоставляющая разработчикам систем защиты единый интерфейс для реализации своих проектов, и позволяющая различным системам защиты взаимодействовать с друг другом без конфликтов. Сама эта система не является защитной. Она лишь предоставляет свой функционал разработчикам. По сути, LSM является структурой, каркасом, описывающим общие правила реализации защитных модулей от разных разработчиков. LSM добавляет в ядро некоторые возможности, а разработчики сами решают, каким образом им воспользоваться этими возможностями.

SELinux является одним из таких защитных модулей, основанных на системе LSM. На его примере можно увидеть, какие возможности предоставляет LSM, и как модуль ими пользуется. Например, одной из возможностей является добавление дополнительных полей к структурам ядра - файлам/процессам/сокетам. В случае SELinux эти поля - рассмотренные выше контексты безопасности. Еще одна возможность - добавление в ядро специальных обработчиков безопасности. Задачей обработчиков является подача сигнала при любом важном событии в системе – создании файла, сокета, процесса, директории, монтирования файловой системы или устройства и т.д.. Все эти функции-обработчики определены в файле security.h (их название начинается на «security_»). В случае, если модуль безопасности не установлен – обработчики подают сигналы о важном событии, но ничего не происходит. А в случае, когда модуль безопасности установлен – например, SELinux, обработчик подает сигнал, а затем передает управление функции SELinux, которая проводит проверку прав.


На картинке изображены две ситуации – в первой модуль не установлен, и возможности LSM не используются, во второй установлен SELinux.
Работа LSM и SELinux
 
Как видно на картинке, в момент вызова security_path_mkdir управление переходит к функции SELinux. Проверив права, SELinux передает управление обратно ядерной функции mkdir.


Теперь следует более подробно рассмотреть принцип работы функций SELinux. Сначала функция, зная идентификаторы процесса и файла, обращается в AVC (Access Vector Cache, кэш вектора доступа), в котором хранятся предыдущие решения SELinux (для быстроты). Если в кэше не было найдено подходящее решение, программа обращается к серверу безопасности. Проверяются контексты безопасности процесса и файла, происходит обращение к применяемой политике и формируется решение.

В следующей части будет рассмотрено применение SELinux на практике.


среда, 1 декабря 2010 г.

Pidgin: руководство к действию

Это была статья на конкурс "Доступный Linux", или что-то вроде того, целью которого было познакомить читателей с миром свободного ПО. Но благодаря черезпопности конкурсного сайта я эту статью посылать не стала и оставляю тут.

Вступление.
Сегодня трудно представить человека, активно пользующегося Интернетом, без маленького приложения, ненавязчиво маячащего зеленым цветочком в углу экрана и преданно встречающего каждое новое сообщение надоедливым, но упорным «о-оу». Как часто мы даем краткий номер из нескольких цифр в качестве средства связи вместе с обещанием «вылезти к вечеру», как много тратим времени на выбор логина, настройку приложения, скачивание темы с героями любимого фильма или просто с милыми котятами (трансформерами, кровищей, группой «3 Doors Down» и Доктором Хаусом на выбор), установкой дополнительных звуков и смайликов? А уж про мучительное выдумывание и смену статуса я вообще молчу, у всех на устах история о юноше, который, выставив статус «принимаю ванну», через полчаса прибегал к компьютеру весь мокрый, менял сообщение на «мою голову» и, удовлетворенный, убегал обратно в ванную.
Навороченная ICQ с ее вечной рекламой, новый QIP 2010 с поддержкой сервиса «ВКонтакте» и Mail.Agent, Twitter и даже Facebook, старый традиционный QIP, выбор ретроградов, ценимый за минимализм и простоту, скромная Miranda, мультиплатформенное подобие «квипа» qutIM - чего только не увидишь сейчас в окошке с информацией о клиенте пользователя. Выбор велик – и пользователи Windows могут экспериментировать вволю.
Но представим, что вы – обычный пользователь, всю жизнь просидевший на «окнах» и свивший себя там уютное гнездышко из знакомых программ и удобных приложений. И вот под давлением вашего друга-«линуксоида», ради спортивного интереса, на спор или еще по какой причине вы решили поставить себе дистрибутив Linux (скорее всего этого будет Ubuntu или Mandriva для начинающих), и теперь сидите, глядя на незнакомый неуютный рабочий стол, и думаете, что вам с этим всем делать. Установка новой системы всегда сопровождается ее обживанием – нужно установить браузер (у вас уже будет стоять Mozilla Firefox), программу для работы с текстом (пакет OpenOffice устанавливается парой щелчков мышью), и, конечно же, интернет-пейджер для общения с друзьями.
Мне бы хотелось поподробней познакомить вас с мультиплатформенным клиентом обмена мгновенными сообщениями Pidgin. Возможно, это маленькое, но очень функциональное приложение поможет вам почувствовать себя в среде Linux, как дома, и вам захочется задержаться здесь подольше. 

Шизанутый голубь.
Чем так хорош этот интернет-пейджер с немного шизанутым голубем на логотипе? Помимо стандартных функций передачи файлов, использования статусов, юзерпиков, смайликов и звуков (всего того, чем вы могли пользоваться в ваших клиентах, идущих под Windows), Pidgin, закрыв глаза, полностью отдается в нетерпеливые руки пользователя по части дизайна внешнего вида. Интерфейс Пиджина хорош и по умолчанию - удобный, простенький, приятный - но вы можете как скачать различные темы: от простой темы в розовом цвете с котенком до полного аналога Adium'а (это клиент под Mac, заслуживший всеобщее одобрение в основном благодаря своему красивому интерфейсу); так и создать свои собственные темы с помощью дополнительного модуля. А дополнительных модулей в Пиджине вообще огромное количество, но об этом мы поговорим позже более подробно. Но самое главное достоинство приложения в том, что он поддерживает множество протоколов (ICQ, AIM, Google Talk, MSN, IRQ, Yahoo! и другие) и дает пользователю возможность одновременно "сидеть" во всех них. Объясняя доступным языком – вам не нужно будет запускать несколько приложений, чтобы одновременно говорить с друзьями  «аське», быть доступным в Google Talk и одним глазом поглядывать на новые сообщения в конференции «Linux для чайников» по «ирке». Вам нужно просто установить Pidgin, добавить и запустить все необходимые вам учетные записи и начинать общаться.

Как нестрашно устанавливать приложения в Linux.
Установка проста до безобразия – зайдя на официальный сайт, просто щелкаем на кнопку «Download» - мудрый сайт сам определит вашу операционную систему и предложит подходящий дистрибутив программы (а если не сможет определить и отправит вас на страницу скачивания исходного кода - не пугайтесь и просто выбирите из столбца слева вашу операционную систему и следуйте инструкциям). Откройте скачанный файл с помощью установщика пакетов Gdeb и нажмите "Установить пакет", он сделает все за вас. Когда Pidgin будет установлен, запустите его - он находится в главном меню во вкладке "Интернет" - Ubuntu мудро и дотошно раскладывает все программы по полочкам.
Добро пожаловать в Пиджин!

Следует выбрать протокол общения, который вы обычно используете (ICQ, IRQ, MSN), ввести ваши данные и нажать "Добавить", а затем "Включать учетную запись", и – тадам! Пурпурный голубь в вашем распоряжении. Добавьте и подключите сразу учетные записи остальных протоколов, если вы их используете, и сделаем еще одну маленькую вещь: для того, чтобы вам не начали приходить кракозябры от друзей в ответ на ваше радостное «привет, я установил Pidgin!», изменим кодировку. Зайдите во вкладку "Уч.записи" и в каждой учетной записи перейдите в "Дополнительно" и поменяйте кодировку на cp1251.

Теперь можно приступать к общению.
Интерфейс программы прост и аккуратен. Ничего лишнего, но и все, что нужно, на месте.

Знакомимся с возможностями.
В нижней части приложения - ваши статусы, посередине - список контактов, сверху - четыре вкладки для настройки клиента. Вкладка "Собеседники" устанавливает настройки отображаемых контактов, их сортировку, возможности отправки мгновенных сообщений, добавление нового собеседника, чата или группы. С вкладкой "Учетные записи" вы уже познакомились, а вот вкладка "Средства" (или "Настройки") будет поинтересней.
Первая функция "Слежение за собеседником" - истинное спасение параноиков и подозрительных жен. Выбрав объект наблюдения и установив параметры слежки, вы будете своевременно получать информацию о всех действиях искомого объекта, а в качестве бонуса можете отправлять ему торжествующие язвительные сообщения на каждое его подозрительное действие.


Функция "Смайлики" позволяет загружать свои смайлы, функция "Модули" позволяет подгрузить дополнительные возможности клиента - например, использовать возможности мыши для переключения между беседами (вниз и вправо - следующая беседа, вниз и влево - предыдущая), менять голосовые и видео настройки, работать с редактором тем. А в "Настройках" можно менять темы, звуки, настраивать интерфейс и возможности беседы - все как обычно. Последняя вкладка "Помощь" говорит сама за себя.

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

Что еще за модули?
Модуль (или плагин) - маленькая программа, которая после установки внедряется в Pidgin и работает вместе с ним. Она может просто изменить внешний вид основной программы, может добавить новую функцию, может улучшить работу Pidgin. Модули призваны сделать использование приложения более удобным и приятным. Хранятся модули (плагины) в папке /usr/lib/pidgin с расширением .so, соответственно, скачанные плагины следует помещать туда. Подключаются они, как мы уже рассмотрели выше, во вкладке "Средства" - "Модули" (нужно просто поставить галочку напротив желаемого модуля), там же и настраиваются.


Плагины можно найти на любой вкус. Просто посмотрите, что вам хотелось бы изменить в приложении, и начинайте поиск:) (на официальном сайте http://developer.pidgin.im/wiki/ThirdPartyPlugins хранится список модулей, но он неполон, так что если вы не нашли желаемого там, поищите в Google).
Например, большинству пользователей, юзающих QIP, может показаться неудобным отсутствие панели инструментов с простыми функциями отключения звука, поиска новых пользователей и настроек - вместе этой панели инструментов всю нижнюю часть клиента занимает строка со статусом. Плагин Toobars, меняющий эту строку на панель инструментов - к вашим услугам.
Если вы боитесь, что вашу переписку перехватят - используйте плагин Off-the-record Messaging, шифрующий сообщения. Если у вас много собеседников, и вы не очень помните, кто из них кто - плагин Gtkbuddynote позволит вам добавлять к имени контакта небольшую заметку о нем.

Популярными становятся плагины для общения в социальных сетях и блогах. Согласитесь, очень удобно - ваши френды из Facebook отображаются в списке контактов, вы видите, кто из них онлайн и находится на сайте, вы можете отправлять им сообщения через Pidgin, а получать его они будут через чат Facebook. Для реализации мечты скачайте модуль Facebook Chat. А плагин Twitgin делает примерно то же для столь популярного сейчас Twitter'а - отображает новые твиты ваших друзей в окне входящих сообщений и позволяет вам в свою очередь писать из Pidgin свои твиты, ретвитить и добавлять любопытные сообщение в избранное. Вы делаете минимум движений - интернет-пейджер работает за вас! 
 
Научимся устанавливать модули.
Давайте посмотрим на примере Twitgin, как могут устанавливаться плагины: заходим в терминал и добавляем дополнительный репозиторий (краткая историческая справка: репозиторий – это место, где хранятся данные. Добавляя дополнительный репозиторий, мы как бы говорим нашей системе, откуда она может скачать файл, который нас интересует):
  • sudo add-apt-repository ppa:micahg/ppa & sudo apt-get update
    и устанавливаем пакет с плагином
    • sudo apt-get install pidgin-microblog
      После этого терминал можно закрыть и зайти в Pidgin: установленный плагин появился в списке. Теперь добавим новую учетную запись:


      После нажатия кнопки "Добавить" откроется интернет страница:


      Нажмите "Allow", и сайт выдаст вам PIM-код, который надо будет ввести в появившееся окно Pidgin:


      После чего в списке собеседников появится twitter.com, и выглядеть все это будет вот так:

      Еще одна возможность - скрипты.
      Кстати, иногда использование плагинов не может помочь вам в задуманном, и тогда ничто не мешает вам написать (или использовать найденный где-то) скрипт. Я совсем не являюсь сторонником постоянной смены статусов - то забываю, то лень, и тогда, пока я готовлю на кухне что-нибудь вкусное, толпы возмущенных людей пишут истеричные сообщения с вопросами, почему я не отвечаю и что я, не хочу с ними дружить? Проблему решил найденный на одном из форумов скрипт, меняющий статус на "Отошел" при закрытии крышки ноутбука.
      Делается это просто: набиваем в терминале:
      • sudo gedit /etc/acpi/lib.sh
      Этой командой мы открываем в текстовом редакторе файл lid.sh, который находится в папке /etc/acpi (это файл со скриптами для управления событиями). Затем вставляем туда строки

       if [ -z "`cat /proc/acpi/button/lid/LID0/state | grep open`" ]; then
                  sudo -u USERNAME /usr/bin/purple-remote "setstatus?status=away&message=крышка моего ноута закрыта"
              else
                  sudo -u USERNAME /usr/bin/purple-remote "setstatus?status=available&message=я тут"
              fi

      Вместо USERNAME нужно ввести ваше имя пользователя, под которым вы находитесь в системе.
      Вставить эти нужно строго в то место, которое показано на картинке:


      И теперь компьютер сам будет сообщать вашим друзьям, что вы сейчас делаете.

      Заключение.
      Мирно гудит кулер компьютера, в штатном режиме охлаждая трудящийся процессор, мигают кнопочки на системном блоке, вы хрустите чипсами, увлеченно смотря на плеере VLC только что вышедшую серию «Доктора Хауса», скачанную с помощью KTorrent, в графическом редакторе Gimp вас дожидается фотография, в которой нужно убрать красные глаза и отрегулировать яркость, под Wine’ом у вас запущены поставленные на паузу третьи Герои – захотелось вспомнить молодость, а в углу рабочего стола скромно приютился Pidgin, изредка издающий ненавязчивые звуки и мигающий окошком сообщений. Pidgin усердно трудится, обеспечивая связь с вашими друзьями и стараясь не потерять по пути ни одного пакета с сообщением из IRQ-конференции «живу и работаю в Linux», копируя вам все новости из Twitter и Facebook-чата, надежно шифруя всю вашу переписку и дотошно не пропуская спам.
      Мне хотелось бы надеяться, что эта статья поможет хотя бы нескольким читателям поверить, что Linux – это не так страшно, неудобно и непонятно, как кажется с первого взгляда. Работа и отдых в Linux может быть ничуть не сложнее и местами даже приятнее, чем в ОС Windows, ведь здесь вы не ограничены ни стоимостью программ, ни жесткими рамками, в которые эти программы вас ставят, ни отсутствием выбора из-за монополизма не-будем-указывать-пальцем-кого. Да, немного непривычно переходить на новую систему и обживаться в ней, тут и рабочий стол не такой, как был, и нет привычных .exe файлов, и всем правят таинственные репозитории. Но вы разберетесь. Ведь под рукой Pidgin, и вы в любую минуту можете связаться с друзьями, чтобы задать вопрос. Или просто поделиться с ними радостной новостью, что Linux вам неожиданно понравился.

      среда, 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). Но часто системы делают это некорректно, появляются проблемы с копированием на устройство, и все равно может потребоваться самостоятельное монтирование.

      суббота, 30 октября 2010 г.

      Festival (часть 2) - применение на практике

      В первой части статьи мы научились устанавливать и работать с Festival. В этой части мы посмотрим, как на практике применить его способности и научить компьютер разговаривать.

      Приветствие.
      В терминале выполняем:
      • sudo gedit /usr/bin/privet
      В открывшееся окно текстового редактора вставляем:

      #!/bin/bash
      dat=`date +%H`
      morning=12
      afternoon=15
      evening=24
      night=6
      if [ $dat -le $morning ]
      then
      echo «Доброе утро, чашку чая?» |festival --tts --language russian
      elif [ $dat -gt $morning ] && [ $dat -le $afternoon ]
      then
      echo «Привет, а когда у нас обеденный перерыв?»|festival --tts --language russian
      elif [ $dat -gt $afternoon ] && [ $dat -le $evening ]
      then
      echo «Добрый вечер, не пора ли спать?»|festival --tts --language russian
      elif
      [ $dat -gt $night ] && [ $dat -le $morning ]

      then
      echo «Немедленно выключите компьютер!Компьютер хочет спать!»|festival --tts --language russian
      fi

      Обратите внимание: автоформатирование может изменить код, и если он не будет работать - перепечатайте его самостоятельно. Важно, чтобы перед -tts --language russian стояло два маленьких дефиса, а не один большой. Также следите, чтобы кавычки во фразе, которую будет произносить программа, были «», а не "".

      Сохраним и выставим права к файлу:
      • sudo chmod 755 /usr/bin/privet
      И добавим получившуюся программу к запускаемым в момент загрузки системы приложениям (Система – Параметры – Запускаемые приложения).

      Открытие/закрытие крышки ноутбука.
      Откроем для редактирования файл /etc/acpi/lid.sh, в котором содержатся скрипты, связанные с закрытием и открытием крышки ноутбука. 
      • sudo gedit /etc/acpi/lid.sh
      Добавляем в этот файл после строки #!/bin/bash следующий текст:

      grep -q closed /proc/acpi/button/lid/LID/state
      if [ $? = 0 ]
      then
      echo "Откройте немедленно!" | festival --tts --language russian;
      else
      echo "Открыто" | festival --tts --language russian;
      fi