LXF169:Linux – что это?
|
|
|
Linux – что это?
Нейл Ботвик копается в лучшей в мире операционной системе, выясняя, что же заставляет ее работать.
Слово «Linux» — одно из самых часто встречающихся в этом журнале, но что оно означает? Оно означает разное для разных людей — от пуристов, для которых это в первую очередь ядро, до сторонников GNU, которые считают его частью GNU/Linux, и новых пользователей, полагающих, что это второе название Ubuntu. На самом деле Linux — все это сразу, а выбор зависит от вашей точки зрения. Строго говоря, термин “Linux”, используемый отдельно, относится к ядру операционной системы, а GNU/Linux — это вся операционная система, объединяющая ядро Linux и инструменты GNU; одно будет совершенно бесполезно без другого (или какой-либо его альтернативы).
Если добавить сюда еще и приложения, и некоторые инструменты, позволяющие управлять всем этим в целом, вы получите дистрибутив, например, Ubuntu.
За долгие годы мы рассказали практически обо всех отдельно взятых компонентах, составляющих операционную систему, известную нам как Linux, но они не работают по отдельности – они должны объединяться вместе, и здесь мы попытаемся объяснить, как из частей складывается целое и что эти части делают.
Что такое ОС?
Что такое дистрибутив?
Операционную систему можно определить как программу, необходимую для того, чтобы приложения работали на оборудовании – как таковая, она состоит из нескольких переплетенных уровней. В самом сердце ее лежит ядро, которое взаимодействует с оборудованием через драйверы и позволяет другим программам использовать это оборудование. Поверх него располагаются различные слои, работающие с устройствами ввода, сетевыми устройствами, устройствами звука и видео. Обычно вам незачем об этом знать. Знания, конечно, бывают полезны при возникновении каких-либо проблем, но даже тогда они не так уж важны, особенно если ваш компьютер есть кому отремонтировать. Однако, раз уж вы читаете этот журнал, есть вероятность, что вас интересует происходящее «внутри» Linux, и мы попытаемся дать вам представление об этом – и о том, кто за что отвечает.
Дистрибутив Linux – это способ распространения основанной на Linux операционной системы и сопутствующих программ. В самом начале это были просто файлы, необходимые для ОС, плюс способ их установки на компьютер. Постепенно дистрибутиву начали требоваться менеджеры пакетов, инструменты обновления, настройка GUI и множество иных удобств. Тем не менее, при появившихся дружелюбии к пользователю и внешнем лоске (или не появившихся, если ваш дистрибутив – Gentoo) все дистрибутивы по-прежнему представляют собой Linux.
Ядро
Нервный центр в сердцевине вашей операционной системы Linux.
Ядро — это бьющееся сердце системы, но что оно такое? Ядро — это программный интерфейс к оборудованию компьютера. Оно общается с CPU, памятью и прочими устройствами от имени любой программы, установленной на компьютере. И как таковое, является самым низкоуровневым компонентом среди программ — и самым важным. Если в ядре есть проблема, эта проблема отражается на любой программе, работающей на компьютере.
Ядро Linux монолитно, т. е. все основные сервисы ОС работают в нем. Альтернативный подход – микроядро, где большая часть работы делается внешними процессами, а ядро занимается всего лишь координированием.
Чисто монолитное ядро неплохо работало раньше, когда пользователи компилировали ядро под свое оборудование; но сейчас такое количество комбинаций оборудования, что встраивание их всех в ядро приведет к появлению неподъемного файла. Поэтому ядро Linux стало модульным: ключевые функции находятся в файле ядра (его можно увидеть в /boot как vmlinuz-version), а опциональные драйверы встроены в виде отдельных модулей в /lib/modules (файлы .ko в этой директории).
Например, 64-битное ядро Ubuntu 12.10 имеет размер 5 MБ, и есть еще 3700 модулей, занимающих более 100 MБ. На конкретной машине нужна только часть из них, и было бы сущим безумием пытаться загрузить их все с основным ядром. Вместо этого ядро определяет используемое оборудование и загружает соответствующие модули, которые становятся частью ядра в памяти, так что в загруженном виде оно по-прежнему остается монолитным, даже когда распределяется по тысячам файлов. Это позволяет системе реагировать на изменение оборудования. Если подключить устройство USB, загрузятся модуль usb-storage и модуль файловой системы, необходимый для того, чтобы его подмонтировать. Вот почему при добавлении оборудования так редко приходится устанавливать новые драйверы: все они уже есть, и просто ждут, когда вы купите и подключите новые игрушки. Компьютеры, работающие на специализированном оборудовании, которое не изменяется, например, серверы, обычно имеют ядро с уже скомпилированными необходимыми драйверами и отключенной загрузкой модулей, что добавляет небольшую долю безопасности.
Если вы компилируете свое ядро, хорошо бы взять за правило встраивать в него драйверы для тех устройств, которые всегда используются, например, для сетевого интерфейса и файловых систем жесткого диска, а для всего остального создать модули.
И еще модули
Огромное количество модулей, большинство из которых – драйверы устройств, стало одной из сильных сторон Linux: по умолчанию поддержано столько устройств, что драйверы качать и устанавливать откуда-то еще совершенно незачем. Но некоторые устройства пока не охвачены встроенными в ядро модулями, обычно по причине того, что код еще очень нов или его лицензия не позволяет включать его в ядро (да, ZFS, это про тебя).
Самый известный пример – драйверы для карт Nvidia. Обычно именуемые сторонними модулями, хотя Ubuntu также использует термин «ограниченные драйверы», они устанавливаются из вашего менеджера пакетов, если их поддерживает ваш дистрибутив. В ином случае их придется компилировать из исходника, что нужно будет проделывать регулярно, при каждом обновлении ядра, поскольку они привязаны к ядру, для которого компилировались.
Предпринимались некие попытки автоматизировать этот процесс, например, DKMS (Dynamic Kernel Module Support – динамическая поддержка модулей ядра), когда при установке ядра автоматически перекомпилируются все сторонние модули, делая процесс обновления ядра почти таким же безболезненным, как процесс обновления пользовательских приложений.
Говоря о ядре, обязательно жонглируют такими понятиями, как «область ядра» и «пользовательская область». Область ядра – это память, доступ к которой есть только у ядра; ни одна пользовательская программа (то есть нечто помимо ядра и его модулей) не может ничего здесь записывать, поэтому сторонняя программа не может повредить работе ядра. А пользовательская область – это область, доступ к которой может получить любая программа с соответствующими привилегиями. Это способствует стабильности и безопасности Linux, поскольку ни одна программа, даже работающая от имени суперпользователя-root, не может напрямую разрушить ядро.
Порядок загрузки
Таинственное чередование вспышек и звуков при запуске.
Большинство дистрибутивов при загрузке сразу прикрываются заставкой, и мы не можем наблюдать за происходящим. А происходит-то много чего — как до появления заставки, так и после. Первым загружается BIOS с материнской платы. Она ищет устройство загрузки и загружает с него код.
Если жесткий диск использует традиционную систему деления на разделы DOS, она содержится в Master Boot Record (MBR) диска – всего 512 байт. 64 байта используются для хранения таблицы разделов для диска (вот почему доступны только четыре первичных раздела), а остальные 446 байт остаются для кода программы-загрузчика (обычно это Grub). В 446 байт особо много функций не впихнуть, поэтому все, что делает этот код – загружает остаток загрузочного кода откуда-то еще с диска, из того места, которое устанавливается при задании кода MBR загрузчиком.
В поисках списка опций загрузки загрузчик считывает свой файл конфигурации – обычно это /boot/grub2/grub.cfg – и либо отображает меню, либо переходит прямиком к загрузке по умолчанию. На данной стадии Linux никак не задействован: работает только код загрузчика. Файл конфигурации выдает загрузчику адрес ядра Linux и всех необходимых файлов initramfs, а также любые другие настройки, такие, как раздел root и то, надо ли скрывать это все за заставкой. Для желающих видеть, что происходит начиная с этого момента и дальше, в большинстве дистрибутивов заставку можно убрать, нажав кнопку Е для редактирования пунктов меню Grub, удалив опции заставки и заглушения звуков и нажав F10 для продолжения загрузки.
Зачем нужен ramdisk?
Большинство дистрибутивов используют файл initramfs – главным образом, по той причине, что определенные драйверы, в частности, нужные для загрузки диска (например, контроллеры SATA и код файловой системы), надо загружать вместе с ядром. Для обычного дистрибутива встраивание всех возможных опций в ядро раздует его настолько, что оно окажется неработоспособным, поэтому все встраивается в виде модулей, и те, что нужны для загрузки, включаются в initramfs. Это тип ramdisk’а, загружаемого программой загрузки вместе с ядром (используя процедуру BIOS, чтобы считать его с диска), содержащий все файлы, необходимые для того, чтобы подмонтировать раздел root. Здесь помогает функция распознавания ядром устройств, решая, какие модули загружать, и затем управление передается жесткому диску. Также initramfs используется для вывода на экран заставок, поэтому они и появляются в самом начале процесса загрузки.
После монтирования раздела root, напрямую или через initramfs, всерьез запускается последовательность инициализации. Традиционно она начинается с запуска /sbin/init, которая затем запускает все остальное, под контролем /etc/inittab, и отвечает за список сообщений при запуске сервисов, которые вы видите на консоли, если у вас нет заставки. Также это позволяет увидеть, в каком месте процесс загрузки подвис или занял больше положенного времени, если у вас возникли такие проблемы.
Новые опции
Время идет, и все эти системы подвергаются изменениям. На самом последнем оборудовании BIOS заменяется на UEFI, хотя если вы установили программу загрузки, разницы вы не почувствуете. Есть также попытки заменить традиционную систему SysVinit, которая существует уже много лет. Ubuntu ввел Upstart, а Red Hat и Fedora предпочитают systemd.
Все они делают примерно одно и то же – запускают задачи, необходимые, чтобы заработала ОС. Отличаются только методы. Основное различие в том, что SysVinit последовательна: каждый следующий сервис дожидается завершения запуска предыдущего. Медленно запускаемый сервис тормозит все остальные. Upstart и systemd запускают сервисы параллельно, избегая подобных узких мест. Конечно, есть те, кто считает, что Linux настолько стабилен, что время загрузки не столь важно – если вы вместо выключения машины можете уйти в спящий режим, перезагрузка становится весьма редким случаем.
> Убрав заставку, вы увидите процесс загрузки во всей красе, в том числе и состояние запускаемых процессов.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Библиотеки
Логика разделения функций между программами.
Linux использует библиотеки, чтобы разделить код между приложениями. Если некая программа foo использует функции, полезные для кого-то еще, она помещает их в библиотеку — назовем ее libfoo. И если другой программе, назовем ее хотя бы bar, понадобится та же функция, она всего лишь обратится к библиотеке libfoo, не изобретая велосипед заново.
Это означает, что на вашем компьютере имеется всего одна копия кода функции; если какой-то проект обнаружит в ней ошибку, та будет исправлена везде. Здесь также возникает понятие зависимостей: и foo, и bar зависят от libfoo и бесполезны без нее. Это приводит к феномену «ада зависимостей», когда попытка установить программу завершается ошибкой и списком недостающих зависимостей, а попытка установить их притягивает еще больше зависимостей. В наши дни это скорее неприятное воспоминание, поскольку репозитории дистрибутивов стали более всесторонними, а менеджеры пакетов лучше справляются с сортировкой.
Если вы работаете со своим менеджером пакетов и репозиториями, то обо всех зависимостях позаботятся, и вам даже не придется о них думать. Попробуйте установить пакет somerandom.deb или somerandom.rpm, скачанный с некоего сайта – назовем его www.somerandomsite.com; и вы вмиг поймете, почему стоит все перевалить на менеджер пакетов. Одно из предлагаемых решений – статическая компиляция программ. Это означает, что вместо динамических ссылок на код в libfoo и подгрузке при необходимости во время работы, и foo и bar включали бы код в свои исполняемые программы. Тогда каждый файл программы станет отдельным объектом, без всяких зависимостей; но он будет намного объемнее, и если в коде libfoo обнаружится ошибка или брешь в системе безопасности, и foo, и bar придется перекомпилировать и заново включать в пакеты вашего дистрибутива, чтобы исправить ситуацию. На невстраиваемых устройствах предпочитают применять динамические ссылки, а вот в initramfs, вызываемом во время загрузки, удобны статические: тогда не надо включать библиотеки в образ ramdisk. Любопыствующие могут узнать, на какие библиотеки ссылается программа – командой ldd.
ldd /usr/bin/someprogram
покажет все библиотеки, нужные программе, и библиотеки, нужные этим библиотекам, и т. д., пока вы не доберетесь до libc – прадедушки библиотек Linux.
Менеджеры пакетов
Замечательная гибкость дистрибутивов Linux означает, что большинство элементов можно изменить. Приложения по умолчанию, рабочие столы, даже ядро можно поменять, так что лучше всего считать дистрибутив Linux – какой-нибудь Fedora или Ubuntu – всего лишь стартовой точкой для индивидуальной настройки.
Но есть одна вещь, не так легко поддающаяся изменениям, а именно – менеджер пакетов: единственный способ его сменить – это взять другой дистрибутив. Попробуйте, например, сравнить Yast от SUSE с Synaptic в Debian, и вы удивитесь, до какой степени столь важный инструмент может изменить ваш опыт работы в Linux.
Графика
Как вашему Linux удается столь классно выглядеть.
Стандартной основой для графического интерфейса является X Window System. Всякие KDE и Gnome обеспечивают интерфейс пользователя и внешнюю привлекательность, но именно через Х они общаются с оборудованием. Долгие годы Х требовал массу мистических опций настройки и требовал наличия длинного файла конфигурации, содержащего такие вещи, как моделайны, задающие частоту пикселизации и синхронизации.
Ныне большинство систем обходятся без всяких файлов настройки. Солидные улучшения в распознавании оборудования означают, что система с одной видеокартой и одним дисплеем будет «просто работать». Возможно, понадобятся дополнительные драйверы для 3D-ускорения, если вы, например, используете карту Nvidia, но в ином случае вы просто загружаете компьютер и принимаетесь щелкать мышью. Х построен на архитектуре клиент/сервер: сам по себе он работает как сервер, поддерживая отображение; затем клиентская программа общается с сервером, сообщая ему, что и где изобразить.
Унаследованные функции
Возможно, это покажется чрезмерным усложнением, но он использует локальные сокеты для общения клиента с сервером, так что производительности удара не наносит. Явное преимущество этого метода – то, что клиенту и серверу не обязательно находиться на одном и том же компьютере. Вы можете соединиться с другим компьютером через SSH, и при условии, что настройка это позволяет, запустить программу на удаленном компьютере и заставить его GUI отображаться на локальном экране. Это отличается от VNC, потому что только окно одного приложения может отображаться локально, и оно появляется только локально – не на удаленном компьютере. Соединение VNC зеркально отображает весь рабочий стол на обоих компьютерах, поэтому предпринимаются шаги для разработки более простых методов работы с графическим дисплеем. Самый продвинутый – Wayland. Wayland использует совершенно другой подход; в нем не только нет старой настройки клиент/сервер, но к тому же рендеринг окон и других элементов дисплея передан клиентским приложениям, обычно OpenGL или Cairo. Это упрощает Wayland; X содержит большое количество наследуемого кода рендеринга, который требуется спецификациями Х, но при этом никогда не используется. Передавая управление клиентам, Wayland может стать более легким, более эффективным и защищенным. Это также означает, что графические программы, с которыми вы работаете, имеют больше контроля над способом отображения GUI.
> Инструменты KDE вроде настройщика монитора помогают в таких ситуациях, как подключение второго монитора, но для единственного дисплея Х вообще не надо настраивать.
Скромные труженики – демоны
Отключив заставку, которую большинство дистрибутивов используют для сокрытия сообщений о загрузке, вы увидите экран, заполненный сообщениями о запускаемых сервисах. Что это за сервисы, и все ли они нужны? Сервисы – это программы, работающие в фоновом режиме; они-то и делают компьютер работоспособным. Одни работают с сетью, другие – с определением и настройкой оборудования, но большинство – это традиционные программные сервисы, или демоны, которые при необходимости предоставляют функции другим программам. Ответом на вторую часть вопроса, скорее всего, будет «нет». Некоторые из этих сервисов используются почти всеми системами, например, демон syslog, который пишет информацию в системные журналы; но другие могут быть не нужны совсем. Зачем вам запускать CUPS, систему печати, если у вас нет принтера? Аналогично, может быть не нужен сервер базы данных MySQL, или демон SSH, если у вас всего один компьютер в сети. Так что, потратив на эксперименты где-то полчаса, вы сможете выкроить пару секунд времени загрузки.
Можно сэкономить ресурсы, не запуская ненужные сервисы; однако, будучи однажды загружены, эти демоны почти не потребляют системных ресурсов, и если их не вызывать, то даже требуемая им память отдается другим программам,. Так что просто отключите сервисы, которые, по вашему мнению, вам никогда не понадобятся. Если они терпеливо прислушиваются к сетевому порту или сокету, работа ваших клиентских программ станет чуть эффективнее. Программам нет нужды включать или загружать код для открытия или закрытия лог-файлов, или записи в них – они просто вызывают функцию syslog() с текстом для журнала, а об остальном заботится демон. Syslog является важным сервисом – если появились проблемы, именно сюда стоит заглянуть в первую очередь, поскольку большинство программ отправляют сообщения об ошибках в системный журнал (обычно в /var/log/messages).
Почему фоновые программы назвали демонами? Объяснений несколько – я предпочитаю такое: в греческой мифологии так звались создания, решавшие задачи, с которыми не хотели возиться боги.
Сеть
Как ваш компьютер общается с другими.
Работа в сети крайне важна для Linux. Даже на отдельной машине без соединения с локальной сетью, не говоря уж о соединении с Интернет, сетевая работа все же используется. Многие сервисы работают по модели клиент/сервер, где сервер работает в фоне, ожидая инструкций от других программ. Даже такая важная штука, как системный регистратор (system logger), работает в качестве сетевого сервиса, разрешая другим программам писать в лог-файлы. Графическая система Х тоже является сетевой, где Х-сервер работает с рабочим столом и программами, сообщая, что им надо отобразить. Вот почему так просто запустить Х-программы на удаленном рабочем столе — с точки зрения работы системы это не очень отличается от локального открытия окна.
Запуск ifconfig всегда будет отображать по крайней мере один интерфейс под названием Io, с адресом 127.0.0.1 – он используется компьютером для общения с самим собой, что для компьютеров вполне нормально (в отличие от людей). Остальная, и большая, доля сетевой работы основана на TCP/IP, либо в проводном Ethernet, либо в беспроводном соединении; но используются и другие типы сетей. Все дистрибутивы и рабочие столы включают хорошие инструменты для настройки и работы в сетях TCP/IP, от вездесущего NetworkManager до индивидуальных инструментов, таких, как инструмент настройки сети Gnome или Yast от OpenSUSE.
Среди недавних дополнений к сетевой работе – технологии 3G и PAN (Personal Area Network), такие, как Bluetooth. Использовать 3G-модем обычно просто, или через NetworkManager, или через средства настройки PPP-соединения вашего рабочего стола. Да, 3G-модемы и правда работают, как модемы, со скриптами набора номера и прочим, но без шипения и попискивания, обычно сопровождающих соединение (юным читателям последнее предложение ничего не скажет). Большая часть проблем с 3G возникают из-за попыток настроить их в области со слабым сигналом, а не из-за поддержки оборудования или ПО в Linux, как я недавно вновь убедился.
Королевский протокол
Все большую важность приобретает Bluetooth, по мере распространения мобильных устройств и роста числа устройств ввода и вывода, применяющих его. Выигрывают от этого не только хозяева телефонов и планшетников: мышь и наушники Bluetooth расширят возможности ноутбука, когда вы сидите за столом, не заставляя ничего подключать к нему перед началом работы. PulseAudio (см. раздел про звук) делает это еще проще, поскольку умеет переключаться между распознанными устройствами.
Хранение
Хранение данных на жестком диске может состоять из нескольких уровней. Все физическое хранение (в отличие от сетевого хранения) в Linux вращается вокруг блочных устройств, именуемых так потому, что диски хранят данные в блоках. Блочные устройства типа /dev/sda1 действительно имеют дело с блоками, физическими областями на диске, и их скоплениями в качестве раздела диска. Поверх всего этого находится файловая система, то есть способ хранения данных в разумной структуре директорий и файлов, содержащих как данные, так и метаданные.
В чем их разница? Скажем, вы сохраняете файл с текстом. Данные в этом файле – текст, но у файла есть другие атрибуты: владелец, время создания, время последнего изменения, время последнего просмотра и кто имел право изменять или просматривать файл. Эту информацию вы увидите, применив к файлу ls -l или проверив его свойства в менеджере файлов, и она сохраняется файловой системой. Стандартная используемая сегодня файловая система – ext4, но есть и альтернативы: ext3, ReiserFS, XFS, JFS и, конечно, FAT и NTFS из мира Windows.
Другие Linux’ы
Все, о чем мы говорили, относится к Linux, работающему на настольном компьютере, ноутбуке или сервере – традиционном компьютерном оборудовании, если угодно, но есть и иные среды, где применяется Linux. Многие встраиваемые устройства, от роутеров до PVR и приставок, работают на Linux, и во многом он схож с Linux, который мы знаем и любим. Если ваш роутер разрешает доступ SSH, вы будете чувствовать себя, как дома, как только войдете.
Есть еще один класс устройств, который в последние годы обрел огромную популярность, и на котором работает совсем другой Linux. Нетрудно догадаться, что речь идет о смартфонах и их планшетных родичах, работающих на Android. Android – тоже Linux, он использует ядро Linux, но это не GNU/Linux. Ядро может быть основано на том же самом исходном коде, но все, что работает на нем, совершенно другое. Принципы в некотором смысле схожи, но реализация их иная – хотя, попав в оболочку на своем телефоне, вы увидите знакомые инструменты командной строки.
Рабочие столы
Gnome, KDE, Cinnamon, Unity – мы зовем их интерфейсом пользователя.
Если самым нижнем уровнем системы считать ядро, то самый высший — это интерфейс пользователя. Все остальное, от ядра до драйверов и интерфейсов оборудования, бесполезно, если вы не можете использовать компьютер. Обычно это означает графический рабочий стол, и здесь мы сталкиваемся с другими уровнями. Х (или, возможно, Wayland в будущем) просто обеспечивают чистый холст. Вам нужно нечто, предоставляющее все прелести оконного интерфейса, иногда менеджер окон.
Ранее менеджеры окон были отдельными системами, и по-прежнему имеется много всяких OpenBox или Enlightenment, но сейчас они нередко являются частью более крупной среды рабочего стола. Строго говоря, менеджер окон отвечает за работу с окнами, их открытие, закрытие, перемещение и другие манипуляции. Со временем менеджеры окон росли и обретали дополнительные функции, такие как панели задач и меню запуска программ, пока не превратились в среды рабочего стола.
Подборки программ
Среда рабочего стола – это просто в большей или меньшей степени интегрированная подборка утилит для обеспечения функций, необходимых для функционирования рабочего стола. Запуск программ, манипуляции с их окнами, отслеживание происходящего и включение программ для общения друг с другом – все это функции рабочего стола, но все же в сердцевине их находится менеджер окон – KWin для KDE и Metacity в Gnome, если назвать только два. Отличает менеджер окон от рабочего стола уровень интеграции. Это особенно очевидно в KDE, где все работает вокруг общей сердцевины, и программы не только общаются друг с другом, но экземпляр одной программы может быть встроен в окно другой.
И хотя использовать KWin в Gnome особого смысла нет, вы, возможно, захотите попробовать один из более узких менеджеров окон, предлагающих больший контроль за работой с окнами или применяющих другие методы их отображения. Существуют менеджеры окон мозаичного типа, например, awesome и xmonad – они автоматически изменяют размер окон, чтобы все уместилось на экране (в KDE есть собственная такая опция). Есть также менеджеры окон, созданные для управления без мыши, и минимальные менеджеры окон, полезные для специфичных систем, запускающих одну программу в полноэкранном режиме и не одобряющих загромождения пространства виджетами.
Звук
Некогда мучительная тема.
Звуковая система Linux претерпела множество изменений. Долгие годы у нас была OSS (Open Sound System), до появления ALSA (Advanced Linux Sound Architecture). ALSA по-прежнему с нами, но теперь есть еще PulseAudio и Jack.
ALSA поддерживает несколько звуковых карт (каждая из них может иметь многочисленные входы и выходы) и предоставляет поддержку аппаратного микширования, если оно предусмотрено оборудованием, и программное микширование, если нет. Тогда устраняется потребность в звуковых менеджерах, некогда обеспечивавших в KDE и Gnome возможность воспроизведения звука более чем одним приложением одновременно. ALSA работает на низком уровне, ближе к оборудованию, поэтому дает низкую латентность. Сейчас поддерживается масса устройств, и после установки дистрибутива звук должен заработать при первой же загрузке. ALSA – комбинация кода ядра и приложений пользовательской области. Она также предоставляет API, чтобы другие программы могли напрямую управлять ей; так, в среду рабочего стола включены кнопки управления микшером.
Деятельность PulseAudio
PulseAudio – более новая аудиосреда, но это не замена ALSA. Она располагается поверх аудиосистемы ядра, предоставляя более высокий уровень управления, и работает как сервер, принимая информацию из исходных источников и перенаправляя ее на приемник (устройство вывода результата или программу для записи). Во многих случаях запись осуществляет ALSA, и источником тоже может быть драйвер ALSA – для приложений, не поддерживающих PulseAudio напрямую. Таким образом, приложение может направлять результат на устройство ALSA, которое перехватит поток и отправит его через PulseAudio назад в ALSA. Неудивительно, что PulseAudio считается чрезмерно сложным. Хорошая настройка должна сделать все эти ухищрения невидимыми для пользователя, и именно такова сейчас ситуация с установкой дистрибутивов и PulseAudio, так что в основном ALSA по-прежнему «работает», но с лучшей поддержкой многочисленных устройств. ALSA поддерживает несколько устройств вывода, но по умолчанию у нее глобальные настройки. PulseAudio позволяет направлять музыку через наушники, используя для звонков VOIP наушники Bluetooth, и обеспечивает менее сложное, но столь же полезное разделение – скажем, независимые настройки громкости для приложений. PulseAudio хорошо работает в сети; через него можно поискать другие серверы PulseAudio и воспроизводить аудио через их микрофоны – отлично для потоков музыки в вашем доме.
Для профессиональных аудиоприложений есть звуковой сервер JACK (Jack Audio Connection Kit). Его сильная сторона – обеспечение соединений с низкой латентностью в реальном времени между приложениями для аудио- и MIDI-данных. Для обычного настольного применения он нужен разве что юным музыкантам.
Печать
CUPS и драйверы принтеров.
Хотя открытый код поощряет выбор, и, следовательно, наличие нескольких программ, которые делают одно и то же, но немного по-разному, все же есть области, где вне конкуренции оказывается одна программа. X.org используется повсеместно для графического отображения, а в области печати то же положение занимает CUPS.
Если к вашему компьютеру с Linux подсоединен принтер, вам нужны две вещи: CUPS и драйверы для вашего принтера. Во многих случаях они идут вместе. CUPS – это сервер, который работает в фоновом режиме, ожидая запросов на печать. Практически любая программа, которая занимается печатью, распознает Internet Printing Protocol (IPP), на котором говорит CUPS. Нажмите Print в своем текстовом редакторе или браузере, и появится окно, которое покажет ваш принтер, или, если у вас их несколько, предложит выбрать один из них.
Приложению просто нужно отправить данные для печати, обычно в виде PostScript, на CUPS, который и сделает все остальное – даже подождет, пока вы включите принтер. CUPS не нужно даже работать на том же компьютере – это сетевой сервис, а принтер от одного компьютера должен быть доступен всем в той же сети. CUPS бесполезен без драйверов, объясняющих ему, как общаться с принтером. По умолчанию он включает массу драйверов, и еще больше станет доступно при установке пакета драйверов gutenprint (настолько, что ваш дистрибутив мог бы и установить этот пакет по умолчанию). HP также предоставляет пакет драйверов (в том числе и для сканера) под названием hplip, который вам понадобится, если вы используете их продукцию.
Однако некоторые изготовители принтеров настаивают на том, чтобы предоставлять собственные драйверы, а не включать их в CUPS – обычно это обусловлено лицензионными соображениями. Тогда вам следует порыскать по сайту производителя вашего принтера, найти пакет драйверов, подходящий для вашей системы, и установить его отдельно. После этого драйверы должны появиться в CUPS и в инструменте настройки принтера вашего дистрибутива. Другой вариант – до покупки принтера поискать на linuxprinting.org более просвещенного производителя. |