update readme

This commit is contained in:
cheykrym 2026-09-15 16:14:49 +03:00
parent f62da48585
commit ff341788ec
3 changed files with 507 additions and 46 deletions

223
README.md
View File

@ -1,42 +1,215 @@
# car_ui # Car UI
Интерфейс магнитолы для Raspberry Pi (PySide6), экран 1024x600. Интерфейс автомобильной мультимедийной системы для Raspberry Pi 4B с сенсорным дисплеем.
## Требования Приложение разработано на Python с использованием PySide6 / Qt 6 и рассчитано на работу как в обычном Desktop Environment во время разработки, так и напрямую через Qt EGLFS / DRM/KMS в production-режиме.
- Python 3.13.5 ## Architecture
## Как запускать В production-режиме полноценный Desktop Environment не используется.
Право на запуск: ```text
Raspberry Pi 4B
```bash ↓
chmod +x setup_venv.sh run_ui.sh build_app.sh Debian 13 (Trixie)
↓
systemd
↓
multi-user.target
↓
tty1
↓
car-ui.service
↓
Qt EGLFS
↓
DRM/KMS
↓
Car UI
``` ```
Запуск: Bluetooth подготавливается отдельным `bt-unblock.service`, который снимает RFKill-блокировку перед запуском Car UI.
```bash ## Project structure
./setup_venv.sh
./run_ui.sh ```text
./build_app.sh car_ui/
├── assets/ # Ресурсы приложения
├── audio/ # Работа с аудио
├── controllers/ # Контроллеры приложения
├── docs/ # Документация
├── screens/ # Экраны интерфейса
├── scripts/ # Build / run / deploy scripts
├── services/ # Сервисы приложения
├── system_configs/ # systemd units и системная конфигурация
├── themes/ # Темы интерфейса
├── ui/ # UI-компоненты
│
├── car_ui.spec # Конфигурация PyInstaller
├── main.py # Entry point
├── requirements.txt # Python-зависимости
└── README.md
``` ```
## Скрипты ## Quick start
- `setup_venv.sh` — создает виртуальное окружение `.venv` и устанавливает зависимости из `requirements.txt`. ### Development
- `run_ui.sh` — запускает UI локально, выставляя `DISPLAY=:0` и выполняя `main.py`.
- `build_app.sh` — собирает приложение через PyInstaller в `dist/` (имя `car_ui`).
## Конфиг Подготовить окружение и собрать проект:
Файл конфигурации UI находится здесь: `~/.config/car_ui/ui.conf`. ```bash
./scripts/build.sh
```
## Файлы-маркеры в корне `build.sh` автоматически:
В корне проекта могут находиться специальные файлы-маркеры: - создаёт `.venv`, если окружение отсутствует;
- устанавливает зависимости из `requirements.txt`;
- собирает приложение через PyInstaller.
- `reset` — сигнал сброса до заводских настроек. Для запуска исходного кода:
- `dev_mode_enable` — сигнал включения режима разработчика.
Если нужен соответствующий режим, создайте пустой файл с нужным именем; удалите файл, чтобы отключить режим. ```bash
./scripts/run.sh
```
Логи прямого запуска сохраняются в:
```text
debug.log
```
### Build
Собрать standalone-приложение:
```bash
./scripts/build.sh
```
Результат сборки:
```text
dist/car_ui/
├── car_ui
└── _internal/
```
PyInstaller использует конфигурацию:
```text
car_ui.spec
```
### Deploy
Установить готовую сборку в систему:
```bash
sudo ./scripts/deploy.sh
```
Приложение устанавливается в:
```text
/opt/car_ui/
```
Production systemd service запускает:
```text
/opt/car_ui/car_ui
```
## Production and Development modes
Car UI поддерживает два режима работы системы.
### Car mode
Используется для штатной работы магнитолы:
```text
multi-user.target
↓
tty1
↓
Qt EGLFS
↓
Car UI
```
Desktop Environment при этом не запускается.
### Development mode
Для разработки используется обычный:
```text
graphical.target
↓
Desktop Environment
↓
scripts/run.sh
```
Инструкции по настройке и переключению режимов находятся в:
[`docs/auto-start.md`](docs/auto-start.md)
## First system setup
Инструкция по подготовке чистой Debian 13 (Trixie), установке системных зависимостей, сборке и первоначальному развёртыванию:
[`docs/first-system-setup.md`](docs/first-system-setup.md)
## Configuration
Конфигурация UI хранится в:
```text
~/.config/car_ui/ui.conf
```
## Marker files
В корне проекта могут использоваться специальные marker-файлы.
### `reset`
Сигнал приложению выполнить сброс до заводских настроек.
Создать:
```bash
touch reset
```
Удалить:
```bash
rm reset
```
### `dev_mode_enable`
Включает режим разработчика приложения.
Создать:
```bash
touch dev_mode_enable
```
Удалить:
```bash
rm dev_mode_enable
```
## Documentation
Основная документация проекта находится в `docs/`:
- [`first-system-setup.md`](docs/first-system-setup.md) — подготовка чистой системы;
- [`auto-start.md`](docs/auto-start.md) — systemd, автоматический запуск и переключение Car / Development mode.

View File

@ -1,49 +1,237 @@
# Automatic startup
Настройка автоматического запуска Car UI без Desktop Environment.
# 1. Установить unit В production-режиме система загружается в `multi-user.target`, после чего
```bash Car UI запускается через Qt EGLFS/DRM на `tty1`.
sudo cp system_configs/bt-unblock.service /etc/systemd/system/bt-unblock.service
sudo cp system_configs/car-ui.service /etc/systemd/system/car-ui.service Схема запуска:
```text
Debian
↓
systemd
↓
multi-user.target
↓
tty1
↓
car-ui.service
↓
Qt EGLFS
↓
DRM/KMS
↓
Car UI
``` ```
# 2. Освободить tty1 для Car UI ## Car mode
### 1. Установить systemd units
Скопировать systemd-сервисы:
```bash
sudo cp system_configs/car-ui.service /etc/systemd/system/car-ui.service
sudo cp system_configs/bt-unblock.service /etc/systemd/system/bt-unblock.service
```
Перечитать конфигурацию systemd:
```bash
sudo systemctl daemon-reload
```
### 2. Освободить tty1 для Car UI
Car UI использует `tty1` для прямого доступа Qt EGLFS к DRM/KMS.
Отключить стандартный login prompt на `tty1`:
```bash ```bash
sudo systemctl disable --now getty@tty1.service sudo systemctl disable --now getty@tty1.service
sudo systemctl mask getty@tty1.service sudo systemctl mask getty@tty1.service
``` ```
# 3. Перечитать units ### 3. Включить необходимые сервисы
Включить автоматическое снятие RFKill-блокировки Bluetooth:
```bash ```bash
sudo systemctl daemon-reload sudo systemctl enable bt-unblock.service
``` ```
# 4. Включить автозапуск Car UI Включить автоматический запуск Car UI:
```bash
sudo systemctl enable car-ui.service
```
### 4. Отключить Desktop Environment при загрузке
Установить `multi-user.target` как target по умолчанию:
```bash
sudo systemctl set-default multi-user.target
```
### 5. Проверить конфигурацию
Проверить target по умолчанию:
```bash
systemctl get-default
```
Ожидаемый результат:
```text
multi-user.target
```
Проверить сервисы:
```bash
systemctl is-enabled bt-unblock.service
systemctl is-enabled car-ui.service
```
Ожидаемый результат для обоих:
```text
enabled
```
Проверить состояние `getty@tty1`:
```bash
systemctl is-enabled getty@tty1.service
```
Ожидаемый результат:
```text
masked
```
### 6. Перезагрузить систему
```bash
sudo reboot
```
После загрузки Car UI должен автоматически запуститься без Desktop Environment.
---
## Development mode
Для разработки можно вернуть обычный Desktop Environment.
### 1. Отключить автоматический запуск Car UI
```bash
sudo systemctl disable car-ui.service
```
### 2. Вернуть login prompt на tty1
```bash
sudo systemctl unmask getty@tty1.service
sudo systemctl enable getty@tty1.service
```
### 3. Включить графический режим загрузки
```bash
sudo systemctl set-default graphical.target
```
### 4. Перезагрузить систему
```bash
sudo reboot
```
После загрузки должен запуститься обычный Desktop Environment.
Car UI в development mode можно запускать напрямую из исходного кода:
```bash
./scripts/run.sh
```
---
## Return to Car mode
Для возврата из Development mode в production Car mode:
### 1. Освободить tty1
```bash
sudo systemctl disable --now getty@tty1.service
sudo systemctl mask getty@tty1.service
```
### 2. Включить сервисы
```bash ```bash
sudo systemctl enable bt-unblock.service sudo systemctl enable bt-unblock.service
sudo systemctl enable car-ui.service sudo systemctl enable car-ui.service
``` ```
# 5. Загружаться без Desktop ### 3. Вернуть консольный режим загрузки
```bash ```bash
sudo systemctl set-default multi-user.target sudo systemctl set-default multi-user.target
``` ```
# 6. Проверка ### 4. Перезагрузить систему
```bash
systemctl get-default
systemctl is-enabled car-ui.service
```
# 7. Перезагрузка
```bash ```bash
sudo reboot sudo reboot
``` ```
## Включить Desktop ---
## Диагностика
Проверить состояние Car UI:
```bash ```bash
sudo systemctl disable car-ui.service systemctl status car-ui.service --no-pager -l
sudo systemctl unmask getty@tty1.service ```
sudo systemctl enable getty@tty1.service
sudo systemctl set-default graphical.target Посмотреть журнал текущей загрузки:
sudo reboot
```bash
journalctl -u car-ui.service -b
```
Показать последние 100 записей:
```bash
journalctl -u car-ui.service -b --no-pager -n 100
```
Проверить Bluetooth:
```bash
systemctl status bluetooth.service
systemctl status bt-unblock.service
rfkill list
```
Проверить DRM-устройства:
```bash
ls -l /dev/dri/
```
Проверить активную виртуальную консоль:
```bash
fgconsole
cat /sys/class/tty/tty0/active
``` ```

100
docs/first-system-setup.md Normal file
View File

@ -0,0 +1,100 @@
# First system setup
Первоначальная настройка Raspberry Pi для запуска Car UI.
Инструкция рассчитана на Debian 13 (Trixie).
## 1. Установить системные зависимости
```bash
sudo apt update
sudo apt install \
python3 \
python3-venv \
rfkill \
bluetooth \
bluez \
fonts-noto
```
## 2. Настроить пользователя
Добавить пользователя в группы, необходимые для работы с оборудованием:
```bash
sudo usermod -aG audio,video,render,input,bluetooth cheykrym
```
После изменения групп необходимо перелогиниться или перезагрузить систему:
```bash
sudo reboot
```
Проверить группы:
```bash
groups cheykrym
```
## 3. Проверить Bluetooth вручную
Проверить состояние RFKill:
```bash
rfkill list
````
При необходимости вручную снять блокировку:
```bash
sudo rfkill unblock bluetooth
```
Проверить Bluetooth service:
```bash
systemctl status bluetooth.service
```
При автоматическом запуске снятие RFKill-блокировки выполняется
`bt-unblock.service`.
## 4. Подготовить проект
Перейти в директорию проекта и выполнить:
```bash
./scripts/build.sh
```
Скрипт автоматически:
* создаст `.venv`, если его ещё нет;
* установит Python-зависимости из `requirements.txt`;
* соберёт приложение через PyInstaller.
Готовая сборка появится в:
```text
dist/car_ui/
```
## 5. Установить приложение
```bash
sudo ./scripts/deploy.sh
```
Приложение будет установлено в:
```text
/opt/car_ui/
```
## 6. Настроить автоматический запуск
После установки приложения выполнить настройку systemd согласно:
[`docs/auto-start.md`](auto-start.md)