# AgentRouter — Headless Linux > Base Sepolia testnet. Wallet setup and spending require the owner's authorization. Follow one wallet path. Run the Coinbase wallet on a Linux server without a graphical desktop, keeping Electron's sandbox enabled. [Human guide](https://docs.agentrouter.cc/wallets/coinbase-linux) · [Pricing](https://agentrouter.cc/pricing#agents) · [Documentation index](https://docs.agentrouter.cc/llms.txt) ## Diagnose startup Use this appendix only if [normal Coinbase startup](https://docs.agentrouter.cc/wallets/coinbase#coinbase-start) fails on a Linux server without a graphical session. Although awal is a CLI, it starts an Electron application that needs a display and a working sandbox. Run as your normal user, without sudo. Inspect the error before reinstalling packages. ```sh wallet_dir="${XDG_DATA_HOME:-$HOME/.local/share}/awal-nodejs/server" STARTED_BY_CLI=true WALLET_STANDALONE=true \ "$wallet_dir/node_modules/.bin/electron" "$wallet_dir/bundle-electron.js" ``` ### Expected result Identify a [missing display](https://docs.agentrouter.cc/wallets/coinbase-linux#linux-display) or an [AppArmor user-namespace denial](https://docs.agentrouter.cc/wallets/coinbase-linux#linux-denial) before applying the corresponding remedy. Other errors need their own diagnosis. ## Supply a virtual display If the host has no display, install Xvfb and xauth once. Xvfb supplies an invisible display; a physical GPU is not required. ```sh sudo apt-get update && sudo apt-get install --no-install-recommends xvfb xauth ``` ### Expected result The packages install successfully. Stop on an installation error. ## Check AppArmor Apply an AppArmor exception only after confirming an Electron user-namespace denial. Ask your administrator if you do not manage the host. ```sh sudo journalctl -k -b --no-pager \ --grep='apparmor="DENIED".*(userns|electron)' -n 20 ``` ### Expected result Look for a matching AppArmor denial. Do not add an exception solely because the wallet failed to start. ## Permit the wallet sandbox An administrator can add a profile for the exact Electron executable. This grants user-namespace access to code run through that binary; it is not a full confinement policy. If a profile already exists, ask the administrator to review it rather than add another. Otherwise run this as the wallet user; sudo only writes and loads the system profile. Keep Electron's sandbox enabled. ```sh wallet_dir="${XDG_DATA_HOME:-$HOME/.local/share}/awal-nodejs/server" wallet_electron="$wallet_dir/node_modules/electron/dist/electron" if [ -x "$wallet_electron" ]; then sudo sh -c 'set -C; cat > /etc/apparmor.d/awal-wallet-electron' <, profile awal-wallet-electron "$wallet_electron" flags=(default_allow) { userns, } EOF sudo apparmor_parser -a /etc/apparmor.d/awal-wallet-electron else printf 'Wallet Electron executable not found: %s\n' "$wallet_electron" >&2 fi ``` ### Expected result Successful loading is normally silent. Stop on errors. To remove this exception later, stop the wallet, unload the profile with `sudo apparmor_parser -R /etc/apparmor.d/awal-wallet-electron`, then have the administrator remove that file. ## Keep Terminal 1 running Run without sudo and leave Terminal 1 open while using the wallet. This starts no permanent service and does not configure startup after reboot. ```sh wallet_dir="${XDG_DATA_HOME:-$HOME/.local/share}/awal-nodejs/server" xvfb-run -a -s '-screen 0 1280x720x24 -nolisten tcp' \ env STARTED_BY_CLI=true WALLET_STANDALONE=true \ "$wallet_dir/node_modules/.bin/electron" "$wallet_dir/bundle-electron.js" ``` ### Expected result The wallet application stays running. A GPU-process message alone is not proof of failure; [verify CLI status from Terminal 2](https://docs.agentrouter.cc/wallets/coinbase-linux#linux-status). ## Continue in Terminal 2 Open another terminal on the **same host as the same user**. Use Terminal 2 for [login](https://docs.agentrouter.cc/wallets/coinbase#coinbase-login), [funding](https://docs.agentrouter.cc/wallets/coinbase#coinbase-fund) and [purchase](https://docs.agentrouter.cc/wallets/coinbase#03-settle) while [Terminal 1](https://docs.agentrouter.cc/wallets/coinbase-linux#linux-run) remains running. [Electron on headless systems](https://www.electronjs.org/docs/latest/tutorial/testing-on-headless-ci) · [Ubuntu user-namespace profiles](https://ubuntu.com/blog/ubuntu-23-10-restricted-unprivileged-user-namespaces) ```sh npx awal@2.12.2 status ``` ### Expected result Status reports **Running**. Return to [email sign-in](https://docs.agentrouter.cc/wallets/coinbase#coinbase-login). If startup exits or status fails, [inspect the startup error](https://docs.agentrouter.cc/wallets/coinbase-linux#linux-diagnose) before continuing.