Всем доброго дня! В предыдущей статье Kawai-Focus 2.3: логика приложения на TypeScript:
Переписана логика с JS на TS;
Разобрана проблема запуска на Arch по issue Сергея (отключена сборка AppImage).
Сегодня я покажу, какие есть адекватные способы собрать приложение под Arch Linux без боли и лишних проблем. Для удобства тестирования и сборки я установил операционную систему Cachy OS, которая базируется на Arch Linux.
Сам я никогда раньше не использовал Arch Linux, поэтому буду обучаться сборке и всем необходимым инструментам на ходу и делиться своим опытом, а также опытом других, с вами.
Заваривайте чай, доставайте вкусняшки — пора «снимать урожай помидоров сорта Arch»! 🍅
Немного об Arch Linux
Я взялся за Arch Linux, так как он довольно востребован среди опытных разработчиков и продолжает набирать популярность. Даже в нашем комьюнити "Кот на салфетке" я знаю как минимум двух разработчиков, которые используют эту операционную систему.
Прежде чем ринуться собирать под Arch Linux, необходимо немного узнать о самой системе и о том, какие инструменты она предоставляет для сборки и установки пакетов.
Arch Linux — это минималистичный и гибкий дистрибутив операционной системы на базе Linux, ориентированный на опытных пользователей, которым важен полный контроль над системой. Проект был создан в 2002 году канадским разработчиком Judd Vinet. Основная идея Arch Linux отражена в принципе KISS (Keep It Simple, Stupid) — система должна быть максимально простой по структуре и прозрачной для пользователя. Вместо преднастроенной среды Arch предоставляет минимальную базовую установку, которую пользователь постепенно настраивает под свои задачи.
Об инструментах для пакетов
Одной из ключевых особенностей Arch Linux является собственная система управления пакетами — Pacman. Этот инструмент отвечает за установку, обновление и удаление программ, а также за работу с зависимостями. Pacman использует бинарные пакеты и позволяет управлять всей системой одной командой, включая её полное обновление. Для сборки пакетов под Arch Linux используется система PKGBUILD и утилита makepkg, которая автоматизирует процесс загрузки исходного кода, компиляции и упаковки программы в формат пакета, понятный pacman.
Помимо официальных репозиториев, пользователи активно используют Arch User Repository (AUR) — огромную пользовательскую базу рецептов сборки программ. Для работы с AUR существует несколько популярных помощников. Один из самых известных — yay, который объединяет возможности pacman и сборку пакетов из AUR в одном интерфейсе. Также широко используется paru — современный помощник, написанный на Rust и ориентированный на безопасность и скорость. Третий популярный инструмент — trizen, который предоставляет удобный интерфейс для поиска, сборки и установки пакетов из AUR.
AUR-helper — это утилита, которая автоматизирует поиск, загрузку, сборку и установку пакетов из Arch User Repository, используя стандартные инструменты makepkg и Pacman. Если в Arch User Repository есть PKGBUILD, то любой AUR-helper сможет собрать и установить пакет, потому что все они используют один и тот же механизм сборки — стандартные инструменты makepkg и Pacman.
Схема работы примерно такая:
AUR-helper (например yay или paru) скачивает PKGBUILD из AUR;
Проверяет зависимости;
Устанавливает зависимости через pacman;
Запускает
makepkg;makepkgсобирает пакет и создаёт файл.pkg.tar.zst;Pacman устанавливает получившийся пакет в систему.
То есть AUR-helper — это просто удобная оболочка, а реальная сборка происходит стандартными инструментами Arch.
Важно понимать одну вещь:
в AUR хранится не сам пакет, а рецепт сборки (PKGBUILD). Поэтому любой помощник, который умеет работать с AUR, сможет использовать этот рецепт.
Именно поэтому пакет, опубликованный в AUR, становится доступен пользователям через разные инструменты одновременно: yay, paru, trizen или даже через ручную сборку makepkg.
Мои дальнейшие шаги
Исходя из полученной мной информации о данной операционной системе и особенностей сборки под неё я наметил следующие дальнейшие шаги:
Собрать приложение под Arch Linux вручную с помощью
makepkg;Установить приложение и протестировать его;
Добавить рецепт сборки в Arch User Repository (AUR);
Собрать приложение с помощью AUR-helper (например yay).
Также Сергей (бывалый arch-юзер) уже собирал моё приложение у себя на Arch и дал мне несколько ценных советов. Один из них — использовать для сборки через Tauri deb-пакет, который уже был собран мной для предыдущей статьи.
Использование готового deb-пакета упрощает установку приложения для пользователей Arch Linux. В таком подходе PKGBUILD фактически лишь скачивает подготовленный пакет и устанавливает его, не требуя компиляции проекта на стороне пользователя. Это даёт несколько преимуществ:
Установка проходит значительно быстрее;
Не требуется установка всех инструментов разработки и зависимостей для сборки;
Снижается вероятность ошибок компиляции на разных системах.
В отличие от варианта с клонированием репозитория и сборкой из исходников, пользователю не нужно тратить время на полноценный процесс сборки — пакет устанавливается почти так же быстро, как обычные бинарные пакеты через Pacman.
На мой взгляд, это отличный совет, который экономит время как мне, так и пользователям.
Сборка и установка под Arch
Теперь, когда я имею представление об Arch Linux и его инструментах для работы с пакетами и сборки, мне гораздо легче начать сам процесс. Для сборки и тестирования приложения я установил Cachy OS, которую активно использует для работы и игр Иван. Он предпочитает оболочку Gnome, так как она потребляет минимум ресурсов. Ну а я, как всегда, выбираю KDE Plasma, которую некоторые называют «кедами», потому что она нравится мне внешне, хоть и может потреблять немного больше ресурсов.
Первое, что необходимо сделать — это клонировать репозиторий для работы с ним:
git@github.com:Arduinum/kawai-focus-v2.git
Затем перехожу в папку проекта:
cd kawai-focus-v2
Файл рецепта PKGBUILD
Для удобства сборки и установки пакета создаю файл рецепта PKGBUILD.
pkgname=kawai-focus pkgver=0.1.0 pkgrel=1 pkgdesc="Kawai-Focus is a focus-training app based on the Pomodoro timer." arch=('x86_64') url="https://github.com/Arduinum/kawai-focus-v2" license=('MIT') depends=('webkit2gtk-4.1' 'libsoup3' 'gtk3' 'cairo' 'gdk-pixbuf2' 'glib2' 'pango') source=("Kawai-Focus_${pkgver}_amd64.deb::https://github.com/Arduinum/kawai-focus-v2/releases/download/${pkgver}-alpha.1/Kawai-Focus\_${pkgver}\_amd64.deb") sha256sums=('SKIP') package() { cd "$srcdir" # распаковываем deb ar x Kawai-Focus_${pkgver}_amd64.deb # извлекаем файлы пакета tar -xf data.tar.* # копируем всё в pkgdir cp -r usr "$pkgdir" }
Разбор PKGBUILD
pkgname=kawai-focus— задаёт имя пакета. В Arch Linux это имя будет использоваться для установки и идентификации пакета;pkgver=0.1.0— версия программы, которую мы упаковываем. Обычно совпадает с версией релиза в проекте;pkgrel=1— номер сборки пакета для данной версии. Если соберёшь пакет заново без измененияpkgver, увеличиваешьpkgrel, чтобы система понимала, что это новый билд;pkgdesc="Kawai-Focus is a focus-training app based on the Pomodoro timer."— краткое описание пакета, показывается в списках и при запросе информации о пакете;arch=('x86_64')— архитектура пакета. Здесь указана только 64-битная версия Linux;url="https://github.com/Arduinum/kawai-focus-v2"— ссылка на домашнюю страницу или репозиторий проекта;license=('MIT')— лицензия программного обеспечения, по которой распространяется пакет;depends=('webkit2gtk-4.1' 'libsoup3' 'gtk3' 'cairo' 'gdk-pixbuf2' 'glib2' 'pango')— список зависимостей, которые должны быть установлены для работы приложения;source=("Kawai-Focus_${pkgver}_amd64.deb::https://github.com/Arduinum/kawai-focus-v2/releases/download/${pkgver}-alpha.1/Kawai-Focus_${pkgver}_amd64.deb")— источник пакета для сборки. Здесь указывается конкретный.debфайл с GitHub, который будет скачан;sha256sums=('SKIP')— хеш-сумма файла для проверки целостности.SKIPиспользуется, если проверка не нужна или невозможна;package()— функция сборки пакета. Всё, что внутри, выполняется для подготовки файлов к установке в систему:cd "$srcdir"— переходим в директорию, куда был скачан источник;ar x Kawai-Focus_${pkgver}_amd64.deb— распаковываем.debархив (формат Debian);tar -xf data.tar.*— извлекаем содержимое пакета.deb(основные файлы приложения);cp -r usr "$pkgdir"— копируем содержимое в директорию пакета Arch Linux ($pkgdir), чтобы оно корректно установилось черезpacman.
Запуск сборки и установки
Перед непосредственной сборкой нужно получить хеш-суммы. Для этого необходимо установить pacman-contrib, в котором содержится утилита updpkgsums для подсчёта хеша.
sudo pacman -S pacman-contrib
Теперь подсчитаем сам хеш:
updpkgsums
Вывод в terminal:
> Получение исходных файлов... -> Найден Kawai-Focus_0.1.0_amd64.deb > Подсчёт контрольных сумм исходных файлов...
После выполнения команды updpkgsums в файле рецепта перезапишется строка SKIP на строку хеша. В моём случае она теперь выглядит так.
sha256sums=('3ff49a4e124daafb5e660738c275b53ccf3116e759cd6cafde8b77b2257799a6')
Теперь можно запускать сам процесс сборки.
makepkg -si
Что делает makepkg?
Читает переменные из
PKGBUILD(pkgname,pkgver,dependsи т.д.);Скачивает файлы из
source;Запускает функции в порядке:
prepare(),build(),package()(если они определены);Создаёт пакет Arch Linux —
.pkg.tar.zst;-s— автоматически ищет и устанавливает зависимости (depends) черезpacmanперед сборкой;-i— после сборки устанавливает созданный пакет черезpacman
Сначала начинается процесс проверки и установки необходимых зависимостей для нормальной работы и запуска проекта.
> Сборка пакета kawai-focus 0.1.0-1 (Вт 10 мар 2026 16:52:14) > Проверка зависимостей для запуска... > Установка недостающих зависимостей... [sudo] пароль для user_name: разрешение зависимостей... проверка конфликтов... Пакет (8) Новая версия Изменение размера Размер загрузки cachyos-extra-v3/enchant 2.8.14-1.1 0,27 MiB 0,07 MiB cachyos-extra-v3/harfbuzz-icu 12.3.2-1.1 0,02 MiB 0,01 MiB cachyos-extra-v3/hyphen 2.8.8-6.2 0,04 MiB 0,02 MiB cachyos-extra-v3/libavif 1.3.0-5.1 0,82 MiB 0,30 MiB cachyos-extra-v3/libmanette 0.2.13-1.1 0,40 MiB 0,06 MiB cachyos-extra-v3/libyuv r2426+464c51a03-1.1 3,08 MiB 0,55 MiB cachyos-extra-v3/woff2 1.0.2-6.1 0,19 MiB 0,06 MiB extra/webkit2gtk-4.1 2.50.5-1 127,87 MiB 34,27 MiB Будет загружено: 35,34 MiB Будет установлено: 132,68 MiB :: Приступить к установке? [Y/n]
Разбор зависимостей:
enchant 2.8.14-1.1— библиотека для проверки орфографии, позволяет работать с разными словарями (Hunspell, Aspell и т.д.);harfbuzz-icu 12.3.2-1.1— модульHarfBuzzдля сложной текстовой раскладки (OpenType, шрифты) с поддержкой Unicode через ICU;hyphen 2.8.8-6.2— библиотека для автоматического переноса слов, используется при рендеринге текста;libavif 1.3.0-5.1— библиотека для работы с изображениями в формате AVIF (эффективный формат сжатия изображений);libmanette 0.2.13-1.1— библиотека для работы с игровыми контроллерами (геймпадами);libyuv r2426+464c51a03-1.1— библиотека для обработки видео/изображений (конвертация форматов, масштабирование, цветокоррекция);woff2 1.0.2-6.1— библиотека для работы с веб-шрифтами WOFF2 (Web Open Font Format 2);webkit2gtk-4.1 2.50.5-1— движок WebKit для рендеринга HTML/CSS/JS в GTK-приложениях, позволяет встроить полноценный веб-браузер в приложение.
Интерфейс предлагает либо приступить, либо отказаться от установки зависимостей, введя [Y/n].
После установки зависимостей начинается процесс самой сборки.
> Сборка пакета kawai-focus 0.1.0-1 (Вт 10 мар 2026 17:06:45) > Проверка зависимостей для запуска... > Проверка зависимостей для сборки... > Получение исходных файлов... -> Найден Kawai-Focus_0.1.0_amd64.deb > Проверка файлов source с использованием sha256sums... Kawai-Focus_0.1.0_amd64.deb ... Готово > Распаковка исходных файлов... -> Распаковка 'Kawai-Focus_0.1.0_amd64.deb' с помощью bsdtar > Удаление директории '$pkgdir/'... > Вход в окружение fakeroot... > Запускается package()... > Очистка... -> Удаление файлов libtool... -> Удаление статических библиотек... -> Удаление ненужных файлов... -> Удаление отладочной информации из бинарников и библиотек... -> Сжатие документации (man и info)... > Проверка сборки на ошибки... > Создание пакета "kawai-focus"... -> Создание файла '.PKGINFO'... -> Создание файла '.BUILDINFO'... -> Создание файла '.MTREE'... -> Сжатие пакета... > Выход из окружения fakeroot. > Завершена сборка пакета kawai-focus 0.1.0-1 (Вт 10 мар 2026 17:06:47)
Сборка прошла успешно, и у меня появился файл kawai-focus-0.1.0-1-x86_64.pkg.tar.zst.
Разберём формат файла:
.pkg— это пакет Arch Linux;.tar— внутри пакет просто архив с файлами программы;.zst— сжатие с помощью Zstandard, современного и эффективного алгоритма сжатия.
Далее происходит процесс установки пакета.
> Установка пакета 'kawai-focus' с помощью 'pacman -U'... [sudo] пароль для user_name: загрузка пакетов... разрешение зависимостей... проверка конфликтов... Пакет (1) Новая версия Изменение размера kawai-focus 0.1.0-1 9,96 MiB Будет установлено: 9,96 MiB :: Приступить к установке? [Y/n] y (1/1) проверка ключей [------------------------------------] 100% (1/1) проверка целостности пакета [------------------------------------] 100% (1/1) загрузка файлов пакетов [------------------------------------] 100% (1/1) проверка конфликтов файлов [------------------------------------] 100% :: Обработка изменений пакета... (1/1) установка kawai-focus [------------------------------------] 100% :: Запуск post-transaction hooks... (1/3) Arming ConditionNeedsUpdate... (2/3) Updating icon theme caches... (3/3) Updating the desktop file MIME type cache...
Все этапы установки прошли успешно. После этого естественно возникает вопрос: работает ли пакет в Arch? Как часто бывает, без багов и проблем редко обходится. В моём случае именно это и произошло.
О результатах тестирования и исправлении багов будет рассказано далее в статье.
Баги запуска и их исправление
Как я писал в предыдущем разделе, у меня возникли некоторые проблемы при запуске. При запуске приложения через ярлык оно открывалось с пустым экраном и тут же вылетало. Как обычно в таких ситуациях, я решил запускать приложение через терминал, чтобы увидеть ошибки, которые не видны при обычном запуске через ярлык.
Ошибка в названии приложения
Первая ошибка довольно банальна и связана с именем приложения. Я узнал о ней, как только попытался запустить приложение по его предполагаемому названию kawai-focus. Система выдала сообщение:
command not found: kawai-focus
Это означает, что команда с названием kawai-focus не найдена.
Оказалось, что в файле Cargo.toml я оставил дефолтное название приложения — app. Из-за этого система не может физически найти приложение по имени kawai-focus. К счастью, эту ошибку легко исправить: нужно переименовать приложение, затем заново пересобрать его в deb-пакет, опубликовать на GitHub и пересобрать под Arch. Что я и сделаю после исправления всех багов запуска.
[package] name = "kawai-focus"
Error 71 (Ошибка протокола)
Прежде чем пересобрать приложение ради имени, я хотел убедиться, что оно вообще работает. Поэтому я решил запустить приложение для отладки напрямую через бинарник app.
❯ /usr/bin/app
И получил сообщение с ошибкой:
Gdk-Message: 18:15:42.584: Error 71 (Ошибка протокола) dispatching to Wayland display.
Эта ошибка возникает, когда приложение отправляет некорректный или неожиданный запрос Wayland-композитору. Чаще всего это происходит из-за несовместимости версий библиотек GTK/WebKit с сервером Wayland или из-за бага в приложении. Иногда ошибка появляется при запуске X11-приложения через слой совместимости XWayland.
Далее я изучал операционную систему и интернет в поисках причин и решений. Не буду перечислять весь путь, который я прошёл, а сразу перейду к конкретным причинам и решению.
Перебирая возможные причины, я обнаружил, что в системе нет GBM и GDK. Узнал я это, посмотрев содержимое соответствующих переменных, которые оказались пустыми:
echo $GBM_BACKEND echo $GDK_BACKEND
GBM — это библиотека (Generic Buffer Management), которая используется графическим стеком Linux для управления видеобуферами между драйверами GPU, Mesa и Wayland.
GDK — это библиотека (GIMP Drawing Kit), являющаяся низкоуровневым слоем графической системы GTK, которая взаимодействует с оконными системами вроде X11 или Wayland.
Более подробно можно узнать, какой backend используется GBM, посмотрев файл nvidia-drm_gbm.so.
❯ ls -la /usr/lib/gbm/nvidia-drm_gbm.so
Результат команды:
lrwxrwxrwx - root 4 фев 18:46 /usr/lib/gbm/nvidia-drm_gbm.so -> ../libnvidia-allocator.so.590.48.01
В итоге видно, что он ссылается на библиотеку NVIDIA libnvidia-allocator.so.590.48.01.
libnvidia-allocator.so — это внутренняя библиотека драйвера NVIDIA, отвечающая за выделение и управление видеопамятью GPU для графических приложений.
В ней нет реализаций GBM или GDK, поскольку драйвер NVIDIA использует собственный механизм работы с видеобуферами, а не стандартную реализацию Mesa.
Исправление ошибки 71
В моём случае есть несколько способов исправить данную ошибку: установить другой драйвер (например, Nouveau) или попытаться отключить использование GBM и GDK во время запуска, задав соответствующие переменные окружения.
Первый вариант меня не устраивал, так как сторонние видеодрайверы обычно работают заметно хуже оригинальных, и может пострадать производительность или некоторые функции видеокарты.
Поэтому я решил сделать возможность для пользователя самому решать, отключать что-либо или нет, используя флаги, как в консольных CLI-утилитах. По умолчанию отключение не применяется на всех системах, так как это может влиять на производительность и стабильность работы приложения. У некоторых пользователей всё будет работать и без флагов.
flags.rs
Первое, что я сделал — написал функции, отвечающие за работу флагов, и создал для них отдельный файл flags.rs. Идея проста: если в аргументах командной строки (args) появляется флаг с нужным названием (например, --help), задаём переменной значение 1, иначе игнорируем. Дополнительно я сделал так, чтобы эти функции работали только на Linux; на остальных системах их не будет.
Функция apply_linux_cli_flags()
Эта функция отвечает за включение нужных переменных окружения:
#[cfg(target_os = "linux")] pub fn apply_linux_cli_flags() { let disable_webkit_compositing_mode = std::env::args().any(|a| a "--webkit-disable-compositing-mode"); if disable_webkit_compositing_mode { unsafe { std::env::set_var("WEBKIT_DISABLE_COMPOSITING_MODE", "1"); } } let webkit_disable_dmabuf_renderer = std::env::args().any(|a| a "--webkit-disable-dmabuf-renderer"); if webkit_disable_dmabuf_renderer { unsafe { std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1"); } } let nv_disable_explicit_sync = std::env::args().any(|a| a "--nv-disable-explicit-sync"); if nv_disable_explicit_sync { unsafe { std::env::set_var("__NV_DISABLE_EXPLICIT_SYNC", "1"); } } }
Функция обрабатывает CLI-флаги, переданные при запуске программы в Linux.
Она проверяет аргументы командной строки (std::env::args()) и, если находит определённые флаги, устанавливает соответствующие переменные окружения.
--webkit-disable-compositing-mode— станавливает переменнуюWEBKIT_DISABLE_COMPOSITING_MODE=1, отключая compositing-режим WebKit. Может помочь при графических артефактах;--webkit-disable-dmabuf-renderer— устанавливаетWEBKIT_DISABLE_DMABUF_RENDERER=1, отключая рендерер DMA-BUF в WebKit. Используется для обхода проблем Wayland и GBM;--nv-disable-explicit-sync— устанавливает__NV_DISABLE_EXPLICIT_SYNC=1, отключая механизм explicit sync в драйверах NVIDIA, что иногда устраняет зависания интерфейса.
Функция компилируется только для Linux благодаря атрибуту #[cfg(target_os = "linux")]. Хочу обратить внимание, что перед функцией стоит pub, а значит они публичные и их можно импортировать. Без этого Rust не даст произвести импорт этих функций.
Функция print_help()
Эта функция содержит текстовое описание команд и помощь по флагам. Я вынес её отдельно, так как текста очень много.
#[cfg(target_os = "linux")] pub fn print_help() { println!( r#"Kawai Focus — Pomodoro таймер Использование: kawai-focus [FLAGS] Флаги (Linux): --webkit-disable-compositing-mode Отключает WebKit compositing mode. Помогает при графических артефактах на некоторых GPU. --webkit-disable-dmabuf-renderer Отключает DMA-BUF renderer WebKit. Полезно при проблемах с Wayland и с отсутствием GBM. --nv-disable-explicit-sync Отключает explicit sync драйвера NVIDIA. Иногда исправляет: зависания интерфейса, проблемы с отсутствием GBM. --help Показать эту справку и выйти. "#); }
Функция печатает:
Название программы;
Пример использования (
kawai-focus [FLAGS]);Описание доступных флагов для Linux;
Краткое объяснение, что делает каждый флаг.
Фрагмент функции lib.rs
Настало время ��одключить новые функции в код файла lib.rs.
mod flags; #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { #[cfg(target_os = "linux")] if std::env::args().any(|a| a "--help" || a "-h") { flags::print_help(); std::process::exit(0); } #[cfg(target_os = "linux")] flags::apply_linux_cli_flags(); // Другой код }
Разбор нового кода:
mod flags;— подключает модульflags, в котором находятся функции для работы с CLI-флагами (print_help,apply_linux_cli_flags).Проверка
--helpили-h— если пользователь запускает программу с этим флагом:вызывается
flags::print_help()для вывода справки,затем
std::process::exit(0)завершает программу (для того чтоб не запустилась сама программа после запускаhelp).
flags::apply_linux_cli_flags();— обрабатывает остальные CLI-флаги и устанавливает соответствующие переменные окружения.// Другой код— далее продолжается обычная логика запуска приложения.
Переименование lib_app
Финальным штрихом я переименовал lib_app в kawai_focus, чтобы имя крейта совпадало с названием проекта, а вызов выглядел понятнее и чище (kawai_focus::run() вместо lib_app::run()). Это улучшает читаемость и делает структуру проекта более логичной.
Имя крейта — это имя библиотеки или пакета в языке Rust, под которым её можно подключать и использовать в коде. Крейтом в Rust называют единицу компиляции: это может быть либо библиотека (lib.rs), либо исполняемая программа (main.rs).
[lib] name = "kawai_focus"
name в секции [lib] файла Cargo.toml задаёт имя библиотечного крейта, под которым он будет импортироваться в коде. По умолчанию Cargo использует имя пакета, но его можно переопределить через этот параметр.
Обновлённый код в функции main():
kawai_focus::run();
Выражение kawai_focus::run(); означает вызов функции run, которая находится в корневом модуле библиотечного крейта kawai_focus. То есть бинарный файл (main.rs) обращается к коду библиотеки и запускает основную логику приложения.
Теперь всё готово для пересборки и проверки запуска.
Проверка запуска
Процесс пересборки я показывать не буду, так как уже рассказал о нём ранее, а перейду сразу к проверке запуска.

Как видно из скриншота, команда kawai-focus теперь распознаётся системой. Также видно, что приложение, запущенное без флагов, по-прежнему не стартует из-за ошибки 71 — это нормально для моей ситуации.
Приложение, запущенное с флагом --help, успешно показывает подсказки по флагам без вылетов, так как в этом режиме не происходит работа с дисплеем, и само приложение не стартует.
Теперь приступлю к самой важной проверке — проверке работы остальных флагов, которые должны помочь с проблемой отсутствия GBM и GDK на NVIDIA в м��ей системе.

Как видно из скриншота, флаги сработали, и приложение успешно стартует. Причём в моём случае работает любой из трёх флагов. Для NVIDIA лучше использовать флаг --nv-disable-explicit-sync, так как он оказывает минимальное влияние на систему. На других видеокартах лучше использовать один из двух других.
Я также написал инструкцию и залил файл рецепта PKGBUILD на свой GitHub в releases для удобства пользователей. Теперь ещё до установки программы пользователи будут знать о существовании флагов, которые помогают с возможными проблемами приложения.

Есть хорошие новости по поводу запуска: мою инструкцию успел испытать Сергей и успешно запустил приложение у себя. В его случае запуск прошёл без использования флагов, так как у него видеокарта AMD, и в системе есть все необходимые компоненты для успешного старта. Это подтверждает, что данные флаги не нужно применять всем пользователям.

Иван также помогал с тестированием, но он делал его ещё до исправления бага. Его пример хорошо показывает, как запуск выглядел до фиксов.

В первой строке видно, что он пытался использовать устаревший X11 в качестве сессии, и приложение вылетело с ошибкой 71. Прямое использование WEBKIT_DISABLE_DMABUF_RENDERER=1 дало возможность успешно запустить приложение.
Хочу поблагодарить Сергея и Ивана за помощь в тестировании. Сергей также рассказал о WEBKIT_DISABLE_COMPOSITING_MODE в issue, а Иван делал ревью предыдущих статей и рассказывал о существовании yay и других AUR-helper.
Анонс на следующие статьи
Рубеж сборки под Linux почти пройден. Теперь моё приложение поддерживает довольно большое количество популярных дистрибутивов, таких как Debian, Ubuntu, Fedora и сегодняшний герой — Arch. Также я залил обновлённый .rpm файл после пересборки. Если у кого-то есть желание и возможность проверить работу моего приложения на одной из систем, поддерживающих .rpm пакеты, напишите о результатах своих тестов в комментариях на Хабр или на «Кот на салфетке».
В этой статье я не включил добавление рецепта сборки в Arch User Repository (AUR) и проверку сборки приложения с помощью AUR-helper (например, yay). Эти темы я перенесу в следующую статью.
Ещё в следующей статье предстоит раскрыть довольно интересную и для меня пока непознанную тему — сборку приложения Tauri под Windows! Я пока даже не догадываюсь, какие возможные баги и проблемы могут меня поджидать на этой операционной системе от Microsoft, которую редко любят линуксоиды.
Ссылки к статье
Репозиторий проекта на Github Kawai-Focus-v2.
