# Настройка Windows-киоска Exchanger ## Граница ответственности Exchanger в production включает borderless fullscreen, скрывает курсор и восстанавливает полноэкранный режим после смены фокуса, дисплея или разрешения. Приложение не может блокировать `Ctrl+Alt+Del`, системные жесты, переключение пользователя и аварийные средства Windows. Эти ограничения настраиваются операционной системой. ## Выделенная учётная запись 1. Создайте локального пользователя без административных прав, предназначенного только для автомата. 2. Запретите интерактивный доступ к рабочим документам и сетевым ресурсам, которые не нужны Exchanger. 3. Выдайте пользователю права записи только в `%APPDATA%\Godot\app_userdata\Exchanger` и каталог установки, если обновление выполняется отдельным сервисом. 4. Настройте автоматический вход только после оценки физической безопасности автомата. 5. Для полной блокировки оболочки используйте Windows Assigned Access либо Shell Launcher в поддерживаемой редакции Windows. Не переименовывайте exe и не заменяйте системную оболочку до проверки процедуры восстановления. ## Автозапуск и watchdog В `tools/windows` находятся: - `Exchanger.Watchdog.ps1` — запускает приложение и перезапускает его после завершения; - `Install-ExchangerKioskTask.ps1` — создаёт задачу Планировщика при входе выделенного пользователя; - `Uninstall-ExchangerKioskTask.ps1` — удаляет только эту задачу. Установка выполняется вручную из PowerShell под киоск-пользователем: ```powershell .\tools\windows\Install-ExchangerKioskTask.ps1 ` -ExecutablePath 'C:\Program Files\Exchanger\Exchanger.exe' ` -WhatIf .\tools\windows\Install-ExchangerKioskTask.ps1 ` -ExecutablePath 'C:\Program Files\Exchanger\Exchanger.exe' ``` Сначала обязательно используйте `-WhatIf`. Watchdog хранит собственный ограниченный журнал в `%LOCALAPPDATA%\Exchanger\watchdog`; пользовательские журналы приложения находятся отдельно в `%APPDATA%\Godot\app_userdata\Exchanger\logs`. ## Питание и дисплей - отключите сон, гибернацию и автоматическое выключение дисплея для киоск-профиля; - запретите USB selective suspend для подтверждённого COM-контроллера; - задайте фиксированную портретную ориентацию и масштаб Windows; - отключите автоматическое подключение беспроводных дисплеев; - после замены монитора проверьте 1080×1920 и fallback 720×1280; - настройте автоматическое включение ПК после восстановления питания в BIOS/UEFI. ## Защищённый сервисный вход Production не реагирует на `F10`. Экран PIN открывается только после физического сообщения `SERVICE` от периферийного контроллера и только когда пользовательская операция не выполняется. Защита включается в разделе «Общие» настроек владельца. После автосохранения и выхода следующий вход показывает создание PIN: необходимо ввести и повторить от 4 до 12 цифр. Последующие входы проверяют этот PIN; после пяти ошибок вход блокируется на 30 секунд. Кнопка «Сбросить PIN» удаляет старые проверочные данные, после чего новый PIN задаётся при следующем входе. Открытый PIN не входит в `appsettings.json`, резервную копию, журналы или diagnostic UI. В секции `Security` сохраняются только случайная соль, PBKDF2-SHA256-хеш и число итераций. Доступ к самому файлу конфигурации и учётной записи Windows всё равно должен быть ограничен средствами ОС. AES-ключ, платёжные данные и сырые команды контроллера через UI недоступны. ## Приёмка после настройки 1. Перезагрузите Windows и убедитесь, что появляется только Exchanger. 2. Завершите процесс через диспетчер задач из административной сессии и проверьте перезапуск. 3. Смените разрешение/отключите тестовый монитор и проверьте восстановление fullscreen. 4. Убедитесь, что клавиатура пользователя не открывает сервисные функции release-сборки. 5. Нажмите физическую кнопку `SERVICE`, проверьте PIN и блокировку после пяти ошибок. 6. Проверьте штатное удаление задачи через `Uninstall-ExchangerKioskTask.ps1 -WhatIf`, затем без `-WhatIf` на тестовом стенде. ## Восстановление Держите отдельную административную учётную запись и документированный способ временно вернуть Explorer. До обновления сохраняйте подписанный установочный пакет и последнюю рабочую версию. Не удаляйте `appsettings.json.bak`: приложение использует её для восстановления после повреждения или обрыва питания во время записи.