Доводка до кондиции различных дистрибутивов линукса

Путь к освоению линукса начинается с постановки вопроса "что я хочу получить от системы", или в упрощённой форме "чем я занимаюсь за компьютером". После получения ответа хотя бы на уровне "фильмы смотреть / сидеть в интернете" можно продолжать.

Выбор дистрибутива

Следующим этапом является выбор дистрибутива1. Все они различаются по следующим основным признакам:

  • основной формат пакетов
  • модель разработки (фиксированные релизы/без релизов)
  • распространённость
  • ориентация (универсальный/специализированный)
  • разработчик (компания/сообщество/совместное)

Наиболее распространённые дистрибутивы, подходящие для использования на десктопе:

  • Ubuntu и её вариации: Kubuntu, Xubuntu, etc
  • Debian
  • LinuxMint
  • openSUSE

Также, к списку выше можно добавить ещё несколько дистрибутивов «второго эшелона», по тем или иным причинам подходящим для более опытных пользователей.

  • Mageia
  • Fedora
  • Archlinux
  • Altlinux

Схема отношений DEB-based дистрибутивов:

Ветки дистрибутивов для нового юзера с точки зрения сложности:

Выбор DE

Следующим вопросом является выбор DE2. Это грубо говоря всё то, что делает удобным работу с компьютером. DE позволяет управлять окнами программ, съёмными носителями, энергосбережением, сетевыми подключениями, рабочим столом, выводит список доступных программ и т.д.

Различаются по:

  • организации интерфейса
    • панельный (он же классический)
    • киосочный
  • базовой графической библиотеке (также называемой тулкитом)
    • Gtk2/3
    • Qt
  • интеграции компонентов

Ниже, основные представленные DE сведены в табличку.

^ DE       ^ Интерфейс    ^ Тулкит    ^ Интеграция ^ Настройки ^ Расход памяти ^
^ ------------------------ основные DE --------------------------------------- |
^ KDE      | панельный    |    Qt     |    сильная |     много |        ~800Mb |
^ LXDE     | панельный    |   Gtk2    | слабая     | мало      |        ~90Mb  |
^ Gnome3   |    киосочный |   Gtk3    |    сильная | мало      |         ???   |
^ XFCE     | панельный    |   Gtk2    |  средняя   |   средне  |        ~200Mb |
^ Unity    |    киосочный |           |    сильная | мало      |         ???   |
^ -------------------- DE «второго эшелона» ---------------------------------- |
^ Mate     | панельный    |   Gtk2    |    сильная |   средне  |        ~250Mb |
^ Cinnamon | панельный    |   Gtk3    |    сильная | мало      |        ~300Mb |
^ Razor-Qt | панельный    |    Qt     |  средняя   | мало      |         ???   |

Схема отношений DE семейств Gnome и KDE:

Небольшие примечания по каждому из DE:

  • KDE - на данный момент - KDE43. Считается достаточно требовательной к ресурсам, что частично исправляется отключением функций "семантического десктопа" - приложений nepomuk/baloo4 и strigi5. Совсем удалить их не удастся, но отключить можно.
  • LXDE - считается легковесной средой. Слабая интеграция компонентов позволяет заменять их по своему усмотрению на аналоги. Потребление ресурсов ~ 90Мб.
  • Gnome (вторая ветка) - сейчас присутствует только в Debian (stable). Развитие закончено, поддержка закончена, пользователям рекомендуется переходить на другое DE. (см Mate.)
  • Gnome (третья ветка) - один из представителей "новых веяний в дизайне интерфейса". Основной девиз - "если что-то можно преднастроить - сделайте это".
  • Unity - аналог Gnome3, встречается только в дистрибутивах из семейства Ubuntu.
  • Mate - Форк6 второй ветки Gnome. Новых возможностей не по факту добавляется, только поддержка существующего. Встречается в LinuxMint, Archlinux, Debian (testing).
  • Cinnamon - Форк третьей ветки Gnome, направленного на воссоздание интерфейса и функционала второй ветки на основе наработок третьей. Встречается в LinuxMint.
  • Razor-Qt - достаточно молодой проект, ставит целью создание легковесного DE на базе Qt. Входит в официальные репозитории Mageia, так же доступен в виде неофициальных пакетов для для большинства основных дистрибутивов.

Установка/удаление программ

Первое и основное правило - не надо ничего ставить "вручную" без крайней необходимости. Как правило, необходимая уже присутствует в репозиториях выбранного дистрибутива, упакованная в необходимый формат и снабжённая метаданными.

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

Список основных менеджеров пакетов с разбивкой по дистрибутивам:

^ Название       ^ Интерфейс  ^ Комментарии                                             ^
^ --------------------- Debian/*buntu/LinuxMint --------------------------------------- |
^ dpkg           | cli         | низкоуровневые операции, установка отдельных пакетов   |
^ apt-*          | cli         | в большинстве руководств используется именно он        |
^ aptitude       | cli/ncurses | первый предлагаемый вариант решения зависимостей -     |
^  -   -   -     |  -   -   -  | не всегда оптимален, пользуйтесь '<' и '>'             |
^ synaptic       | gui         |                                                        |
^ SoftwareCenter | gui         | только в *buntu. Действует достаточно брутально,       |
^  -   -   -     |  -   -   -  | может легко выкачать по зависимостям пару гигабайт     |
^ -------------------- openSUSE ------------------------------------------------------- |
^ rpm        | cli             | низкоуровневые операции, установка                     |
^ zypper     | cli             |                                                        |
^ yast       | gui             | На самом деле это целый комплекс для настройки системы |
^ -------------------- Fedora --------------------------------------------------------- |
^ rpm        | cli             | низкоуровневые операции, установка отдельных пакетов   |
^ yum        | cli             |                                                        |
^ -------------------- Altlinux ------------------------------------------------------- |
^ rpm        | cli             |                                                        |
^ apt-rpm    | cli             | команды идентичны с apt-*                              |
^ synaptic   | gui             |                                                        |
^ -------------------- Mageia --------------------------------------------------------- |
^ rpm        | cli             | низкоуровневые операции, установка отдельных пакетов   |
^ urpmi      | cli             |                                                        |
^ -------------------- Archlinux ------------------------------------------------------ |
^ pacman     | cli             |                                                        |

Список типичных операций для управления пакетами в консоли (на примере apt'а):

  • install - установка программы с разрешением зависимостей
  • remove - удаление программы (без её зависимостей)
  • autoremove - удаление программы (с её зависимостями, не используемыми кем-то ещё)
  • purge - удаление конфигурационных файлов и файлов, созданных при работе программы
  • upgrade - установка доступных обновлений для установленных программ
  • update - обновление сведений о доступных программах и их версиях

Заостряю внимание на т.н. «рекомендованных» зависимостях. Они не являются зависимостями как таковыми, но могут оказаться полезными при работе с основной программой. Но следует помнить, что такие зависимости увеличивают размер установленной системы и, как правило, остаются при удалении основной программы7. Отключение же этих зависимостей может потребовать дополнительных шагов для поиска нужных программ8.

Типичные ошибки:

  • Установка пакета из другого дистрибутива, или другой ветки дистрибутива. Это грозит проблемами с зависимостями, нарушением расположения файлов в системе.
  • Смешивание веток дистрибутива. Разновидность предыдущей ошибки, также грозит проблемами с зависимостями. Например, при обновлении DE до более свежей ветки и необновления всей остальной системы - может возникнуть ситуация, когда половина программ связаны со старой системной библиотекой (*libc), а половина - с новой, в результате чего первая половина просто не работает.
  • Установка традиционным способом, через make install. Возможны конфликты файлов в системе.
  • Кольцевые зависимости - практически не встречаются в пределах "официальных" репозиториев, но могут возникать при подключении сторонних. Как правило исправляются удалением одного или обоих из конфликтующих пакетов без их зависимостей и установкой этих пакетов заново.

Управление репозиториями

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

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

Примерами могут являться rpmfusion для Fedora, PPA для *buntu9, содержит от одной-двух до десятков программ)), Packman для openSUSE, notesalexp для Debian/*buntu, AUR для Archlinux, sisyphus для Altlinux.

Списки неофициальных репозиториев на сайтах дистрибутивов:

Локализация

На текущий момент уже практически неактуально.

Язык сообщений в системе как правило определяется через переменные окружения, которые определены на 2х уровнях: системном (язык для системы по умолчанию) и пользовательском - может быть уникально для каждого пользователя.

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

  • локаль нужного языка
  • Шрифты с поддержкой нужного набора символов
  • переведённые сообщения программ в нужном формате

Как они связаны между собой:

  • Локаль определяет правила вывода символов, формат даты, времени, разделителей числовых разрядов, а также даёт подсказку программам, какой язык сообщений использовать для вывода.
  • Шрифты нужны для непосредственного отображения символов
  • Третий пункт отвечает за сам текст сообщения

Как определить, где проблема:

  • И в консоли и в обычных программах все сообщения на английском
    • не сгенерирована нужная локаль
    • не выставлены переменные окружения
  • Сообщения на английском отображаются нормально, те что должны быть на русском - отображаются неправильно.
    • используются шрифты без поддержки кириллицы
  • Некоторые программы на английском
    • возможно, что их ещё никто не перевёл
    • возможно, что нужный язык локализации поставляется отдельным пакетом, т.к. занимает значительное место (примеры: OpenOffice, Firefox, документация к Gimp)
    • наименее вероятно - отсутствует/повреждён файл с переведёнными сообщениями
  • Некоторые сообщения в программе на русском, а некоторые на английском
    • неполный перевод
    • повреждён файл с переведёнными сообщениями

Что делать:

Обычно, достаточно поставить из репозитория метапакет10 с соответствующей локализацией. Этот пакет может быть как общесистемным, так и специфичным для выбранной DE. что-то вроде kde-l10n-ru. Поиск по словам "l10n" и "i18n" покажет список таких пакетов.

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

Также, для экономии места на корневом разделе может пригодиться пакет localepurge, который удаляет файлы локализации для неиспользуемых языков.

Шрифты

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

  • Liberation
  • DejaVu
  • Droid

Моменты на которых стоит заострить внимание:

  • технология сглаживания шрифтов cleartype запатентована, поэтому в большинстве дистрибутивов собирают шрифтовую подсистему без её поддержки. В зависимости от дистрибутива потребуется либо поискать репозиторий с пересобранными пакетами, либо пересобрать их самому с нужными патчами.
  • помимо cleartype существует ещё одна реализация сглаживания шрифтов. Её изначально разработала Canonical для использования в *buntu, но никто не мешает использовать их наработки и в другом дистрибутиве.
  • ещё одной проблемой, до недавнего времени, было отсутствие уточнения шрифтов на основе данных самого шрифта, поскольку эта технология также была запатентована. С середины 2010 года эта проблема уже неактуальна, и встретить вы её сможете только в достаточно старых дистрибутивах.

Также, могу порекомендовать хорошую шпаргалку по теории.

Кодеки

На данный момент, в linux существует несколько подсистем для работы с аудио/видео (без учёта библиотек, специфичных для разных форматов):

  • gstreamer
  • ffmpeg
  • xine (устарел)

Также, есть проигрыватель mplayer, который по большей части все форматы декодирует сам. Теоретически, поставив его, мы получим возможность воспроизведения чего угодно. На практике же, мы опять столкнёмся с тем, что для поддержки некоторых форматов, защищёнными патентами.

Ярким примером может являться dvdcss, отвечающий за поддержку dvd, защищённых от копирования.

Таким образом, большинство проблем с кодеками решаются доустановкой пакетов (возможно, с подключением сторонних репозиториев). Как правило это:

  • gstreamer-plugins-{bad,ugly}
  • libdvdcss
  • libfaad, libfaac
  • и так далее

Повышенной щепетильностью в этом вопросе отличается проигрыватель totem, идущий как стандартный в gnome-based окружениях.

Отдельным пунктом идёт воспроизведение flash-контента в интернете. Для его поддержки требуется доустановить flash-plugin из репозитория. Можно использовать как свободную разработку - gnash(поддерживается далеко не всё), так и пакет с оригинальным плагином от adobe.

С оригинальным пакетом вы можете встретится со следующими проблемами:

  • нестабильная работа на 64битных системах
  • проблемы с использованием аппаратного ускорения (внешне выглядит как "артефакты"11) - исправляется отключением ускорения в настройках
  • проблема с цветопередачей (эффект "аватара") - решения пока нет

В качестве обхода проблемы на youtube можно использовать просмотр с использованием html5. Для этого достаточно зайти сюда и нажать "включить html5".

Смена DE по умолчанию

Общий алгоритм такой:

  • ставим нужное DE
  • выходим из системы
  • меняем сессию по умолчанию
  • пробуем зайти в систему
  • если всё удачно - осторожно удаляем ненужное DE

Обращаю внимание, что зачастую то или иное DE ставится одним или несколькими метапакетами. Т.е. если удалить такой метапакет - компоненты DE и их неиспользуемые зависимости должны также автоматически удалиться. Перед применением изменений внимательно просмотрите список удаляемых пакетов.

"Железо"

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

Принцип диагностики такой - физически устанавливаем устройство в компьютер, загружаемся, смотрим, видится ли устройство ядром. Для этого можно использовать набор утилит ls{dev,pci,pcmcia,blk,cpu,usb}, скрипт hwinfo, либо посмотреть вывод dmesg, там перечислены все устройства, которые распознало ядро при загрузке12.

Для устройств, подключаемых по usb/fireware можно посмотреть сообщения ядра, которые появляются при подключении устройства (команда dmesg).

Возможно вам потребуется добавить себя в соответствующую системную группу (printer, scanner, cdrom, video, audio, ...). (консольная команда: gpasswd -a или используйте системный конфигуратор)

Что делать, если устройство не заработало:

  • Постарайтесь узнать точную модель устройства
  • Посмотрите таблицы совместимости оборудования (список ниже).
  • И наконец, спросите у ближайшего поисковика, как оно работает с линуксом (запрос должен быть вида « linux»).

Таблицы совместимости для некоторых типов оборудования:

Некоторые устройства, например принтеры, потребуют также настроить управляющую ими программу (для принтеров - cups).

Примерные названия пакетов, требуемые некоторыми типами устройств:

  • bluetooth: bluez
  • printers: cups, foomatic (HP - hplip, samsung - splix)
  • scanners: sane
  • audio: alsa, alsa-utils
  • wifi: wpa_supplicant (требуется только для сетей с шифрованием)
  • video (input): v4l
  • video (output): xorg, mesa

Автоматизация процесса

Для точного воссоздания системы "с нуля" обычно достаточно 4х вещей:

  • списка установленных пакетов
  • копии директории «/etc/»
  • копии директории «/home/»
  • копии директории «/var/»

Алгоритм восстановления такой:

  • ставим минимальную систему
  • скармливаем пакетному менеджеру список пакетов
  • копируем на место «/etc» и «/var»
  • подключаем «/home»
  • всё

Для архивирования директорий «/etc» и «/var» - используем команду tar. «/home» обычно ещё при установке выносится отдельным разделом, поэтому главное не подключить его слишком рано.

для получения списка пакетов - обратитесь к документации по вашему пакетному менеджеру, я лишь приведу пару примеров:

  • для Debian'a/Ubuntu/LinuMint - aptitude search '~i' | awk '{ print $2 }' - выведет список всех пакетов, установленных в системе.
  • для Archlinux'a - pacman -Qe (обратите внимание, что в этом случае выводятся только пакеты, установленные вручную, остальные ставятся как зависимости первых)

Известные проблемы

Здесь приведён список подсистем, с которыми регулярно возникают проблемы а также симптомы появляющиеся при этом.

pulseaudio

Симптомы: проблемы со звуком: задержки, искажения, полная неработоспособность. Быстрое решение: переключиться в нужном приложении на другую подсистему вывода звука: alsa. Капитальное решение: удаление pulseaudio.

selinux

Fedora-специфично.

Симптомы: сообщения "недостаточно прав" при файловых операциях или работе программ. Быстрое решение: настройка прав selinux.\ Капитальное решение: отключение или перевод подсистемы selinux в "разрешающий режим".

kit'ы

Симптомы: сообщения вида "действие запрещено администратором", "недостаточно прав" и "not authorized" при подключении/отключении флэшек, выключении/перезагрузке компьютера.\ Быстрое решение: PolicyKit

Где искать помощь

При возникновении вопросов, помощь стоит поискать:

  • на официальном сайте дистрибутива обязательно есть раздел посвящённый новичкам, в первую очередь - посетите его
  • на специализированных форумах дистрибутивов
  • в местном Linux User Group, если такой имеется список
  • на форумах, посвящённых linux и СПО (в качестве примера - unixforum, linuxforum
  • на местных форумах (как правило - технические разделы)
  • в конференциях jabber.ru

Что я смогу сделать сам?

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

К моменту, когда вы освоитесь в «готовой» системе (минимальный срок - полгода, максимального срока нет), можно попробовать перестроить её под себя. Это даст дополнительный опыт и, что самое важное, понимание, как работает та или иная подсистема или программа. На этом этапе самое важное - научиться исправлять последствия своих экспериментов.

Этот уровень - необходимый минимум для пользователя linux.

Если вы хотите большего, вам открыты все пути - можно сообщать об ошибках разработчикам, можно помогать новым пользователям через форумы/irc/jabber/..., можно присоединиться к какому-либо интересному проекту, можно даже создать свой дистрибутив13.

В этом и состоит основное преимущество linux - в свободе действия.


  1. Дистрибутив - это набор компонентов и программ, интегрированных между собой ↩

  2. сокращение от Desktop Environment, окружение рабочего стола ↩

  3. т.е. четвертая ветка ↩

  4. хранение персональных данных, теги ↩

  5. индексация и поиск ↩

  6. ответвление проекта, развиваемого другой командой разработчиков ↩

  7. что по прошествии времени вызывает вопрос - «откуда взялись все эти программы?» ↩

  8. Отсюда вывод - знаете что вам нужно - отключайте их. ↩

  9. на самом деле это целая куча мелких репозиториев создаваемых пользователями ↩

  10. т.е. пакеты-«пустышки», сами по себе не содержащие файлов, но зависящие от всех пакетов определённой группы ↩

  11. полоски неправильного цвета, "шлейф" за движущимися объектами и т.д. ↩

  12. но также и многое другое, к делу не относящееся ↩

  13. правда, к этому моменту пользователь осознаёт бессмысленность создания ещё одного дистрибутива. ↩