2. Первые шаги#

2.1. Настройка pacman#

2.1.1. Обновление ключей Arch Linux#

Обновление ключей необходимо во избежание дальнейших проблем с установкой пакетов:

sudo pacman-key --init               # Инициализация
sudo pacman-key --populate archlinux # Получить ключи из репозитория
sudo pacman-key --refresh-keys       # Проверить текущие ключи на актуальность
sudo pacman -Sy                      # Обновить ключи для всей системы

Данная операция может занять продолжительное время. Для дальнейшего их автоматического обновления нужно включить службу-таймер, которая оптимизирует процесс при помощи команды archlinux-keyring-wkd-sync:

sudo systemctl enable --now archlinux-keyring-wkd-sync.timer

Таким образом ключи будут обновляться раз в неделю.

2.1.2. Включение 32-битного репозитория#

Убедимся, что конфигурация пакетного менеджера Pacman настроена для получения доступа к 32-битным зависимостям, нужным в частности для установки Wine и Steam.

Для этого раскомментируем так называемый multilib репозиторий:

sudo nano /etc/pacman.conf           # Раскоментируйте последние две строчки как на скриншоте
../_images/first-steps-1.png
sudo pacman -Suy                     # Обновление репозиториев и всех программ (пакетов)

2.1.3. Ускорение обновления системы#

Утилита Reflector отсортирует доступные репозитории по скорости:

sudo pacman -S reflector rsync curl  # Установка reflector и его зависимостей

Если вы из Европейской части России, то советуем всегда использовать зеркала Германии, так как их больше всего и они имеют оптимальную свежесть/скорость:

sudo reflector --verbose --country 'Germany' -l 25 --sort rate --save /etc/pacman.d/mirrorlist

Если вы проживаете не на территории Европейской части РФ или в иной стране, то просто измените Germany на Russia или ваше государство.

Можно также вручную отредактировать список зеркал, добавив туда зеркала из постоянно обновляющегося перечня на сайте Arch Linux (https://archlinux.org/mirrorlist/)

sudo nano /etc/pacman.d/mirrorlist # Рекомендуем прописывать зеркала от Яндекса

2.1.4. Одновременная загрузка двух и более пакетов#

Начиная с шестой версии pacman поддерживает параллельную загрузку пакетов. Чтобы её включить отредактируйте /etc/pacman.conf:

sudo nano /etc/pacman.conf # Раскомментируйте строчку ниже

# Где 4 - количество пакетов для одновременной загрузки
ParallelDownloads = 4

2.1.5. Отключение таймаутов при загрузке пакетов#

Если вы имеете плохое качество соединения или слабый уровень сигнала, то при загрузке пакетов при помощи pacman вы могли сталкиваться с ошибкой превышания лимитов ожидания (таймаутов). Чтобы этого избежать нужно добавить параметр DisableDownloadTimeout в pacman.conf как мы это уже делали ранее с ParallelDownloads:

# Добавьте строку в секцию [options]
sudo nano /etc/pacman.conf

DisableDownloadTimeout

2.2. Установка базовых пакетов и набора программ#

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

2.2.1. Обязательные к установке пакеты!#

Эта группа пакетов ОБЯЗАТЕЛЬНА к установке! Она содержит ряд полезных инструментов без которых вы не сможете установить множество пакетов из AUR, включая все те, о которых пойдет речь далее в руководстве. И так как в начале руководства мы условились пользоваться "дедовским" методом установки AUR пакетов, дополнительно установим git для скачивания PKGBUILD и текстовый редактор nano для редактирования конфигурационных файлов (вы так же в праве использовать любой другой):

sudo pacman -S base-devel git nano

По желанию можете установить графическую обертку для работы с загрузчиком GRUB2:

sudo pacman -S grub-customizer

2.2.2. Пакеты для работы с архивами#

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

# zip, rar, ace, rzip/lcma/lzo, iso
sudo pacman -S lrzip unrar unzip unace p7zip squashfs-tools

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

sudo pacman -S file-roller

2.2.3. Набор прикладного ПО#

Далее мы установим набор джентельмена в виде браузера (chromium), плеера (VLC) и торрент-клиента (qbittorrent):

sudo pacman -S qbittorrent chromium vlc

Банально, но всё же.

Вдобавок можно отметить легковесный файловый менеджер PCManFM:

sudo pacman -S pcmanfm-gtk3 gvfs gvfs-mtp

Предупреждение

Пакеты начинающиеся с gvfs нужны для автомонтирования различных устройств (например Android смартфонов) и интеграции с различными сетевыми хранилищами (Google Disk/SAMBA и т.д.)

Итак, мы установили набор джентльмена и парочку программ, что понадобятся нам в дальнейшем. Но если вас не устраивает тот или иной компонент, вы всегда можете найти любой нужный вам пакет по адресу https://www.archlinux.org/packages/. Если вы не смогли найти нужную вам программу в официальных репозиториях, вы всегда можете найти всё что душе угодно в AUR (по адресу https://aur.archlinux.org/packages/).

2.2.4. Установка Steam#

Если в предыдущем разделе вы активировали в настройках pacman Multilib репозиторий, то из него можно установить официальный клиент Steam. Однако, здесь стоит упомянуть о сразу нескольких доступных версиях.

Существует просто steam - он содержит в себе клиент Steam с собственными копиями библиотек к нему.

sudo pacman -S steam ttf-liberation

А есть steam-native-runtime, который использует локально установленные в систему библиотеки. Разница в том, что последний будет использовать всегда более свежие версии библиотек, из-за чего опыт работы клиента и нативных игр Linux может как улучшиться, так и наоборот сломать какой-либо функционал. Вдобавок, steam-native-runtime требует большее количество 32-битных зависимостей.

sudo pacman -S steam-native-runtime ttf-liberation

Автор рекомендует пользоваться обычной версией, хотя и при использовании steam-native-runtime каких-либо серьёзных проблем замечено не было.

2.2.5. Установка актуальных драйверов для видеокарты#

В установке драйверов для Linux-систем нет ничего сложного, главное просто учитывать, что от свежести ядра и версии драйвера, будет зависеть получите ли вы чёрный экран смерти или нет (Шутка).

И да, устанавливайте драйвера ТОЛЬКО через пакетный менеджер вашего дистрибутива!

Забудьте про скачивание драйвера с сайта NVIDIA/AMD, это поможет вам избежать кучу проблем в дальнейшем.

2.2.5.1. NVIDIA#

В гайде мы установим драйвер версии DKMS, который сам подстроится под нужное ядро и не позволит убить систему при обновлении (не касается свободных драйверов Mesa).

Перед установкой рекомендуется отключить "Secure Boot" в UEFI, ибо из-за этого модули драйвера могут не загрузиться.

sudo pacman -S nvidia-dkms nvidia-utils lib32-nvidia-utils nvidia-settings vulkan-icd-loader lib32-vulkan-icd-loader lib32-opencl-nvidia opencl-nvidia libxnvctrl

2.2.5.2. NVIDIA (470xx)#

Драйвер NVIDIA для Linux имеет несколько веток с долгосрочной поддержкой, часть из которых, как например nvidia-470xx-dkms, оставлены для сохранения совместимости со старыми видеокартами, в данном случае с поколением GPU Kepler. Если ваша видеокарта относится именно к этому поколению, то вам нужно установить не последний драйвер выше, а данную версию из AUR.

git clone https://aur.archlinux.org/nvidia-470xx-utils
cd nvidia-470xx-utils
makepkg -sric

# 32-битные библиотеки (необходимо для запуска игр через Wine/Steam)
git clone https://aur.archlinux.org/lib32-nvidia-470xx-utils
cd lib32-nvidia-470xx-utils
makepkg -sric

2.2.5.3. Nouveau (Только для старых видеокарт)#

Для старых видеокарт Nvidia (ниже GeForce 600) рекомендуется использовать свободную альтернативу драйвера NVIDIA — Nouveau, входящую в состав Mesa. Она имеет официальную поддержку и обновления в отличии от старых версий закрытого драйвера NVIDIA (340, 390) и отлично справляется с 2D ускорением. Вдобавок, Nouveau хорошо работает с Wayland.

sudo pacman -S mesa lib32-mesa vulkan-icd-loader lib32-vulkan-icd-loader libva-mesa-driver lib32-libva-mesa-driver mesa-vdpau lib32-mesa-vdpau

Пакеты libva-mesa-driver, mesa-vdpau и lib32-mesa-vdpau нужны для работы аппаратного видео ускорения.

2.2.5.4. AMD#

sudo pacman -S mesa lib32-mesa vulkan-radeon lib32-vulkan-radeon vulkan-icd-loader lib32-vulkan-icd-loader mesa-vdpau lib32-mesa-vdpau libva-mesa-driver lib32-libva-mesa-driver vulkan-mesa-layers

Пакеты libva-mesa-driver, mesa-vdpau и lib32-mesa-vdpau, а также lib32-libva-mesa-driver нужны для работы аппаратного видео ускорения. vulkan-mesa-layers - это дополнительные уровни своместимости с вулканом

2.2.5.5. Intel#

sudo pacman -S mesa lib32-mesa vulkan-intel lib32-vulkan-intel vulkan-icd-loader lib32-vulkan-icd-loader

Предупреждение

Автор не рекомендует выполнять установку морально устаревших DDX драйверов, как например xf86-video-intel, так как они в большинстве своем заброшены и не получают никаких исправлений. Вместо этого используйте DDX драйвер modesetting, который поставляется вместе с пакетом xorg-server. Он использует аппартное ускорение на базе glamor и Mesa. Обратите внимание, что последние исправления и новые возможности (Как, например, опция "Tearfree") доступны только в Git версии, поэтому имеет смысл установить xorg-server-git из AUR.

Данные команды выполнят установку полного набора драйверов для вашей видеокарты и всех зависимостей, но внимание: автор использует проприетарный драйвер NVIDIA, поэтому если вы заметили ошибку или желаете более проверенный источник: GitHub.

Внимание

У авторов отсутствует оборудование AMD, поэтому в данном руководстве основной акцент будет сделан именно на настройке оборудования от компании NVIDIA. Если у вас есть желание дополнить это руководство специфичными для открытых драйверов Mesa твиками/оптимизациями, вы можете отправить нам свои изменения в качестве Pull Request'a на рассмотрение.

2.3. Настройка закрытого драйвера NVIDIA#

Драйвер NVIDIA - одно из самых болезненных мест с которым сталкиваются пользователи при переходе на Linux. В данном разделе мы рассмотрим как минимизировать количество испытываемой головной боли если вы являетесь несчастным обладателем видеокарты NVIDIA под Linux.

2.3.1. Распространенные мифы о настройке драйвера#

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

Во-первых, автор категорически не рекомендует выполнять настройку ваших мониторов и генерацию конфига xorg.conf в целом через nvidia-settings или nvidia-xconfig как советовалось делать ранее. В первую очередь потому, что это просто не нужно. Во-вторых, современные версии графического сервера Xorg сами выполняют автонастройку и определение рабочих мониторов, кроме того большинство рабочих окружений (DE) в своих настройках уже позволяют вам выставить требуемую частоту обновления нескольких мониторов и их компановку, перекрывая при этом все изменения сделанные в файле xorg.conf, который статичен и не может подстраиваться под изменения вашей конфигурации. Например, подключение второго монитора на лету вызовет проблемы, так как он не указан в xorg.conf, а автоопределение при наличии конфигурационного файла перестает работать. В-третьих, программа nvidia-settings также является крайне ограниченной в конфигурациях с гибридной графикой (PRIME) или при использовании сессий на базе протокола Wayland.

Больше подробностей о проблемах которые могут возникнуть при использовании nvidia-settings в качестве конфигуратора для Xorg можно прочитать здесь:

https://unix.stackexchange.com/questions/697517/how-to-correlate-xorg-conf-config-for-nvidia-gpu-with-xrandr-detected-screens/697553#697553

Автор так же рекомендует полностью отказаться от использования морально устаревшей опции для xorg.conf как "Force composition pipeline", так как современных композиторов, поставляемых вместе с такими рабочими окружениями как GNOME/KDE/Cinnamon/Xfce и т.д., полностью достаточно чтобы предотвратить так называемую проблему тиринга (разрывов экрана). К тому же "Force composition Pipeline" имеет побочный эффект, создавая сильные задержки отклика, так называемый input lag. И вызывает проблемы при работе расширения Vulkan VK_KHR_present_wait, которое требуется для запуска многих игр при использовании VKD3D-Proton. Подробнее смотрите здесь: ValveSoftware/Proton#6869.

Если же вы являетесь пользователем тайлинговых оконных менеджеров (WM), где нет удобных средств настройки из коробки, то автор рекомендует вам использовать такие средства как xrandr и композитор picom.

2.3.2. Включение поддержки KMS#

Совершенно обязательным шагом для всех пользователей NVIDIA драйвера является включение поддержки Kernel Mode Setting (KMS - специальной подсистемы отвечающей за настройку режимов (разрешения/частоты обновления) устройств вывода изображения (встроенного дисплея или монитора) на уровне ядра. То есть, по сути KMS это промежуточное звено между DRM драйвером и контроллером вашего дисплея. Но если сильно не вдаваться в технические подробности, то включение KMS позволяет вам:

  • Использовать рабочие окружения на базе Wayland

  • Задействовать PRIME Sync/PRIME Offload на ноутбуках с гибридной графикой (исправляет тиринг)

  • Исправить проблемы с фреймбуфером, такие как установка неправильного разрешения в TTY.

  • Использовать VA-API драйвер для аппаратного ускорения видео в Firefox или видеоплеере (см. далее).

Для того чтобы включить KMS в драйвере NVIDIA необходимо создать файл /etc/modprobe.d/nvidia-kms.conf со следующим содержанием:

sudo nano /etc/modprobe.d/nvidia-kms.conf#
 options nvidia_drm modeset=1

Либо через параметр ядра nvidia-drm.modeset=1 в конфигурации вашего загрузчика, однако первый способ универсален.

Примечание

Дополнительно начиная с версии драйвера 545.xx через пробел можно указать параметр fbdev=1 для задействования аппаратного ускорения фреймбуфера.

2.3.3. Отсутствие Wayland сессии в GDM#

К сожалению, даже если вы включите поддержку KMS в драйвере NVIDIA, то вы не увидете заветного пункта с Wayland сессией GNOME в дисплей менеджере GDM. Так как это ограничение самого GDM, то нам ничего не остается кроме отключения ненужных проверок, что определяют производителя вашей видеокарты и блокируют использование Wayland сессии. Для этого выполните следующую команду:

sudo ln -s /dev/null /etc/udev/rules.d/61-gdm.rules

И перезагрузите службу GDM или перезагрузите систему.

2.3.4. Исправление артефактов при выходе из сна под Wayland#

Если вам все таки удалось добраться до Wayland сессии, то проблемы здесь не заканчиваются, ибо при выходе из сна вы столкнетесь с кучей артефактов, либо с намертво зависшей системой. Чтобы это исправить необходимо передать драйверу NVIDIA ещё один параметр. Для этого создаем файл /etc/modprobe.d/nvidia-sleep.conf и указываем следующее:

sudo nano /etc/modprobe.d/nvidia-sleep.conf#
 options nvidia NVreg_PreserveVideoMemoryAllocations=1

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

sudo systemctl enable nvidia-resume nvidia-suspend nvidia-hibernate

Предупреждение

Данная проблема актуальна только для настольных ПК. На ноутбуках управление дисплеем и, соответственно, сном как правило выполняется встроенной графикой (iGPU), и никаких проблем в этом случае возникать не должно.

2.3.5. Повышение производительности CPU на ноутбках с графикой NVIDIA#

Обмен кадрами между iGPU и dGPU в следствии их копирования из VRAM в ОЗУ может вызывать большую нагрузку на процессор, из-за чего производительность самого CPU может сильно падать на ноутбуках с гибридной графикой. Page Attribute Table (PAT) это более оптимизированный метод управления памятью. Метод PAT создает таблицу типов разделов по определенному адресу, отображенному в регистре, и использует архитектуру памяти и набор инструкций более эффективно и быстро. Для его активации в драйвере NVIDIA нужно указать параметр NVreg_UsePageAttributeTable=1. Для этого как обычно создаем файл в директории /etc/modprobe.d/ или указываем через пробел в тот же файл, что мы создавали ранее:

sudo nano /etc/modprobe.d/nvidia-pat.conf#
 options nvidia_drm NVreg_UsePageAttributeTable=1

См. также: https://bbs.archlinux.org/viewtopic.php?id=242007

2.3.6. Специальные переменные окружения#

Здесь речь пойдет о переменных окружения, которые влияют на поведение драйвера при работе с приложениями которые используют API OpenGL или Vulkan. Указать вы их можете либо в Lutris для конкретных игр, либо в "Параметрах Запуска" игры в Steam ("Свойства" -> "Параметры запуска". После указания всех переменных обязательно добавьте в конце "%command%", для того чтобы Steam понимал, что вы указали именно системные переменные окружения для запуска игры, а не параметры специфичные для этой самой игры).

__GL_THREADED_OPTIMIZATIONS=1 (По умолчанию выключено) - Активируем многопоточную обработку OpenGL. Используете выборочно для нативных игр/приложений, ибо иногда может наоборот вызывать регрессию производительности. Некоторые игры и вовсе могут не запускаться с данной переменной (К примеру, некоторые нативно-запускаемые части Metro).

__GL_MaxFramesAllowed=1 (По умолчанию - 2) - Задает тип буферизации кадров драйвером. Можете указать значение "3" (Тройная буферизация) для большего количества FPS и улучшения производительности в приложениях/играх с VSync. Мы рекомендуем задавать вовсе "1" (т.е. не использовать буферизацию, подавать кадры так как они есть). Это может заметно уменьшить значение FPS в играх, но взамен вы получите лучшие задержки отрисовки и реальный физический отклик, т.к. кадр будет отображаться вам сразу на экран без лишних этапов его обработки.

__GL_YIELD="USLEEP" (По умолчанию без значения) - Довольно специфичный параметр, "USLEEP" - снижает нагрузку на CPU и некоторым образом помогает в борьбе с тирингом, а "NOTHING" дает больше FPS при этом увеличивая нагрузку на процессор.

__GL_SHADER_DISK_CACHE_SKIP_CLEANUP=1 (По умолчанию 0) - отключает ограничение кэша шейдеров OpenGL/Vulkan (по умолчанию располагается по пути ~/.cache/nvidia). Рекомендуется для современных нативных игр и DXVK 2.0+, где размер кэша может достигать более гигабайта.

__GL_SYNC_DISPLAY_DEVICE - указывает монитор с частотой которого драйвер NVIDIA будет осуществлять синхронизацию. Это нужно для конфигураций с двумя и более мониторами для предотвращения заиканий на дисплеях с высокой частотой обновления на некоторых композиторах (например Muffin). Представим, что у вас есть два дисплея, один 144 Гц, другой 60. В переменную следует указать видеовыход, в который подключен монитор с наибольшей частотой обновления. Чтобы определить какой монитор, в какой выход подключен можно использовать утилиту xrandr. Данную переменную имеет смысл указывать глобально, то есть в файле /etc/environment.

sudo nano /etc/environment#
 __GL_SYNC_DISPLAY_DEVICE=HDMI-0 # Это пример, указывайте свое имя выхода

2.4. Добавление важных модулей в образы initramfs#

Иногда может понадобиться добавить модули для ядра в начальный загрузочный образ (initramfs), который содержит в себе всё необходимое для правильной загрузки ядра, включая необходимые драйверы и программы для монтирования корневого раздела. Добавление модулей в initramfs позволяет избежать некоторых проблем, когда загрузка модулей происходит позже, чем когда они уже фактически нужны для использования. Так происходит из-за параллельной загрузки сервисов (юнитов) в systemd. Например, при использовании графического менеджера входа в систему как SDDM, модули драйвера Nvidia могут быть загружены позже, чем будет запущен сам сервис SDDM. Из-за этого пользователь ловит так называемый "Чёрный экран".

За генерацию загрузочных образов могут отвечать различные программы, но в Arch Linux по умолчанию для этого используется mkinitcpio. Чтобы добавить необходимые модули нужно создать новый файл со следующим содержанием:

sudo nano /etc/mkinitcpio.conf.d/10-modules.conf#
MODULES+=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)

Здесь мы добавляем модули драйвера Nvidia в загрузочный образ initramfs, но вы можете добавить и другие модули. В массив (ограничен скобками) вы можете прописать любые модули ядра, которые считаете наиболее важными и нужными, например такие как модули файловой системы Btrfs (btrfs zlib_deflate crc32c libcrc32c), чтобы быть уверенными, что они будут загружены вовремя.

После добавления новых модулей обязательно нужно пересобрать уже существующие образы initramfs:

sudo mkinitcpio -P

Предупреждение

Обратите внимание, что добавление большого количества модулей может сильно раздуть размер образа initramfs, поэтмоу перед этим убедитесь, что у вас имеется достаточно места в /boot разделе (если таковой имеется).

2.5. Установка микрокода#

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

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

Осуществляется это следующими командами:

sudo pacman -S intel-ucode                  # Установить микрокод Intel
sudo pacman -S amd-ucode                    # Установить микрокод AMD
sudo mkinitcpio -P                          # Пересобираем образы initramfs.
sudo grub-mkconfig -o /boot/grub/grub.cfg   # Обновляем загрузчик, можно так же через grub-customizer.

2.6. Установка дополнительных прошивок#

В Arch Linux и основанных на нем дистрибутивах большинство прошивок устройств как правило поставляются с пакетом linux-firmware и всех связанных с ним пакетов (linux-firmware-whence, linux-firmware-bnx2x, linux-firmware-liquidio, linux-firmware-marvell, linux-firmware-mellanox, linux-firmware-nfp, linux-firmware-qcom, linux-firmware-qlogic). Тем не менее вы можете столкнуться с предупреждением во время пересборки initramfs образов через команду sudo mkinitcpio -P подобного формата:

==> WARNING: Possibly missing firmware for module: XXXXXXXX

Такие предупреждения не являются критическими, однако некоторые устройства у вас в системе могут работать не полностью или вообще не работать без требуемых прошивок. Поэтому в первую очередь рекомендуется попробовать установить все вышеуказанные пакеты linux-firmware (некоторые из них можно пропустить в силу отсутствия соответствующих устройств, например linux-firmware-marvell).

Но некоторых прошивок нет в официальных репозиториях дистрибутива, поэтому их требуется установить отдельно из AUR (все пакеты содержащие файлы прошивок имеют окончание "-firmware"). Рассмотрим на примере прошивки для модуля aic94xx:

git clone https://aur.archlinux.org/aic94xx-firmware
cd aic94xx-firmware
makepkg -sric

После этого повторите команду sudo mkinitcpio -P. Предупреждение о пропуске прошивок для модуля aic94xx должно пропасть.