← Česta pitanja

Česta pitanja napisana su na engleskom i nizozemskom; prikazuju se na engleskom.

Česta pitanja

Login: first boot, login screen, offline and company login

FAQ › EUZOS Desktop › Login · Nederlands

What is it?

When EUZOS Desktop has booted, it shows the login screen. Nothing of a user is stored on the PC in the clear: the profile comes from the profile server after you log in, lives only in RAM, and is wiped when you sign out ("fully online, nothing local"). You can log in in four ways:

  1. QR code with the EUZOS app on your phone (the phone chooses the profile, Work or school or Personal, and you confirm with fingerprint or Face ID);
  2. e-mail address and password (the same as in the EUZOS app);
  3. Sign in with Microsoft (your company's Entra ID work account, device code flow);
  4. offline sign-in with the password you last used on this PC, when there is no connection.

Which profile server the PC trusts is in \EOS\FW\PROFILE.TXT.

How do I…?

How do I get to the login screen after installing?

Boot from the internal disk (or the stick). When the network, Wi-Fi and sshd have started, the boot screen stops and screen::start_up shows the login screen, with the boot sound. Two things keep you in the console instead:

  • \EOS\FW\SCREEN.TXT contains the word console (see Screen lock › Config files);
  • there is no usable PROFILE.TXT (profile::boot_check): no file, an unreadable file, or a file this PC cannot log in with. The console then prints Screen : console, because …. A production build needs no PROFILE.TXT (it has the production server built in).

Type screen login in the console to show the login screen anyway.

How do I log in with my phone?

Open the EUZOS app and scan the QR code. The app shows the same six-digit pairing code that is printed below the QR code; check that they match, choose the profile (Work or school / Personal) and confirm. While no phone has fetched the code, the QR code is replaced by a new one every 30 s (a photo of the screen is worthless after that); once a phone has fetched it, the screen shows "Confirm on your phone…" until you confirm or refuse.

How do I log in with e-mail and password?

Type your e-mail address and password in the form to the right of the QR code and press Sign in (or Enter). The QR code keeps working meanwhile. In a test build you can log in to another environment by prefixing the address: sbx:<e-mail> or prod:<e-mail> (see Environments).

How do I create an account on the PC?

Press Create account below the form: first name, last name, place of residence, e-mail address and a password (at least 10 characters, twice). The profile server sends a 6-digit code by e-mail (valid 24 hours); type it on the PC, after which the PC logs you in. Send code again requests a new code. A QR code on that screen opens the registration web page (https://<server>/registreer) on your phone. If the server does not allow self-registration, the screen says "Ask the administrator".

How do I sign in with my Microsoft work account?

Press Sign in with Microsoft (only shown when the PC has an Entra app in \EOS\FW\MSAPP.TXT). The screen shows an address (microsoft.com/devicelogin), a code in large print and a QR code. Sign in on your phone or another computer; your organisation's MFA and Conditional Access apply. The PC then sends the ID token to the profile server, which logs you in with your business profile. Your organisation must be registered at the profile server (tenant and e-mail domain), otherwise you see "Your organisation does not use EUZOS yet". Mail and OneDrive then work right away with the same Microsoft sign-in. See Profile server › Organisations.

How do I log in without internet?

If you logged in with a password on this PC before (and the server's policy allows offline sign-in), the PC keeps an offline vault. Without a connection the login screen shows Offline sign-in next to the Choose Wi-Fi card: "No connection; sign in with the password you last used on this PC". With the right password your profile directory opens in offline mode, with the Offline label in the bar. As soon as there is internet again, the PC reconnects by itself (every 30 s) and the label disappears.

Limits: 3 free attempts, then a growing wait (30 s, 60 s, 120 s, … at most 15 min); after 10 errors the offline vault is erased. The vault expires after the number of days the server allows (default 14, at most 30, 0 = not allowed). Logging in with the QR code or Microsoft does not create an offline vault.

How do I sign out?

On the desktop: the power button › Sign out, then confirm "Sign out?". In the console, the terminal or over SSH: logout (no question). Signing out logs the token out at the profile server, wipes the profile and everything of the session from memory (browser data, mail, Chromium, Microsoft tokens, clipboard, terminal scrollback and shell history) and shows the login screen with a new code.

You are also signed out automatically when:

  • you sign out this PC remotely from the EUZOS app;
  • the PC has had no valid answer from the server for 15 minutes;
  • you have been logged in for 12 hours (also offline).

How do I choose the language of the login screen?

Tap the Language card at the bottom and choose one of the 34 languages. It applies right away and the PC remembers it in \EOS\FW\LANG.TXT (written once nothing has been chosen for 2 s). That choice wins over language= in PROFILE.TXT. After login the profile's language applies.

How do I allow only business profiles on this PC?

profile private off writes private=off into PROFILE.TXT (legacy prive=uit is still read). The login screen then only offers "Work or school", the PC asks the server for voorkeur=zakelijk and refuses a personal profile that still comes in. profile private on reverses it.

How do I switch between SBX and PROD?

Only in a test build:

  • environment shows the build, the default environment and the environment of the current session;
  • environment sbx|prod writes environment= into PROFILE.TXT (with the built-in server and key; private= and language= stay); active after a reboot;
  • profile sandbox|production|local [key] writes a fresh PROFILE.TXT for that environment; active from the next login code;
  • on the login screen, sbx:<e-mail> or prod:<e-mail> logs in to that environment for one session.

An orange SANDBOX label shows on the login screen while the default is SBX, and in the bar while the session is SBX. A production build only knows PROD and refuses these commands.

Why can't I open the console from the login screen?

In a production build the console (Ctrl+Alt+F1/T, screen console, the Console line in the power menu, the terminal), sshd, log and profile/environment are admin commands: they are only allowed with a signed policy in your profile (beheer=), set by the administrator on the profile server. Without a logged-in session a production build only accepts help, reboot, poweroff, screen login, screen back, and battery, date, mem without arguments. A test build allows everything unless a signed policy says otherwise. See Console.

How do I register this PC with a device key?

pckey create makes an Ed25519 device key in \EOS\FW\PCKEY.TXT (only with strong randomness, never overwritten). pckey shows the public key, its fingerprint and the CLI line the administrator runs on the profile server (pc-register '<name>' <key> <organization>). The key is used by Server Admin to sign commands to a workplace server; the installer never copies it.

Details

The QR login (session poll)

  1. Per login code the PC makes a LoginAttempt: a session id S (in the QR code https://<server>/l/<S>) and a PC secret G (128 bits, only in RAM, never on screen or in the log). The six-digit pairing code is computed from S and SHA-256(G) with the domain EUZOS-koppelcode-v1.
  2. Thread login (profile::wait_for_phone) polls every 2 s GET https://<server>/api/sessie/<S>?pc=<G>[&voorkeur=…]; the first poll creates the session on the server. As long as no phone has fetched the code, after 30 s (euzos_profile::QR_MS) the PC polls with &intrekken=1 and shows a new code.
  3. On ok the response is checked by euzos_profile::parse_response: version 2, the Ed25519 signature (handtekening=, over EUZOS-profiel-v2\0 + everything before it) with the key from PROFILE.TXT, and omgeving, server, sessie, pc equal to the PC's own values, verloopt in the future (when the clock comes from NTP). Otherwise the response is wiped and a new code comes.
  4. profile::login remembers server and token, starts the status thread and hands the profile to desktop::start.

After login

  • Status: thread status asks GET /api/status?token=… every 30 s. afgemeld (remote logout or expired) wipes the profile and shows the login screen. No valid answer for 15 min, or 12 h logged in: logout.
  • Settings write-back: what you change (bar, theme, language, colour, keyboard, touchpad, screensaver, recent apps, browser favourites, …) goes 2 s after the last change in one POST /api/profiel/instellingen?token=…. On failure (no network, 429, 5xx) it is retried after the next valid status reply; logout sends what is still pending first. Only the names of the settings go into the log, never the values.
  • Admin policy: environment::set_policy takes beheer= from the signed profile (in a production build only from a PROD profile signed with the built-in production key). It is cleared on every logout path.

Offline sign-in

  • After a successful password login, thread login-pw derives a key from the password (Argon2id, 64 MiB, t=4, own salt; offline::after_login). When the profile directory is open, the vault goes to partition 2 (euzos_profiledir::offline, max. 8 per PC) and the signed profile to systeem/offline/profiel in the directory.
  • Without a connection (offline::try_login, only on a network error, never on an error answer from the server) the vault, the directory and the profile open; the server's signature is checked again. The session has no PC token: no vault, DriverEnricher, BrowserFeedback or app catalogue.
  • Thread reconnect (every 30 s) posts the reconnect token; 200 makes the session online (profile::came_online), 403 (revoked, blocked, deleted, expired, off, unknown) erases the vault and signs out.
  • Settings changed offline that could not be sent are saved in systeem/offline/instellingen-<n> and sent by the next online session.

Microsoft (Entra) login

kernel/src/entra.rs: thread entra requests a device code (RFC 8628) with the client id from MSAPP.TXT, scopes openid profile email plus those of mail and OneDrive. After confirmation the ID token goes to POST /api/pc/entra (profile::entra_request) with its own session id and PC secret; the server answers with a signed profile (methode=microsoft), always the business profile. entra::take_token then turns the Microsoft token into an account of crate::microsoft (mail, OneDrive). Tokens and codes stay in RAM.

Login screen layout

libs/ui/src/login.rs: logo top left; "SIGN IN" with the QR column on the left and the form (e-mail, password, Sign in) on the right, with "or" between them (in portrait stacked); below the form Create account and Sign in with Microsoft. At the bottom a row of cards:

CardShowsTap
Networkcable or Wi-Fi with name and strengththe Wi-Fi panel
Mobile (only with a modem)provider, generation, signal, or "PIN required", "No SIM card"the Mobile network panel (PIN field)
Languageglobe and language namethe language panel
Battery (only with a battery)percentage and charging state—
Timetime and date—
PowericonRestart, Shut down, Console (Console not in a production build)

Without network or profile server there is no QR code but an explanation and Choose Wi-Fi.

Reference

Console commands

CommandArgumentsWhat it does
screen login— (legacy alias scherm inlog)the login screen with a new login code
screen off— (legacy uit)back to the console; a logged-in profile is signed out and wiped
screen desktop[business|private] [<language code>] (legacy zakelijk, prive, privé)the desktop with a sample profile, without logging in; refused when someone is logged in
logout— (legacy aliases afmelden, uitloggen)sign out: token out at the server, profile wiped, login screen
profile— (legacy alias profiel)show environment, server, key (hex and key id), private on/off, whether login is possible, the server of the session
profile sandbox—write PROFILE.TXT for the sandbox server with the built-in sandbox key (test build)
profile production— (legacy productie)write PROFILE.TXT for the production server (test build)
profile local[key] (legacy lokaal)PROFILE.TXT for a local development server; key = 64 hex from euzos-profielserver key; the TLS root comes from \EOS\FW\EXTRA.PEM
profile privateoff|on (legacy prive, privé; uit, aan)set or remove private=off
environment— (legacy alias omgeving)show build, default environment and session environment
environmentsbx|sandbox|prod|production (legacy productie)set environment= in PROFILE.TXT; after a reboot (test build only)
offline—the offline vaults on this PC (days left, errors, Argon2id parameters; no addresses) and whether the session is offline
offline wipe— (legacy wis)erase all offline vaults on this PC
pckey— (legacy alias pcsleutel)show the device key, fingerprint and the pc-register line
pckey create— (legacy maak)create \EOS\FW\PCKEY.TXT (refused if it exists or without RDRAND)

All other screen subcommands (console, back, welcome, theme, lock, photo, test-build helpers) are on Screen lock › Console commands.

profile, environment, log, sshd and showing the console are admin commands (euzos_profile::console::Admin), see Console.

Functions and modules

Function / moduleRole
kernel::profile::config / config_for / active_configPROFILE.TXT of this boot; config for an environment; config of the logged-in session
kernel::profile::boot_checkis there a usable PROFILE.TXT (decides login screen vs console)
kernel::profile::command, environment_commandthe profile and environment commands
kernel::profile::LoginAttempt (qr, pairing_code)one login code: session id, PC secret, pairing code
kernel::profile::wait_for_phonethread login: polls the session
kernel::profile::login, login_offline, came_online, end_offlinestart an online/offline session, go online, end offline
kernel::profile::login_with_password, password_loginpassword login from the login screen / the installer
kernel::profile::register, confirm, resend_request, registration_qrcreate an account on the PC
kernel::profile::entra_requestID token to the profile server
kernel::profile::logout, session_logout, clear_user, logout_at_serversign out and wipe everything of the user
kernel::profile::setting_changed, recent_changed, favorites_changed, sites_changed, mail_accounts_changedqueue settings for write-back
kernel::profile::unlock_checkpassword check for the lock screen
kernel::offline::{after_login, try_login, follow, check, command}offline vault: create, log in, reconnect, unlock check, console
kernel::entra::{start, take_token}Microsoft device code flow
kernel::device_key::{command, public_key, sign_command}the PC's device key
kernel::environment::{PRODUCTION, set_policy, clear_policy, admin_allowed, shell_allowed}build type and admin policy
kernel::lang::{pc, current, set_pc, set_session, choice}language of the PC and of the session; LANG.TXT
kernel::screen::{start_up, login_show}show the login screen at boot / on demand
euzos_profile::Config::parseparse PROFILE.TXT
euzos_profile::parse_response, parse_statuscheck the session and status answers
euzos_profile::pairing_codesix-digit pairing code
euzos_profile::writeback::{KEYS, valid, Changes, parse_response}settings write-back allowlist and request
euzos_profile::console::{Admin, Policy, allowed, line_allowed, allowed_without_session, policy_for_build}console and admin rules
euzos_profiledir::offlinethe offline vault table on partition 2
euzos_oauth::MsAppparse MSAPP.TXT
euzos_ui::logindrawing the login screen and its cards

Config files

Since 27-10-2026 EUZOS writes English config file names, keys, values and confirmation words (for example WIPE-…, environment= in PROFILE.TXT); the old Dutch names (marked legacy here) are still read and accepted (docs/ENGLISH.md).

FileKeyValuesMeaning
\EOS\FW\PROFILE.TXT (legacy name PROFIEL.TXT, still read)environment (legacy omgeving)local, sandbox, production (legacy lokaal, productie)environment (required)
serverhost or host:portprofile server (default: built-in for the environment)
key (legacy sleutel)64 hexthe server's public Ed25519 key
key-id (legacy sleutel-id)16 hexmust match the key (typo check)
private (legacy prive)on, off (legacy aan, uit)off: only Work or school
language (legacy taal)language codelanguage of the PC (login and boot screen)
(other keys)—skipped; a key twice is an error (a Dutch key and its English one count as the same key)
\EOS\FW\LANG.TXT (legacy TAAL.TXT)language (legacy taal)one of the 34 codeslanguage chosen on the login screen; wins over language= in PROFILE.TXT
\EOS\FW\MSAPP.TXTclient_idGUID (required)Entra app for Sign in with Microsoft
tenantcommon (default), organizations, consumers, tenant id/domainwhich accounts may sign in; unknown keys are an error
\EOS\FW\PCKEY.TXT(one line)64 hexEd25519 seed of the device key
\EOS\FW\SCREEN.TXT (legacy SCHERM.TXT)first wordconsole; login/inlog/graphical/grafisch or emptyconsole: no boot screen and no login screen
\EOS\FW\EXTRA.PEM—PEMown TLS root for profile local (ignored in a production build)

In a production build only private= and language= from PROFILE.TXT count; server and key are built in (Config::production_only).

API endpoints (called by the PC)

The kernel still calls the legacy Dutch routes; the English routes are live next to them on the server with byte-identical bodies. Full details: Profile server › API.

MethodPath the kernel uses (legacy)English routePurpose
GET/api/sessie/<S>?pc=<G>[&voorkeur=…][&intrekken=1]/api/session/{id}poll the QR login
GET/api/status?token=…/api/statusis the session still valid
GET/api/afmelden?token=…/api/logoutlog the PC token out
POST/api/pc/inloggen/api/pc/loginpassword login (also the lock screen)
POST/api/pc/entra/api/pc/entraMicrosoft ID token login
POST/api/pc/herverbind/api/pc/reconnectoffline session back online
POST/api/pc/registreer/api/pc/registercreate an account
POST/api/pc/verifieer/api/pc/verifyconfirm the e-mail code
POST/api/pc/opnieuw/api/pc/resendnew e-mail code
POST/api/profiel/instellingen?token=…/api/profile/settingssettings write-back

Page URLs: https://<server>/l/<S> (QR code), https://<server>/registreer (registration QR).

Protocol messages and formats

Session poll answer (first line, then key=value lines):

First lineLinesMeaning
wachtcode=<6 digits>, gezien=1not approved yet (gezien=1: a phone fetched the code)
verlopenreden=…too late, refused, revoked or used: new code
okversie=2, omgeving, server, sessie, pc, verloopt, profile lines, token=, handtekening= (last)the signed profile

Profile lines (signed, Dutch keys on the wire): soort=zakelijk|prive, naam, weergavenaam, kleur, taal, item= (files), recent=, settings keys (below), beheer= (admin policy, signed only), beleid-scherm= (screen policy, signed only), and after a password login offline-dagen=, offline-token=, account=.

Settings write-back keys (euzos_profile::writeback::KEYS): kleur, taal, balk (boven|onder), balk-verbergen, taskbar-hide-maximized (on|off), welkom, schermtoetsenbord (automatisch|altijd|nooit), toetsenbord (layout), toetsenbord-tik, thema (donker|licht|automatisch), touchpad-natuurlijk, touchpad-tikken, touchpad-rechtsklik, touchpad-snelheid, touchpad-aanwijzer, muis-snelheid, muis-omwisselen, muis-wiel-omkeren, pointer-size, pointer-hide, aanraak-vegen, aanraak-doorrollen, aanraak-lang-drukken, screensaver, screensaver-wachttijd, screensaver-animatie, vergrendelen, recent, browser-zoekmachine, browser-favoriet, browser-engine, browser-site, mail-account. On/off values are aan|uit.

Write-back answer (writeback::parse_response): 200 ok = saved; 401 = token gone; 400/413 = rejected (reason on line 2); 404 = server too old; otherwise retry.

Status answer: ok (with verloopt=) or afgemeld (with reden=).

Admin policy line: beheer=console,sshd,log,profiel (any subset; lokaal counts as profiel; empty or geen = nothing).

Signed constants: EUZOS-profiel-v2\0 (profile signature domain), EUZOS-koppelcode-v1\0 (pairing code).

See also