Как сделать файлы AppDir доступными для приложения AppImage? - PullRequest
1 голос
/ 10 апреля 2020

Моя система сборки, которая использует meson, помещает некоторые файлы, необходимые моему приложению, в AppDir под AppDir/usr/share/myapp/resources. Приложению необходимо и читать, и записывать в эти файлы, когда оно запущено. Когда я смотрю, файлы находятся в AppDir, но когда генерируется .AppImage, автономный исполняемый файл не может получить доступ к этим файлам. При интеграции приложения с рабочим столом приложение устанавливается в ~/Applications, но оно не содержит эти файлы.

Вот визуализация того, как оно выглядит, когда приложение установлено в системе без использования AppImage (ninja install)

? usr
   ? share
        ? myapp
            ? resources
                ? MainWindow.glade
                ? dataCache.json

Когда я делаю DESTDIR=AppDir ninja install, структура заканчивается следующим образом

? AppDir
    ? usr
        ? share
            ? myapp
                ? resources
                    ? MainWindow.glade
                    ? dataCache.json

Когда приложение ( MyApp.AppImage ) AppImageLauncher , встроенный в рабочий стол пользователя, копирует только AppImage в каталог приложений. Других папок или файлов нет.

Редактировать: Я использую ./linuxdeploy-x86_64.AppImage --appdir AppDir для создания каталога AppDir. Затем я использую DESTDIR=AppDir ninja install для установки приложения в AppDir, а затем я использую ./linuxdeploy-x86_64.AppImage --appdir AppDir --output appimage для создания AppImage

Как один go получит доступ к тем файлам, которые были в AppDir после того, как приложение будет в комплекте? Или как заставить интеграцию приложений копировать эти файлы в папку «Приложения», чтобы приложение могло иметь к ним доступ во время работы приложения?

1 Ответ

1 голос
/ 15 апреля 2020

Чтобы разрешить точку монтирования AppImage во время выполнения, вы можете использовать переменную окружения APPDIR. Например, если вы хотите разрешить usr/share/icons/hicolor/myicon.png, вам нужно использовать следующий путь $APPDIR/usr/share/icons/hicolor/myicon.png.

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

Относительно записи файлов внутри AppImage. Это невозможно по замыслу. AppImage - это доступный только для чтения образ SquashFS, который монтируется во время выполнения. Любые данные приложения должны быть записаны в $HOME/.config или $HOME/.local/share в зависимости от того, являются ли они данными конфигурации или данными другого типа. Рекомендуемый рабочий процесс заключается в копировании таких данных при первом запуске.

Для получения дополнительной информации о том, следует ли копировать данные приложения, см. https://www.freedesktop.org/wiki/Software/xdg-user-dirs/

...