На Steam Deck (SteamOS) пакет VS Code из магазина приложений Discover поставляется через Flatpak. Данная статья написана для SteamOS, но может быть применена на других Linux-дистрибутивах.
Flatpak — это система управления пакетами для Linux, разработанная для обеспечения безопасности, изоляции и портативности приложений. Она позволяет пользователям устанавливать и запускать приложения, изолированные от остальной системы, что повышает безопасность и упрощает управление зависимостями.
Ключевые особенности Flatpak включают:
- Изоляция приложений: каждое приложение работает в своем собственном изолированном окружении, что уменьшает риск системных ошибок и вирусных атак.
- Универсальность: пакеты Flatpak могут быть запущены на любом дистрибутиве Linux, устраняя проблему несовместимости различных версий ОС.
- Централизованные хранилища (репозитории): пользователи могут устанавливать приложения из централизованных репозиториев, таких как Flathub, что упрощает поиск и установку программ.
- Легкое обновление: Flatpak поддерживает автоматические и безопасные обновления приложений.
- Sandboxing и разрешения: Flatpak использует технологии изоляции для ограничения доступа приложений к системным ресурсам, повышая тем самым безопасность.
Эта система особенно полезна для разработчиков, которым нужно распространять свои приложения на различные дистрибутивы Linux, а также для пользователей, которые хотят иметь последние версии приложений, не завися от конкретного дистрибутива.
Библиотека GLFW3 недоступна в VS Code (flatpak) и в процессе сборки приложения возникает ошибка: ld: cannot find -lglfw: No such file or directory. Данная проблема может быть решена путем сборки библиотеки.
В терминале VS Code выполним клонирование репозитория GLFW3:
cd ~
git clone https://github.com/glfw/glfw.git
cd glfw
Далее выполним сборку библиотеки с помощью CMake:
cmake ./
make
В результате будет получен файл src/libglfw3.a, данный файл скопируем в новую директорию:
mkdir ~/.libs
cp ~/glfw/src/libglfw3.a ~/.libs/libglfw.a
Важное замечание: Обычно в дистрибутивах linux библиотека доступна в системе без цифры 3 в названии библиотеки — необходимо уточнить правильное название в вашем Makefile: либо -lglfw, либо -lglfw3. Автор использует -lglfw и, следовательно, переименовывает библиотеку.
Данная директория по умолчанию будет доступна для VS Code (flatpak), так как находится в корневой директории. Необходимо определить переменные среды LIBRARY_PATH и LD_LIBRARY_PATH, чтобы компилятор мог найти новую библиотеку.
LIBRARY_PATH используется компиляторами во время компиляции исходного кода, а LD_LIBRARY_PATH используется загрузчиком динамических библиотек в Linux и других UNIX-подобных системах.
Примечание: с заголовочными файлами можно поступить аналогично, скопировав папку ~/glfw/include в ~/.include и определив C_INCLUDE_PATH.
Данная задача имеет три пути решения:
- выполнение команд в терминале;
- ручное редактирование файла;
- использование графического менеджера Flatseal.
Рассмотрим каждый из них.
Выполнение команд в терминале
Для задания переменных среды потребуется выполнить команду с правами администратора:
sudo flatpak override\
--env=LIBRARY_PATH=/home/deck/.libs\
--env=LD_LIBRARY_PATH=/app/lib:/home/deck/.libs \
com.visualstudio.code
Данный способ применяет переменные среды для всех пользователей на уровне системы. Файл с переопределенными переменными среды доступен в директории /var/lib/flatpak/overrides/com.visualstudio.code
Примечание: команда является легко масштабируемой и для добавление переменной для заголовочных файлов необходимо добавить —env=C_INCLUDE_PATH=/home/deck/.include
Ручное редактирование файла
Данный способ является более ручным по сравнению с предыдущим. Пользователю доступны два варианта:
- ~/.local/share/flatpak/overrides/com.visualstudio.code — файл в личной директории;
- /var/lib/flatpak/overrides/com.visualstudio.code — системный файл (требуются права администратора).
Файл должен иметь следующий вид:
[Environment]
LIBRARY_PATH=/home/deck/.libs
LD_LIBRARY_PATH=/app/lib:/home/deck/.libs
Использование графического менеджера Flatseal
Flatseal — это графический менеджер разрешений для приложений, установленных через Flatpak. Это инструмент, позволяющий пользователям легко управлять доступом и разрешениями Flatpak-приложений, обеспечивая больший контроль над тем, как приложения взаимодействуют с системой и данными пользователя.
Данный графический менеджер можно установить двумя путями: через терминал или менеджер пакетов.
Первый способ через команду в терминале
flatpak install flathub com.github.tchx84.Flatseal
А также через менеджер пакетов Discover (SteamOS), пример приведен на рисунке 1.
В приложении Flatseal необходимо выбрать Visual Studio Code и дополнить переменные среды (секция Environment, список Variables) по аналогии с рисунком 2.
Важное примечание: восклицательный знак в треугольнике указывает, что параметр был изменен пользователем.
Важное замечание: переменная LD_LIBRARY_PATH уже определена по умолчанию и необходимо лишь дополнить её.