blob: c5e3f92761ce2ff62c69796ade4b68fe5c6bc343 [file] [log] [blame] [view] [edit]
# session_manager
Reviewed on: 2021-10-01
`session_manager` is the component that runs and manages [session components](glossary.session-component).
## Building
Add the `session_manager` component to builds by including `--with-base
//src/session/bin/session_manager` in the `fx set` invocation followed by
rebuilding and re-paving the device.
Product configurations built on Session Framework (such as `fx set
workstation_eng.x64`) include `//src/session/bin/session_manager` by default.
## Running
`session_manager` is launched in one of two ways: manually or automatically on
system boot.
In general, running manually is useful during development, while running on boot
is desirable for a production configuration.
### Running manually
Use the [`ffx session`]((/docs/development/tools/ffx/getting-started.md) tool
to launch a specific session:
```
ffx session launch fuchsia-pkg://fuchsia.com/your_session#meta/your_session.cm
```
### Launching a session on boot
`session_manager` attempts to launch a session on boot based on the contents of
its `session_url` configuration parameter.
To boot into a session, include `session_manager` and the session component in
the base package set and assign the URL of the session component to the product
configuration:
```
fx set core.qemu-x64 \
--with-base //src/session/bin/session_manager \
--with-base //path/to/your_session \
--args=product_config.session_url="fuchsia-pkg://fuchsia.com/your_package#meta/your_session.cm"
```
This can also be configured directly in a product's definition `*.gni` files
or via `fx args`.
Re-build, re-pave, and restart your device and it will boot into
`session_manager` and launch your session.
### Temporarily disabling launch-on-boot
TODO(fxbug.dev/126266): Update this documentation once we move this
functionality to only rely on structured config.
If your development device runs a product that specifies
`product_config.session_url`, you may nonetheless want to stop the session from
launching (e.g., to avoid log spam from the session, or make changes to the
device's state _before_ the session launches).
You can disable autolaunching without reflashing or OTAing your device by
creating an empty file at `/data/session-manager/noautolaunch`.
To prevent your device from autolaunching the session, run:
fx shell 'mkdir -p /data/session-manager && echo "" > /data/session-manager/noautolaunch'
To re-enable autolaunching, run:
fx shell 'rm /data/session-manager/noautolaunch'
The setting will take effect the next time `session-manager` restarts.
## Testing
Unit tests for `session_manager` are included in the `session_manager_tests`
package, and integration tests are included in the
`session_manager_integration_tests` package.
Both can be included in your build by adding `--with //src/session:tests` to
your `fx set`.
```
fx test session_manager_tests
fx test session_manager_integration_tests
```
## Source layout
The entry point for `session_manager` is in `src/main.rs` with implementation
details in other files within `src/`.
Unit tests are co-located with the code, while integration tests are in
[`//src/session/tests`](/src/session/tests).
[glossary.session-component]: /docs/glossary.md#session-component