47 lines
1.6 KiB
Markdown
47 lines
1.6 KiB
Markdown
# Linux desktop build and runtime
|
|
|
|
The Linux desktop entry, installed icon, and GTK application must all use the
|
|
same application ID: `com.mithqal.ai`.
|
|
|
|
## Ubuntu and Debian build dependencies
|
|
|
|
Install Flutter's Linux desktop toolchain and the native secret-storage
|
|
development library:
|
|
|
|
```sh
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
clang cmake ninja-build pkg-config libgtk-3-dev libstdc++-12-dev \
|
|
libsecret-1-dev libsecret-1-0
|
|
```
|
|
|
|
Then check the host and build the release bundle:
|
|
|
|
```sh
|
|
flutter doctor -v
|
|
flutter devices
|
|
flutter pub get
|
|
flutter build linux --release
|
|
```
|
|
|
|
The executable bundle is produced at
|
|
`build/linux/x64/release/bundle/`. Distribute the complete bundle and verify
|
|
its native runtime dependencies on the target distribution, for example with
|
|
`ldd build/linux/x64/release/bundle/flutter_app`.
|
|
|
|
## Secure session storage
|
|
|
|
`flutter_secure_storage` uses Libsecret on Linux. Build machines need
|
|
`libsecret-1-dev`; packaged applications need the runtime library
|
|
`libsecret-1-0`. The desktop session must also provide D-Bus and an unlocked
|
|
Secret Service keyring, commonly GNOME Keyring or KDE Wallet. Run the
|
|
application in an interactive desktop session to verify login, token
|
|
persistence after restart, and logout deletion. Do not treat a successful
|
|
Linux build as proof that secure storage works: headless sessions and CI may
|
|
have no unlocked keyring.
|
|
|
|
Upstream setup references:
|
|
|
|
- [Flutter Linux development setup](https://docs.flutter.dev/platform-integration/linux/setup)
|
|
- [flutter_secure_storage Linux implementation](https://pub.dev/documentation/flutter_secure_storage_linux/latest/)
|